Modèle d'ADR
Les vraies ADR seront migrées depuis docs/decisions.md en phase 6.
Backend séparé + frontend React
Choix d'un backend séparé avec frontend React, sans réécriture de templates.
Réorganisation monorepo frontend/ + backend/
Restructuration initiale du dépôt en deux dossiers frontend/ et backend/ via git mv.
.gitignore couvrant Node + Python
Un seul .gitignore racine couvrant les deux stacks initiales (Node et Python).
Conventional Commits + référence issue obligatoire
Adoption de Conventional Commits avec référence à une issue #N obligatoire dans chaque commit.
Slash commands créés à la demande
Pas de pré-création de slash commands ; ils sont créés au cas par cas selon les besoins.
Pages frontend structurées par domaine
Organisation des pages frontend selon une arborescence pages/{domain}/.
Stack backend NestJS 11 + Prisma
Révision du choix backend en faveur de NestJS 11 + Prisma, annulant Django DRF.
Monorepo npm workspaces
Adoption d'un monorepo npm workspaces avec apps/frontend, apps/api, packages/contracts.
Contrats API partagés via Zod
Source unique de vérité pour les contrats API via des schémas Zod dans packages/contracts.
Bascule monorepo exécutée
Migration effective vers apps/frontend, packages/contracts (squelette), suppression de backend/.
Back-office admin via AdminJS
Choix d'AdminJS pour le back-office sprint 1, évaluation React-Admin reportée.
Documentation projet regroupée dans docs/
Centralisation de la documentation projet en 7 fichiers thématiques dans docs/.
Infrastructure dev mutualisée Postgres + Redis
Convention d'un Postgres 16 + Redis 7 partagés via un docker-compose externe au repo.
Postgres bump 15 → 16
Bascule vers Postgres 16 pour l'ensemble de la stack (dev + prod).
Backend phase B — Prisma + User + health
Initialisation Prisma 5.22, schéma User, PrismaModule/Service et endpoint health pinguant la DB.
Backend phase C — config + validation Zod
Validation Zod de process.env au bootstrap via @nestjs/config.
Backend phase D.1 — auth register/login + JWT
Auth basique register/login + JWT + Passport + argon2id, premier usage de @app/contracts.
Backend phases D.3 + D.4 — RBAC + /auth/me
JwtStrategy, guards JwtAuth + Roles, décorateurs @Roles et @CurrentUser, endpoints /auth/me et /auth/admin-ping.
Backend phase D.2 — refresh tokens opaques
Refresh tokens opaques (SHA-256 en DB, rotation), endpoints /auth/refresh et /auth/logout.
AdminJS mis en pause (incompatibilité ESM)
Phase E AdminJS mise en pause à cause de l'ESM-only ; trois options possibles, décision reportée.
Route / — redirection prod-only vers /landing
En build prod, / redirige vers /landing ; en dev, DesignPreviewPage reste rendue.
Route publique /live-classes
Création de la page LiveClassesPage pour résoudre un CTA mort de la landing.
Logos MomBiz cliquables vers /landing
Wrap des logos MomBiz dans <Link to='/landing'> à 5 emplacements.
Lien "Voir tout" des catégories dynamique
Destination du lien LandingCategories selon l'état learner connecté ou non.
Quick Login démo dev-only
Bloc démo de LoginPage wrappé dans import.meta.env.DEV et tree-shaké au build prod.
Pages légales /legal/terms et /legal/privacy
Placeholder accessible publiquement avec sommaire et sections vides ; contenu juridique à rédiger.
Flow "Mot de passe oublié"
Route /forgot-password (guestOnly) avec confirmation générique ; backend reset à implémenter.
Footer destinations câblées
Wiring des liens du footer ; certains liens restent désactivés en attendant définition.
Client API mock centralisé + Sonner
services/apiClient.ts simule les appels backend ; toaster sonner monté dans App.tsx.
TeacherProfilePage restauré
Avatar upload + 3 champs password contrôlés + apiClient.saveTeacherProfile.
ModuleEditor save + preview
Enregistrement, prévisualisation modale et badge isDirty pour ModuleEditor.
Route /teacher/modules/:moduleId/chapters/:chapterId
Page ChapterEditorPage avec architecture outer/inner pour respecter les rules of hooks.
Sidebar teacher épurée
Suppression des NavItem doublons 'Analytiques' et 'Revenus' qui pointaient vers /teacher.
Issue
Bugs padding ciblés dans ModuleEditorPage n'existent plus dans le code actuel.
ModuleEditor upload de fichiers
Zone d'upload avec validation client (PDF/DOCX/PPTX, ≤ 50 Mo), liste dynamique et toasts.
TeacherCoursesPage actions
Actions Voir / Publier / Archiver câblées avec modale confirmation stylée.
TeacherDashboardPage actions
Export CSV (BOM UTF-8), navigation depuis lignes cours et étudiantes, dropdown actions.
TeacherLearnersPage messagerie + détail
Modale messagerie inline + drawer latéral profil apprenante, sans nouvelle route.
Sidebar admin harmonisée
SidebarRole étendu à admin + suppression de ~60 lignes de sidebar inline dupliquées.
Routes admin DEAD corrigées
Correction de /admin/statistics → /admin/stats et de /admin/users/new → /admin/users/edit/new.
AdminModulesPage actions réelles
Mutations useState, edit / toggle statut / delete avec correction du bug critique de modale.
CTA "Ajouter un cours" admin retiré
Seules les formatrices créent des modules ; l'admin garde un rôle de modération.
AdminUserEditPage persistance
alert() remplacé par apiClient.saveTeacherProfile + état isSubmitting.
Vague A du sprint learner (L2 + L7 + L8)
Trois corrections learner — navigation EmptyState, redirection module, sidebar épurée.
Catalog CTA + Certificats fonctionnels
Inscriptions catalogue, certificats téléchargeables (mock), partage natif avec fallback clipboard.
LearnerProfilePage upload avatar
Upload avatar côté learner avec preview base64 (≤ 2 Mo, type image).
Dashboard learner filtres + TopBar
Pills de filtre fonctionnels, recherche contrôlée et ViewStateToggle dev-only.
Player vidéo — contrôles + next lesson
Timeline accessible, popover vitesses, fullscreen, calcul de la prochaine leçon.
Flow Quiz
Page QuizPage à /learner/course/:courseId/quiz avec 5 QCM mockées et seuil 70 %.
Ressources du cours — ouverture et téléchargement
Onglet Ressources : ligne cliquable, bouton download <a download>, fallback toast.
Cadrage MVP validé — docs/scope.md
Périmètre MVP, rôle teacher actif, publication versionnée par teacher, paiement stub.
Hiérarchie contenu révisée — 4 niveaux MVP
Course → Module → Chapter → Section + ContentBlock ; quiz rattaché au Chapter.
Sprint backend planifié — Domaine métier MVP
Milestone #6 — 7 sous-issues couvrant schéma, catalogue, CRUD, enrollment, progression, admin, audit.
Frontends séparés par rôle, origine unique
Découpe la SPA unique en 4 apps (public/learner/teacher/admin) + package UI partagé, servies sous une origine unique via reverse-proxy.
Stack de dev reproductible + seeds modulaires
Versionne le provisionnement DB (devstack/init), un setup une-commande et des seeds modulaires, sur le modèle du projet sukulizi.