Sur 401, l'intercepteur n'effaçait que le token localStorage mais pas le
cookie cesizen-auth lu par le middleware -> /connexion redirigeait vers
/dashboard à l'infini quand le JWT (60 min) expirait. On purge désormais
aussi le cookie et l'état Zustand persisté avant de rediriger.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- écrans auth/dashboard/journal/info/urgence/profil refondus sur le design system
- AppBar institutionnel République Française sur tous les écrans
- partie admin (utilisateurs, contenus, émotions) avec AdminGuard
- entrée Espace administration dans le profil (admins uniquement)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- supprime ThemeToggle orphelin (inerte, forçait le thème sombre)
- remplace les confirm() natifs par ConfirmDialog DSFR sur les 3 pages admin
(utilisateurs, contenus, émotions)
- tooltips Recharts en variables DSFR (lisibles en clair ET sombre)
tsc 0, build OK.
- throttle:10,1 sur l'inscription (anti-spam de comptes)
- un admin ne peut plus désactiver/supprimer son propre compte (anti lock-out)
- update/destroy saisie : abort 404 propre si l'utilisateur n'a pas de tracker
Tests 15/15, Pint pass.
Le FRONTEND_URL=http://localhost du .env masquait l'origine de production -> CORS
bloquait cesizen.cleanows.fr. L'entrypoint écrit désormais les URLs publiques
(fournies par le conteneur) dans le .env.
Un DB_PASSWORD vide dans .env (issu de .env.example) masquait la valeur du
conteneur -> 'no password supplied'. L'entrypoint force désormais DB_HOST/PORT/
DATABASE/USERNAME/PASSWORD dans .env (valeurs par défaut alignées sur postgres).
Force la création d'un volume neuf -> postgres s'initialise avec le mot de passe
figé, sans avoir à supprimer manuellement l'ancien volume (mismatch). Un simple
Redeploy suffit.
APP_KEY/JWT_SECRET générés par l'entrypoint (hors dépôt). Domaines + identifiants
DB internes figés en dur (Coolify ne propage pas les ${...}). Base non exposée.
L'API tentait de joindre un service 'redis' inexistant en prod. Bascule des
défauts CACHE_STORE/SESSION_DRIVER/QUEUE_CONNECTION sur database + optimize:clear
au démarrage pour relire les variables d'env.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Corrige MissingAppKeyException : une variable d'env vide masquait la valeur du
.env. On force désormais APP_KEY/JWT_SECRET dans .env si fournies, sinon on les
génère ET on les exporte dans l'environnement du process.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Le conteneur postgres plantait (unhealthy) faute de POSTGRES_PASSWORD. Valeur par
défaut fournie (à surcharger dans Coolify) + start_period pour le healthcheck.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- évolution : courbes monotone (vagues sinusoïdales illisibles) remplacées par
un histogramme empilé par émotion, bien plus lisible
- ajoute une confirmation avant déconnexion dans l'en-tête web
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
L'ancienne implémentation (<dialog> plein écran transparent) rendait la page
inutilisable au clic sur éditer/supprimer : overlay invisible captant tous les
clics, sans fond assombri ni fermeture au clic extérieur. Remplacé par un
overlay React maîtrisé (fond assombri, clic extérieur/Échap/bouton ferment).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
L'appel API /auth/logout pouvait bloquer la déconnexion ; on purge le token et
réinitialise l'état immédiatement, puis on notifie le serveur en arrière-plan.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Une version 56.x avait été installée par erreur et transpilait mal pour Hermes
(« private properties are not supported »). Retour à la version du SDK 54.
Retire aussi le plugin worklets manuel (déjà fourni par le preset).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Le conteneur exécute `migrate --seed` à chaque démarrage ; sans garde, un
redémarrage dupliquait les émotions et les contenus. Skip si déjà peuplé.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- ajoute babel-preset-expo en devDependency (manquant après migration SDK 54,
bloquait le bundling Metro)
- remplace le fr-btns-group du wizard de saisie par un flex simple : les
libellés "Précédent/Suivant/Enregistrer" ne sont plus tronqués
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
.fr-card (flex + height:100% + bordure ::before) débordait quand utilisé comme
conteneur générique (wizard de saisie, journal, rapports, profil, timeline) et
chevauchait le footer. Remplacé par .app-panel (panneau neutre, variables DSFR).
Les vraies cartes structurées (fr-card__body) sont conservées.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- palette officielle DSFR (#000091, rouge Marianne, gris DSFR) dans lib/colors.ts
- composant RepubliqueHeader (bloc « République Française » + service CESIZen)
- restyle boutons/champs/cartes/onglets/urgence au style gouv.fr sur tous les écrans
- couleurs d'émotions conservées
Le DSFR étant un framework web, le mobile en reçoit l'identité visuelle (pas les classes fr-*). tsc 0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- charge le DSFR (CSS/JS officiels) en statique via public/dsfr + postinstall
- en-tête officiel (bloc Marianne « République Française » + nom de service)
- pied de page officiel DSFR (liens institutionnels, licence etalab)
- page d'accueil refondue (hero, fr-card, fr-tile, fr-callout, fr-btn)
- composant Button mappé sur fr-btn
- assets DSFR hors git (régénérés par `npm install`)
Build OK (19 routes). Pages internes encore en Tailwind : conversion à poursuivre.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- DemoSeeder : membre demo@cesizen.fr / Demo123! + 18 saisies sur 4 semaines
(émotions variées, Joie dominante) pour une démo aux rapports déjà fournis
- Antiseche_Oral_CESIZen.md : déroulé 20 min avec démo live intégrée + script
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- colonne « Responsable » sur les 6 tables de tests (fonctionnels + non-fonctionnels)
- nouvelle section 6.4 : modèle de procès-verbal de recette
(identification, synthèse, réserves, décision, blocs de signature MOA/MOE)
Répond aux exigences de testing du sujet (responsable par test, PV de recette).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>