- Sidebar: lucide-react icons, lock on gated items, upgrade badge on "Mon plan", user footer with avatar initials + plan label, "EX|PRIA" logo header
- Topbar: sticky with backdrop-blur, breadcrumb via centralized route-titles.ts, search placeholder, keyboard shortcuts + notifications icons
- Dashboard: split into Free/Standard/Premium views (ARCHITECTURE.md §3 aligned)
- NclcHero: NCLC display + gauge 5→10 + SVG score ring
- StatCards: simulations remaining + NCLC estimé + dernier score with delta
- RecentSimulations: 3 latest with NCLC badge + chevron nav
- NextStepCard: static recommendation per plan
- PaywallBanner: full-width redesign + fixed dead Boréal tokens
- Removed orphan MobileHeader.tsx (0 consumers)
Typecheck: OK · Tests: 122/122 ✅
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
150 lines
6.8 KiB
Markdown
150 lines
6.8 KiB
Markdown
# ROADMAP.md — Expria Frontend
|
|
|
|
> Source de vérité de l'ordre d'implémentation des sprints.
|
|
> Ne pas modifier sans validation de Hermann.
|
|
|
|
---
|
|
|
|
## Sprint 0 — Fondations ✅
|
|
|
|
1. Scaffold Vite + TypeScript + Tailwind + shadcn/ui
|
|
2. Structure de dossiers complète
|
|
3. docs/ copiés depuis backend + adaptations
|
|
4. ONBOARDING.md rédigé
|
|
|
|
## Sprint 0.5 — Design System ✅
|
|
|
|
- Direction artistique Boréal validée
|
|
- Tokens CSS dans index.css
|
|
- DESIGN_SYSTEM.md rédigé
|
|
|
|
## Sprint 1 — Auth + API layer ✅
|
|
|
|
5. auth-client.ts
|
|
6. api-client.ts
|
|
7. query-client.ts
|
|
8. entities/user/\*
|
|
9. features/auth (Login, Register, ProtectedRoute)
|
|
|
|
## Sprint 2 — Dashboard conditionnel ✅
|
|
|
|
10. usePlan hook
|
|
11. shared/components/PaywallModal
|
|
12. features/dashboard (Free / Standard / Premium)
|
|
|
|
## Sprint 3 — Simulations EE ✅
|
|
|
|
13. entities/production/_ + entities/report/_
|
|
14. features/simulations (EE T1/T2/T3)
|
|
15. Affichage rapport avec floutage conditionnel
|
|
|
|
## Sprint 3.5 — Clean
|
|
|
|
- Factorisation des fichiers modifiés Sprint 3
|
|
- Tests manuels Groupe B + C rejoués
|
|
- Commit refactor(simulation-ee)
|
|
|
|
## Sprint 3.6a — Qualité correction — Backend ✅
|
|
|
|
- Remplacement prompt maître (docs/Prompt_maître.md) + intégration taxonomie erreurs (docs/TAXONOMIE_ERREURS.md)
|
|
- Remplacement prompt production modèle (docs/Prompt_production_modèle.md) — cible fixe NCLC 9
|
|
- Génération parallèle correction + exercices + modèle (await correction, fire-and-forget sur les deux autres)
|
|
- Nouveaux champs DB : revelation, diagnostic, conseil_nclc, erreurs_codes, exercices_status, modele_status, nclc_cible
|
|
- Mise à jour GET /simulations/:id
|
|
- Migration SQL : `supabase/migrations/004_sprint_3_6a_qualite_correction.sql` (à exécuter manuellement)
|
|
- Tests : 173 tests verts (+18 vs baseline)
|
|
|
|
## Sprint 3.6b — Qualité correction — Frontend ✅
|
|
|
|
- Sélecteur NCLC cible dans SimulationForm (9 ou 10, défaut 9) — NclcCibleSelector
|
|
- RapportPage réécrite : ScoreHero (jauge + seuil NCLC cible + écart), RevelationCards, DiagnosticCallout, CritereCard enrichie (exemple/suggestion/astuce + codes taxonomie), ConseilNclcCallout
|
|
- ExerciceInteractive : badge difficulté, zone texte, bouton Indice (une fois), bouton Voir la correction (activé après saisie), explication
|
|
- ProductionModeleSection : texte final + notes pédagogiques + transformations original/amélioré + message
|
|
- JobStatusFallback : gère exercices_status / modele_status (pending / error) — refresh manuel, polling tracé en FTD-24
|
|
- Gating plan conforme PLANS_TARIFAIRES.md : revelation/diagnostic/conseil_nclc tous plans ; criteres/exercices/modele Standard+
|
|
- Tests : 84 verts (+8 vs baseline — floutage + helpers lib + ExerciceInteractive)
|
|
|
|
## Sprint 3.7 — Historique ✅
|
|
|
|
- Backend : `GET /simulations` — liste paginée des productions de l'utilisateur connecté (page/limit, tri `created_at DESC`, projection légère). 186 tests backend verts.
|
|
- Frontend : page `/historique` (route sous AppLayout), liste d'items (date relative, tâche, score /20, NCLC, badge Examen / En cours), pagination Précédent/Suivant, clic → `/rapport/:id`.
|
|
- Gating plan : Free → aperçu flouté + CTA « Passer en Standard » (`hasAccess(plan, 'dashboard')`) ; Standard + Premium → liste complète.
|
|
- État vide : CTA « Démarrer une simulation ».
|
|
- Hook `useSimulationsList(page, limit)` — TanStack Query, `staleTime: 30s`, `keepPreviousData` pour transitions fluides.
|
|
- Helper `formatRelativeDate` (Intl.RelativeTimeFormat, zéro dépendance).
|
|
- 102 tests frontend verts (+18 vs baseline 84).
|
|
|
|
## Sprint 3.6c — Analyse patterns (Premium) ✅
|
|
|
|
- Backend : `GET /users/patterns` — agrégation des `erreurs_codes` sur les 5 dernières productions corrigées, seuil 3/5, tri DESC, cache `pattern_analyses` avec invalidation si nouvelle production plus récente que la dernière analyse.
|
|
- Backend : exercices long terme générés par DeepSeek sur patterns confirmés — format `{ consigne, exemple, correction, astuce }` avec prompt dédié (température 0.4, timeout 20 s). Dégradation gracieuse si DeepSeek échoue.
|
|
- Backend : indice de préparation 0→100 — formule 60 % score moyen + 20 % régularité + 20 % tendance, messages figés (`<40`, `40-70`, `>70`).
|
|
- Backend : migration SQL `005_sprint_3_6c_pattern_analyses.sql` (RLS SELECT par user_id, index composite, CHECK constraints).
|
|
- Backend : 205 tests verts (+19 vs baseline 186).
|
|
- Frontend : page `/progression` — orchestration hero (indice + jauge), liste patterns, cartes exercices long terme, footer « il y a X » ; gate plan via `hasAccess('pattern_analysis')` (Free/Standard → aperçu flouté + upgrade).
|
|
- Frontend : `PatternExerciceCard` — composant lesson-style dédié (non interactif, UX distincte de `ExerciceInteractive`) avec encart astuce proéminent.
|
|
- Frontend : Dashboard Premium — section compacte `MonProfilPreparation` (MetricCard indice + nb patterns + CTA vers `/progression`). Absente pour Free/Standard.
|
|
- Frontend : hook `usePatterns` (staleTime 60 s, cache partagé entre page et dashboard, `enabled` conditionné par feature).
|
|
- Frontend : 115 tests verts (+13 vs baseline 102).
|
|
|
|
## Sprint DA Charcoal — Reskin ✅
|
|
|
|
- Remplacement palette Boréal par Charcoal (dark default, light override)
|
|
- Sidebar navy permanent, layout radial-gradient, anti-FOUC
|
|
- Renommage tokens sur ~45 composants + inversion dark:/light: shadcn
|
|
- ADR 006 mis à jour
|
|
|
|
## Sprint UI Polish — Sidebar + Topbar + Dashboard ✅
|
|
|
|
- Sidebar : icônes lucide, cadenas gating, badge upgrade, user footer, logo "EX|PRIA"
|
|
- Topbar : sticky backdrop-blur, breadcrumb centralisé, recherche placeholder
|
|
- Dashboard : split Free/Standard/Premium, NclcHero + StatCards + RecentSimulations + NextStepCard + PaywallBanner refonte
|
|
- MobileHeader supprimé (remplacé par Topbar)
|
|
|
|
## Sprint 4 — Simulations EO (audio)
|
|
|
|
16. MediaRecorder + upload audio EO T1/T3
|
|
|
|
## Sprint 4.5 — Clean
|
|
|
|
- Factorisation des fichiers modifiés Sprint 4
|
|
- Tests manuels Groupe B + D rejoués
|
|
- Commit refactor(simulation-eo)
|
|
|
|
## Sprint 5 — Billing
|
|
|
|
17. features/billing (Stripe Checkout + prorata)
|
|
|
|
## Sprint 5.5 — Clean
|
|
|
|
- Factorisation des fichiers modifiés Sprint 5
|
|
- Tests manuels Groupe E rejoués
|
|
- Commit refactor(billing)
|
|
|
|
## Sprint 6 — T2 Live
|
|
|
|
18. features/t2-live (ws-client + audio worklet + state machine)
|
|
|
|
## Sprint 6.5 — Clean
|
|
|
|
- Factorisation des fichiers modifiés Sprint 6
|
|
- Tests manuels Groupe D rejoués
|
|
- Commit refactor(t2-live)
|
|
|
|
## Sprint 7 — Mode Examen
|
|
|
|
19. Timer inarrêtable + readOnly à T=0
|
|
|
|
## Sprint 7.5 — Clean
|
|
|
|
- Factorisation des fichiers modifiés Sprint 7
|
|
- Tests manuels Groupe D rejoués
|
|
- Commit refactor(exam-mode)
|
|
|
|
## Sprint 8 — Pré-lancement
|
|
|
|
20. MAINTENANCE_MODE implémenté ✅ (2026-04-19)
|
|
21. Sentry configuré
|
|
22. /ultrareview avant bascule
|
|
23. Smoke test Groupe Z complet
|
|
24. Procédure DEPLOYMENT.md exécutée
|