Files
cesizen-individuel/CLAUDE.md
T
Azmog e3da625927 feat: initialisation complète du projet CESIZen
- Backend Laravel 11 (API REST, JWT auth, PostgreSQL)
- Frontend Next.js 14 (React, TypeScript, Tailwind CSS)
- Docker Compose (PostgreSQL, backend, frontend)
- Modules : auth, profil, tracker émotions, informations, admin
2026-03-11 16:27:01 +01:00

10 KiB

CESIZen — Application de santé mentale

Projet

Projet CESI École d'Ingénieurs — Bloc "Concevoir les solutions logicielles" (INFCDAAL1). Plateforme web de gestion du stress et suivi émotionnel pour le Ministère des Solidarités et de la Santé.

Stack technique

  • Backend : Laravel 11 (PHP 8.2+) — API REST, architecture MVC
  • Frontend : Next.js 14 (React + TypeScript + Tailwind CSS) — App Router, src/ dir
  • BDD : PostgreSQL 16 (via Docker)
  • Auth : JWT (tymon/jwt-auth)
  • Dépendances frontend : axios, zustand, @tanstack/react-query, recharts, next-themes, lucide-react, react-hot-toast

Charte graphique

  • Couleur principale : #fce117 (Candlelight / jaune) — Tailwind: candlelight-*
  • Couleur secondaire : #06c656 (Malachite / vert) — Tailwind: malachite-*
  • Couleur tertiaire : #000000 (noir)
  • Polices : Inter (body, font-sans), Poppins (titres, font-display)
  • Dark mode supporté (next-themes, class strategy)
  • Mobile-first, RGAA accessible

Modules implémentés

  1. Comptes utilisateurs (obligatoire) — inscription, profil, admin CRUD, reset password
  2. Informations (obligatoire) — pages de contenu CMS, CRUD admin
  3. Tracker d'émotions (au choix) — journal émotionnel, saisies, rapports graphiques

État d'avancement

FAIT (backend)

  • Projet Laravel initialisé avec JWT configuré
  • Config auth.php : guard api avec driver jwt, provider utilisateurs (modèle Utilisateur)
  • Config cors.php : frontend localhost:3000 autorisé
  • 10 migrations créées (roles, utilisateurs, emotions, trackers, saisie_trackers, feeds, contacts_urgence, audits, cache, sessions)
  • 8 modèles Eloquent (Role, Utilisateur avec JWTSubject, Emotion, Tracker, SaisieTracker, Feed, ContactUrgence, Audit)
  • 5 seeders (RoleSeeder, AdminSeeder admin@cesizen.fr/Admin123!, EmotionSeeder 7 émotions + sous-émotions, FeedSeeder 4 articles)
  • 3 middleware (JwtMiddleware, RoleMiddleware, ForceJsonResponse)
  • 5 Form Requests (RegisterRequest, LoginRequest, UpdateProfilRequest, StoreSaisieRequest, StoreFeedRequest)
  • 8 controllers (AuthController, ProfilController, FeedController, EmotionController, SaisieTrackerController, + 3 Admin)
  • RapportService (stats émotions par période week/month/quarter/year)
  • Routes API v1 complètes dans routes/api.php
  • bootstrap/app.php configuré avec middleware alias et routing API

FAIT (frontend)

  • Projet Next.js 14 initialisé avec Tailwind, TypeScript, App Router
  • tailwind.config.ts avec couleurs candlelight/malachite + polices Inter/Poppins
  • globals.css avec import Google Fonts + variables CSS dark/light
  • layout.tsx avec providers (ThemeProvider, QueryClientProvider, Toaster)
  • Providers.tsx (composant client wrapper)
  • .env.local avec NEXT_PUBLIC_API_URL
  • src/lib/api.ts (client Axios avec intercepteurs JWT)
  • src/lib/auth-store.ts (store Zustand avec persist)
  • src/types/index.ts (interfaces TypeScript complètes)
  • 5 hooks (useAuth, useFeeds, useTracker, useRapport, useEmotions)
  • 7 composants UI (Button, Input, Card, Modal, Badge, Slider, Skeleton, ThemeToggle)
  • 3 composants layout (Header, Footer, Sidebar)
  • Page d'accueil (landing page avec hero, features, CTA)
  • Page /connexion (formulaire login)
  • Page /inscription (formulaire register avec consentement RGPD)

