Toutes les pages (accueil, sujets, personnalités, détails) utilisent maintenant
createServerSupabaseClient() au lieu du client statique SSG. Cela permet aux mises
à jour de contenu d'être visibles immédiatement sans rebuild.
Le seed.sql est réduit au minimum (auth.users de test uniquement), tout le contenu
étant désormais géré par le script d'import idempotent (npm run import:content).
Ajout du script import:content:production pour cibler la base de production.
Installe prettier, configure .prettierrc (singleQuote, no semi, trailingComma, LF) et .prettierignore. Ajoute les scripts format et format:check. Applique le formatage sur tous les fichiers sources.
Introduit 3 clients Supabase distincts selon le contexte d'exécution :
- ssg.ts : singleton pour les lectures publiques (pages statiques, repos)
- ssr.ts : client par requête avec cookies pour les pages authentifiées
- browser.ts : client navigateur pour les composants client
Les repos deviennent des factories qui reçoivent le client Supabase en paramètre, permettant à l'appelant de choisir le contexte (SSG ou SSR).
Remplace les données en dur par une requête Supabase. Ajoute findLatest(limit) au StatementRepository avec le type LatestStatement. Le composant LastStatements devient un server component async avec Suspense, affiche les avatars et les liens vers les personnalités et sujets.
Page /contact avec bouton courriel. Le composant Button supporte désormais
les liens (href) en plus des boutons, avec couleur blanche forcée et masquage
des icônes ::after sur les boutons-liens.
Page /mentions-legales avec éditeur, hébergement, propriété intellectuelle et
données personnelles. Liens mailto avec icône enveloppe, liens textuels en rouge
souligné, icônes sans soulignement. Lien Mentions légales du footer fonctionnel.
Page /credits avec les 5 contributeurs (ordre alphabétique), historique du projet,
crédits photos et licence. Ajout d'une icône ↗ automatique sur tous les liens
externes du site. Lien Crédits du footer rendu fonctionnel.
Crée les pages /p/[slug] et /subjects/[slug] qui étaient des liens morts
depuis les pages index. Ajoute le StatementRepository (domain + infra)
pour les requêtes jointes statements/positions/sujets/personnalités.
Composants partagés extraits : FigureAvatar, ErrorDisplay.
La page personnalité affiche les prises de position groupées par sujet
avec label explicite "Sa position :". La page sujet affiche les positions
avec les avatars des personnalités concernées.