Commit Graph

78 Commits

Author SHA1 Message Date
Azmog d41d725246 chore: fix curl method to POST for coolify api
CI / Backend · PHPUnit + Pint (push) Successful in 1m35s
CI / Frontend · ESLint + Vitest (push) Successful in 9m43s
CI / Mobile · Jest (push) Successful in 9m33s
CI / Déploiement · Coolify (push) Successful in 1s
2026-09-03 23:05:18 +02:00
Azmog 54a69c41d1 chore: print coolify response body
CI / Backend · PHPUnit + Pint (push) Successful in 1m45s
CI / Frontend · ESLint + Vitest (push) Successful in 9m43s
CI / Mobile · Jest (push) Successful in 9m37s
CI / Déploiement · Coolify (push) Failing after 2s
2026-09-03 22:31:26 +02:00
Azmog 78f67da87f chore: update coolify deploy webhook uuid
CI / Backend · PHPUnit + Pint (push) Successful in 1m34s
CI / Frontend · ESLint + Vitest (push) Successful in 9m42s
CI / Mobile · Jest (push) Successful in 9m33s
CI / Déploiement · Coolify (push) Successful in 1s
2026-09-03 21:46:04 +02:00
Azmog 80dab092da test: fix test to trigger deployment
CI / Backend · PHPUnit + Pint (push) Successful in 1m37s
CI / Frontend · ESLint + Vitest (push) Successful in 9m43s
CI / Mobile · Jest (push) Successful in 9m33s
CI / Déploiement · Coolify (push) Successful in 1s
2026-09-03 21:04:32 +02:00
Azmog a23b4ebd60 test: break test intentionally to check CI block
CI / Backend · PHPUnit + Pint (push) Failing after 1m24s
CI / Frontend · ESLint + Vitest (push) Successful in 9m44s
CI / Mobile · Jest (push) Successful in 9m34s
CI / Déploiement · Coolify (push) Has been skipped
2026-09-03 18:39:00 +02:00
AzmogExe 918416312d Actualiser README.md
CI / Backend · PHPUnit + Pint (push) Successful in 1m36s
CI / Mobile · Jest (push) Has been cancelled
CI / Frontend · ESLint + Vitest (push) Has been cancelled
2026-09-03 16:31:49 +00:00
Azmog c1a6d3c3e0 chore: trigger deployment webhook
CI / Backend · PHPUnit + Pint (push) Successful in 1m37s
CI / Frontend · ESLint + Vitest (push) Successful in 9m44s
CI / Mobile · Jest (push) Successful in 9m33s
2026-09-03 13:42:09 +02:00
Azmog 8e98e34014 fix: add force flag to key generation in ci to bypass prompts
CI / Backend · PHPUnit + Pint (push) Successful in 1m31s
CI / Frontend · ESLint + Vitest (push) Successful in 9m42s
CI / Mobile · Jest (push) Successful in 9m33s
2026-09-03 11:51:42 +02:00
Azmog cbd71f1fc3 fix: generate app and jwt keys in ci before testing
CI / Backend · PHPUnit + Pint (push) Failing after 1m10s
CI / Frontend · ESLint + Vitest (push) Successful in 9m42s
CI / Mobile · Jest (push) Has been cancelled
2026-09-03 11:42:37 +02:00
Azmog 10bc9ab1fb fix: linting phpdoc and npm legacy peer deps for ci
CI / Backend · PHPUnit + Pint (push) Failing after 1m19s
CI / Frontend · ESLint + Vitest (push) Successful in 9m42s
CI / Mobile · Jest (push) Successful in 9m34s
2026-09-03 11:11:31 +02:00
Azmog e1e5c7d35c test: add ping route for deployment verification
CI / Backend · PHPUnit + Pint (push) Failing after 1m11s
CI / Frontend · ESLint + Vitest (push) Successful in 9m45s
CI / Mobile · Jest (push) Failing after 4m44s
2026-09-03 11:05:35 +02:00
Azmog fec738df9f feat: ajout documentation PHPDoc et maj slides bloc 3
CI / Backend · PHPUnit + Pint (push) Failing after 1m20s
CI / Frontend · ESLint + Vitest (push) Successful in 10m27s
CI / Mobile · Jest (push) Failing after 4m47s
2026-09-03 10:07:32 +02:00
Azmog 867d744242 feat: add slide generation script for CESIZen project, covering deployment and security aspects 2026-07-09 16:41:44 +02:00
Azmog 37a1079201 fix(soutenance): regénère le PPTX avec les bons diagrammes MCD et MVC
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.
2026-06-19 16:06:28 +02:00
Azmog 94d4c9138b docs: antiseche orale en plan de points (quoi dire) au lieu de phrases a lire 2026-06-19 15:57:27 +02:00
Azmog cd7dfb6ce9 docs: réécrit l'antisèche orale en 'ce que je dis' (phrases prêtes + glossaire) 2026-06-19 15:55:20 +02:00
Azmog 7fcbe8ff64 chore(deploy): ajoute des health checks backend et frontend
- 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>
2026-06-19 15:51:04 +02:00
Azmog 004b8a12df fix(web): corrige la boucle de redirection infinie sur token expiré
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>
2026-06-19 15:45:59 +02:00
Azmog d5e11f93a9 fix(mobile): abaisse encore un peu la barre d'onglets
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:39:51 +02:00
Azmog b6d4578862 fix(mobile): abaisse les libellés de la barre d'onglets (moins de marge basse)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:39:05 +02:00
Azmog 925f56a649 fix(mobile): respecte les safe areas (Dynamic Island + indicateur home)
- AppBar : marge haute = inset top (plus de chevauchement avec l'heure/Dynamic Island)
- barre d'onglets : hauteur/marge basse = inset bottom (plus collée au bord)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:38:16 +02:00
Azmog 91ceca2be5 polish(mobile): audit design DSFR multi-agents — tokens, a11y, états, finitions
- tokens centralisés (Tint, IconSize, LineHeight, LetterSpacing), zéro hex en dur
- accessibilité (rôles, labels, live regions, afficher/masquer mot de passe)
- états vides/erreur complétés (ex. saisie introuvable), cibles tactiles >=44px
- suppression du composant mort RepubliqueHeader

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:29:40 +02:00
Azmog 7fd27d8dc2 feat(mobile): refonte design DSFR complète + partie admin
- é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>
2026-06-19 15:22:15 +02:00
Azmog 2e96e07c7e feat(mobile): fondation design system DSFR (theme + composants UI) + hooks admin + route admin
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:14:55 +02:00
Azmog 549a2fdb03 chore: ajoute make mobile-tunnel (Expo sans WiFi commun)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 14:47:10 +02:00
Azmog 21fd87eb1a chore: corrige l'avertissement watchman du mobile (.watchmanconfig + make mobile-reset)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 14:42:42 +02:00
Azmog 70722e3fe5 chore: ajoute un Makefile pour lancer back/web/mobile proprement
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 14:39:08 +02:00
Azmog 4f54340e89 fix: corrections post-audit (traçabilité, identité État, accents, graphique mobile)
Backend:
- table audits réellement alimentée via trait Auditable (observers Eloquent)
  sur Utilisateur, SaisieTracker, Feed, Emotion ; mot de passe jamais loggé
- 4 nouveaux tests (19/19 au total)

Frontend web:
- en-tête/pied République Française ajoutés aux pages connexion/inscription
- bouton variant danger réellement rouge (tokens erreur DSFR)

Mobile:
- ~30 libellés ré-accentués (Intensité, Succès, Déconnexion, Répartition...)
- Colors.secondary = rouge Marianne #E1000F (différenciation cartes/icônes)
- vrai camembert SVG des rapports (react-native-svg)

Docs: plans oraux mis à jour (audits actif, 29 tests, stockage JWT en Q/R)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:17:40 +02:00
Azmog 7be7bec53d docs: ajoute DSFR et déploiement en ligne aux plans oraux
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:01:30 +02:00
Azmog f18fb5450b fix(frontend): finitions DSFR (ThemeToggle orphelin, confirm() -> ConfirmDialog, tooltips)
- 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.
2026-06-19 10:57:01 +02:00
Azmog fe9e921d73 fix(backend): durcissements (throttle register, garde auto-suppression admin, null-check saisie)
- 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.
2026-06-19 10:47:37 +02:00
Azmog ae9395a831 fix: corrections issues de l'audit (design DSFR + SDK 54 mobile + honnêteté)
- globals.css : supprime l'override Inter/Poppins (Marianne DSFR s'applique) et
  les palettes candlelight/malachite mortes
