# TODO — Highland Games Studio Website Liste des tâches restantes, classées par priorité. Dernière mise à jour : 2026-07-31 --- ## 🔴 P0 — Critique (avant toute mise en ligne) - [ ] **Vidéo 84 Mo dans Git** (`public/Video/Header_Video.mp4`) - [ ] Compresser la vidéo (cible < 5 Mo, ~1080p) avec ffmpeg - [ ] La sortir de l'historique Git (BFG ou `git-filter-repo`) — sinon elle reste à vie dans le repo - [ ] Extraire une image du 1er plan et la renseigner dans `HERO_VIDEO.poster` (`lib/site.ts`) — le champ existe déjà et attend juste un chemin - [ ] Idéalement : servir le fichier hors-Git (CDN / objet statique) - [ ] **Screenshots en PNG 5 Mo** (`public/image/Games/Emberwild/Capture_*.png`) - Next les réencode à la volée, mais le premier build/visiteur les paie plein pot. - [ ] Les réexporter en JPEG/WebP qualité ~85 (cible < 400 Ko chacun) - [ ] **Formulaires non fonctionnels** (perdent les données, juste un `console.log`) - [x] Choisir un service email → **Resend** - [x] Brancher le formulaire de contact → `app/actions/contact.ts` - [ ] Brancher la newsletter → `app/actions/subscribe.ts` - [x] Clé API + adresses lues depuis l'env (`.env.example` créé) - [ ] **À faire côté toi** : `npm install resend`, créer un compte Resend, vérifier le domaine, et renseigner `RESEND_API_KEY` / `CONTACT_TO_EMAIL` / `CONTACT_FROM_EMAIL` (en local dans `.env.local` + en prod sur le VPS) - [ ] **Déploiement à valider en réel** (Gitea Actions → Hetzner) - [x] Workflow porté sur Gitea (`.gitea/workflows/deploy.yml`, trigger `master`) - [ ] Configurer les secrets `SSH_*` dans Gitea (repo → Settings → Actions → Secrets) - [ ] Vérifier que `/var/www/highland` peut `git pull` le repo Gitea privé (deploy key/token) - [ ] Tester un push qui déclenche bien le deploy sur le Hetzner --- ## 🟠 P1 — Important (contenu avant lancement public) - [ ] **Remplacer tout le contenu placeholder** - [x] Vrai nom du jeu → **Emberwild** (`lib/games.ts`, slug `emberwild`) - [x] Vrais noms / bios de l'équipe → `app/studio/page.tsx` - [x] Vraies images de jeu / screenshots (key art, bannière, galerie) - [ ] Vrais liens réseaux sociaux → `SOCIAL_LINKS` dans `lib/site.ts` (les entrées à `href: null` sont masquées, plus de liens morts vers `#`) - [ ] Photos de Kevin et Axel → `app/studio/page.tsx` (le logo sert de placeholder) - [ ] **Configurer l'URL du site** - [x] Centralisée dans `lib/site.ts` (pilotable par `NEXT_PUBLIC_SITE_URL`) - [ ] Confirmer le domaine final et définir la variable d'env en production - [x] **Asset inutilisé** : `Full Logo.png` sert maintenant de source à `Wordmark.png` (version transparente utilisée dans le footer), généré par `node scripts/build-wordmark.mjs` --- ## 🟢 P2 — Plus tard (qualité / robustesse) - [ ] **Monitoring d'erreurs** (ex. Sentry) — le texte de `app/error.tsx` ne ment plus, mais aucune alerte n'existe - [ ] **Rate-limiting** sur les server actions (anti-spam une fois les emails branchés) - [ ] **Vulnérabilités npm** : `npm audit` remonte 5 alertes (1 low, 4 moderate) — à examiner - [ ] **Warning build** : `app/opengraph-image.tsx` utilise `runtime = "edge"` qui désactive la génération statique de la page — à vérifier si volontaire - [ ] **Press kit** : la page contact promet des assets « soon » — préparer un vrai press kit --- ## ✅ Refonte UX / structure (2026-07-31) - [x] **Incohérence home ↔ page jeu corrigée** : la home affichait « PROJECT ONE » avec ses propres textes et sa propre liste de screenshots codés en dur. Tout vient maintenant de `lib/games.ts` (`keyArt`, `banner`, `screenshots`), et les screenshots apparaissent enfin sur `/games/emberwild`. - [x] **Lisibilité** : plus aucun texte posé sur une image. Le key art est crème et les captures sont très claires — le texte crème par-dessus était illisible. Cards = image d'un côté, texte sur panneau plein de l'autre. - [x] **Logo** : plus de déformation (1344×768 rendu en 36×36, 120×80…), passe par `components/ui/Logo.tsx` qui déduit la hauteur. - [x] **Design system** : `Section`, `SectionHeading`, `PageHeader`, `ButtonLink`, `StatusBadge`, `Reveal`, `GameCard`, `ScreenshotGallery`, `PostList` — plus de duplication de `statusLabel` / `formatDate` / cards / boutons. - [x] **Composants rangés** par domaine (`ui/`, `layout/`, `game/`, `home/`, `devblog/`, `forms/`). - [x] **Home rendue côté serveur** (elle était entièrement `"use client"`). - [x] **Galerie avec lightbox** (clavier ←/→/Échap, scroll bloqué, légendes sur fond plein). - [x] **Accessibilité** : `prefers-reduced-motion` respecté (pas de vidéo ni d'animations), page active signalée dans la navbar, focus visibles, `formatDate` en UTC (la date d'un post ne décale plus d'un jour). - [x] **Typo mobile** : titres 6xl/7xl qui débordaient sur 375 px réduits en 4xl/5xl. - [x] **Contact** : emails en `text-xs` qui débordaient de leur colonne → `text-sm` + `break-all`, cartes en 1 colonne sur mobile. ## ✅ Déjà fait (2026-06-22) - [x] Supprimé les 5 SVG par défaut de create-next-app (inutilisés) - [x] Retiré 4 dépendances MDX inutilisées (`@next/mdx`, `@mdx-js/*`, `@types/mdx`) - [x] Ajouté `sharp` en devDependency (requis par `scripts/build-favicon.mjs`) - [x] Dédupliqué `.gitignore` (contenu collé en double) - [x] Réécrit le `README.md` (doc réelle au lieu du boilerplate) - [x] Corrigé le trigger de déploiement (`main` → `master`, + `git pull`) - [x] Corrigé une erreur de lint dans `Navbar.tsx` (setState dans useEffect) - [x] Retiré le texte trompeur « team has been notified » dans `error.tsx` - [x] Centralisé l'URL du site dans `lib/site.ts` - [x] Resynchronisé `package-lock.json` (nécessaire pour `npm ci` au deploy)