À FAIRE (prioritaire)

  • Lancer Docker PostgreSQL (docker compose up -d) — Docker n'était pas démarré
  • Migrer la BDD (cd backend && php artisan migrate --seed)
  • Tester l'API (php artisan serve puis tester login/register)
  • Pages frontend manquantes :
    • (public)/informations/page.tsx — liste des articles
    • (public)/informations/[slug]/page.tsx — détail article
    • (protected)/dashboard/page.tsx — tableau de bord utilisateur
    • (protected)/profil/page.tsx — page profil
    • (protected)/journal/page.tsx — journal d'émotions (timeline)
    • (protected)/journal/nouvelle-saisie/page.tsx — formulaire saisie multi-étapes
    • (protected)/journal/rapports/page.tsx — graphiques recharts
    • (admin)/admin/dashboard/page.tsx — dashboard admin
    • (admin)/admin/utilisateurs/page.tsx — gestion utilisateurs
    • (admin)/admin/contenus/page.tsx — gestion contenus
    • (admin)/admin/emotions/page.tsx — gestion émotions
  • Layout protégé avec sidebar pour les pages (protected) et (admin)
  • Middleware Next.js pour protéger les routes auth
  • Composants features (EmotionPicker, EmotionChart, TrackerTimeline)

À FAIRE (bonus)

  • EncryptionService AES-256 pour chiffrer les notes en BDD
  • AuditMiddleware pour logger les actions admin
  • Page mot de passe oublié (forgot/reset password)
  • Export données utilisateur (RGPD droit d'accès)
  • Tests PHPUnit backend
  • Responsive fine-tuning mobile

Structure du projet

Cesizen/
├── backend/                # Laravel 11 API
│   ├── app/Models/         # Eloquent : Utilisateur, Role, Tracker, SaisieTracker, Emotion, Feed, Audit, ContactUrgence
│   ├── app/Http/Controllers/
│   │   ├── AuthController.php
│   │   ├── ProfilController.php
│   │   ├── FeedController.php
│   │   ├── EmotionController.php
│   │   ├── SaisieTrackerController.php
│   │   └── Admin/          # AdminUtilisateurController, AdminFeedController, AdminEmotionController
│   ├── app/Services/       # RapportService (stats émotions)
│   ├── app/Http/Middleware/ # JwtMiddleware, RoleMiddleware, ForceJsonResponse
│   ├── app/Http/Requests/  # RegisterRequest, LoginRequest, StoreSaisieRequest, StoreFeedRequest, UpdateProfilRequest
│   ├── database/migrations/ # 10 fichiers migration
│   ├── database/seeders/   # RoleSeeder, AdminSeeder, EmotionSeeder, FeedSeeder
│   ├── bootstrap/app.php   # Configuré avec middleware alias jwt.auth + role
│   ├── config/auth.php     # Guard api/jwt, provider utilisateurs
│   ├── config/cors.php     # CORS frontend localhost:3000
│   └── routes/api.php      # Toutes les routes API v1
├── frontend/               # Next.js 14
│   ├── src/app/
│   │   ├── layout.tsx      # Layout racine avec Providers
│   │   ├── page.tsx        # Landing page (FAIT)
│   │   ├── (auth)/connexion/page.tsx    # FAIT
│   │   ├── (auth)/inscription/page.tsx  # FAIT
│   │   ├── (public)/informations/       # À FAIRE
│   │   ├── (protected)/dashboard/       # À FAIRE
│   │   ├── (protected)/profil/          # À FAIRE
│   │   ├── (protected)/journal/         # À FAIRE
│   │   └── (admin)/admin/               # À FAIRE
│   ├── src/components/
│   │   ├── Providers.tsx   # Client providers wrapper (FAIT)
│   │   ├── ui/             # Button, Input, Card, Modal, Badge, Slider, Skeleton, ThemeToggle (FAIT)
│   │   ├── layout/         # Header, Footer, Sidebar (FAIT)
│   │   └── features/       # À CRÉER (EmotionPicker, EmotionChart, TrackerTimeline)
│   ├── src/lib/
│   │   ├── api.ts          # Client Axios (FAIT)
│   │   └── auth-store.ts   # Store Zustand (FAIT)
│   ├── src/hooks/          # useAuth, useFeeds, useTracker, useRapport, useEmotions (FAIT)
│   └── src/types/index.ts  # Interfaces TypeScript (FAIT)
├── docker-compose.yml      # PostgreSQL 16
└── .gitignore

API Endpoints (préfixe /api/v1)

Auth (public)

  • POST /auth/register — Inscription
  • POST /auth/login — Connexion (retourne JWT) — rate limited 5/min
  • POST /auth/logout — Déconnexion (auth)
  • GET /auth/me — Profil courant (auth)
  • POST /auth/refresh — Rafraîchir token (auth)

Profil (auth membre)

  • GET /profil / PUT /profil — Lire/modifier profil
  • PUT /profil/password — Changer mot de passe
  • DELETE /profil — Supprimer compte (RGPD)

Informations (public)

  • GET /feeds — Liste pages publiées
  • GET /feeds/{slug} — Détail page

Tracker (auth membre)

  • GET /tracker/saisies — Mes saisies (filtres: date_debut, date_fin, emotion_id)
  • POST /tracker/saisies — Nouvelle saisie
  • PUT /tracker/saisies/{id} — Modifier saisie
  • DELETE /tracker/saisies/{id} — Supprimer saisie
  • GET /tracker/rapports?period=week|month|quarter|year — Rapport statistique

Émotions (auth membre)

  • GET /emotions — Liste arborescente (niveau 1 + sous-émotions niveau 2)

Admin (auth admin)

  • GET/POST/PUT/DELETE /admin/utilisateurs — CRUD utilisateurs
  • PATCH /admin/utilisateurs/{id}/toggle-active — Activer/désactiver
  • GET/POST/PUT/DELETE /admin/feeds — CRUD contenus
  • GET/POST/PUT/DELETE /admin/emotions — CRUD émotions

Base de données (tables)

  1. roles — id, nom (visiteur/membre/administrateur), description
  2. utilisateurs — id, nom, prenom, email, password (bcrypt), role_id, est_actif, consentement_rgpd, soft delete
  3. emotions — id, nom, couleur, icone, niveau (1 ou 2), parent_id (auto-ref), est_actif
  4. trackers — id, utilisateur_id, nom
  5. saisie_trackers — id, tracker_id, emotion_id, intensite (1-10), note, date_saisie
  6. feeds — id, titre, slug, contenu (HTML), image_url, est_publie, auteur_id, ordre
  7. contacts_urgence — id, utilisateur_id, nom, telephone, relation
  8. audits — id, utilisateur_id, action, table_cible, anciennes_valeurs, nouvelles_valeurs, ip_address

Comptes de test

Commandes utiles

# BDD
docker compose up -d                    # Démarrer PostgreSQL

# Backend
cd backend
php artisan migrate --seed              # Créer les tables et données de test
php artisan serve                        # API sur localhost:8000

# Frontend
cd frontend
npm run dev                              # App sur localhost:3000

Conventions

  • Parler toujours en français dans les commits et commentaires
  • API versionnée /api/v1/
  • Nommage des tables/colonnes en snake_case français
  • Composants React en PascalCase
  • Routes frontend en français (connexion, inscription, journal, etc.)
  • Icônes : lucide-react
  • Notifications : react-hot-toast
  • State management : zustand (auth), @tanstack/react-query (data fetching)