- mobile : réinstall SDK 54 (expo 54, RN 0.81.5, worklets) ; app.json splash +
  adaptiveIcon en blanc (plus de jaune #fce117 hors charte)
- formulation honnête du chiffrement (politique conf. + inscription)
- compose : retire la référence au guide supprimé

Vérifs : frontend tsc/lint OK ; mobile tsc 0 + expo-doctor 18/18.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 10:44:45 +02:00
Azmog 35a28e2504 chore(deploy): supprime le fichier de déploiement Coolify obsolète 2026-06-19 10:30:37 +02:00
Azmog f2af66bd36 fix(deploy): force FRONTEND_URL/APP_URL dans .env (CORS prod)
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.
2026-06-19 10:30:11 +02:00
Azmog bcbdb2ab10 fix(deploy): écrit les paramètres DB dans .env au démarrage
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).
2026-06-19 10:26:41 +02:00
Azmog 40137c2991 fix(deploy): renomme le volume Postgres (init propre avec le bon mot de passe)
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.
2026-06-19 10:08:45 +02:00
Azmog 2dd93fbbb4 fix(deploy): valeurs en dur dans le compose, sans secret versionné
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.
2026-06-19 09:58:32 +02:00
Azmog cc64cb0180 fix(deploy): cache/session/queue en database par défaut (plus de dépendance Redis)
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>
2026-06-19 09:44:53 +02:00
Azmog 0c6195a4e9 fix(deploy): APP_KEY/JWT_SECRET fiables (écrit dans .env + export si générés)
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>
2026-06-19 09:39:47 +02:00
Azmog 1816fd585d fix(deploy): Postgres démarre sans config (mot de passe par défaut + start_period)
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>
2026-06-19 09:24:09 +02:00
Azmog f803798429 chore(deploy): renomme le compose de prod en .yaml (attendu par Coolify) 2026-06-19 09:18:54 +02:00
Azmog 9b63dc8809 feat(deploy): Dockerfiles de production + compose + guide Coolify
- frontend/Dockerfile.prod : Next.js standalone (294 Mo), régénère les assets DSFR,
  injecte NEXT_PUBLIC_API_URL au build (npm ci --ignore-scripts pour le postinstall)
