9b6638eb00
Deploy / deploy (push) Successful in 1m13s
Deux courbes partagées dans lib/motion.ts, pour que le CSS et Framer aient le même feeling, et quatre primitives que Tailwind ne sait pas exprimer : reflet de bouton, halo qui suit le curseur, soulignement qui se dessine, secousse d'erreur. Nouveaux composants : Stagger (les collections se distribuent une par une), Spotlight (trouve son parent tout seul, donc les cartes restent des composants serveur), ScrollProgress, BackToTop, Parallax, Spinner, CheckMark. Reveal accepte maintenant une direction. Côté rendu : le trait de nav glisse d'un onglet à l'autre, les cartes se soulèvent, le hero réagit au scroll, les piliers entrent en zig-zag, la lightbox glisse dans le sens demandé et les formulaires répondent. prefers-reduced-motion est respecté partout : Framer coupe via useReducedMotion, le CSS via la media query déjà en place. Le commit embarque aussi la réorganisation des composants par domaine qui était en cours dans l'arbre de travail — les deux étaient trop imbriquées pour être séparées proprement. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
106 lines
5.9 KiB
Markdown
106 lines
5.9 KiB
Markdown
# 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)
|