Les slides MCD (Merise) et Architecture MVC affichaient le diagramme de
cas d'usage (PPTX périmé). Les PNG sources étaient corrects ; il suffisait
de regénérer le support.
- backend : route santé Laravel /up via php (curl absent de l'image)
- frontend : page d'accueil via node http
Coolify attendra désormais que chaque conteneur soit prêt avant de router.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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>