- backend/Dockerfile.prod + docker/entrypoint.sh : API Laravel, migrations + seed
  idempotent + serveur, génération de secrets en fallback
- docker-compose.prod.yml : Postgres + API + Front pour déploiement Coolify
- next.config.ts : output standalone ; .dockerignore back/front
- DEPLOIEMENT_COOLIFY.md : guide + variables d'environnement

Images de prod testées (build + smoke-test DSFR OK).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 09:15:35 +02:00
Azmog 6de41bb6ce feat(expo): ajouter des fichiers README et settings pour la configuration de l'environnement Expo 2026-06-19 00:56:58 +02:00
Azmog bfdad3af5e Merge branch 'refonte-dsfr' 2026-06-19 00:51:17 +02:00
Azmog 2e2ee5fe71 chore(backend): autorise localhost:3001 en CORS (dev) 2026-06-19 00:51:17 +02:00
Azmog 4432bf5c21 fix(dsfr): graphique d'évolution en barres empilées + confirmation de déconnexion (web)
- é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>
2026-06-19 00:49:35 +02:00
Azmog 43a149381f fix(dsfr): Modal avec overlay visible et fermeture fiable
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>
2026-06-19 00:39:32 +02:00
Azmog df911efde1 fix(mobile): déconnexion locale d'abord (instantanée, fiable hors-ligne)
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>
2026-06-19 00:34:15 +02:00
Azmog 50bcd3533f fix(mobile): aligne babel-preset-expo sur 54.0.11 (SDK 54)
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>
2026-06-19 00:25:51 +02:00
Azmog ee4bbf321b fix(mobile): ajoute le plugin babel react-native-worklets (requis par Reanimated 4 / SDK 54)
Corrige l'erreur Hermes « private properties are not supported » au démarrage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:20:43 +02:00