# Projet Open edX — Cahier des charges Sprint 1
## Assigné à : Khouloud Achour | 8 jours (15→25 avril 2026)

---

## 1. Contexte & Objectif

### Situation actuelle
- 2 plateformes LMS hébergées par **moocit** : `forma.digimoov.fr` (37 cours) et `forma.mcm-academy.fr` (19 cours)
- Version **Open edX Lilac (2021)** — obsolète (5 ans de retard)
- Pas d'accès au code source, développements chers et lents
- Contenu principal : **53 packages SCORM** + **479 quiz** + **4 vidéos**
- Plugin custom **Timespent V2** (tracking temps apprenant) — payé et fonctionnel, à reproduire

### Objectif Sprint 1
Poser les **fondations techniques** de la nouvelle plateforme Open edX autonome, multi-tenant (Digimoov + MCM Academy), avec les cours migrés et fonctionnels.

### Ce qui est hors scope Sprint 1
- Coach IA WhatsApp
- Validation documents IA (CNI, CERFA...)
- Intégration Evalbox / examens
- Génération auto documents admin
- Reproduction Timespent V2
- Live Sessions Google Meet + émargement

---

## 2. Audit plateforme actuelle (déjà réalisé)

> **Cet audit a été fait par Nasser + Claude Code. Khouloud n'a pas besoin de le refaire.**
> **Elle gagne 1 jour et attaque directement l'installation.**

### Plateforme actuelle — forma.digimoov.fr + forma.mcm-academy.fr

| Élément | Détail |
|---|---|
| **Version** | Open edX **Lilac (2021)** — obsolète (5 ans de retard) |
| **Hébergeur** | moocit (moocit.fr) — thème custom `moocit-l-theme` |
| **CDN** | AWS S3 (eu-west-3 Paris) + CloudFront |
| **Admin** | Panel custom "MOOCit Timespent V2" |

### Inventaire des cours

| Organisation | Nombre de cours | Inscription |
|---|---|---|
| **Digimoov** | 37 cours | 36 sur invitation, 1 public |
| **MCM Academy** | 19 cours | Tous sur invitation |
| **Total** | **56 cours à migrer** | |

### Catalogue Digimoov (37 cours)
- **6 cours principaux** Transport Léger (cursus cœur) : L'entreprise et l'activité de transport, Le droit civil et commercial, L'activité financière, La sécurité, Les salariés, L'activité commerciale
- **11 cours** Transport Lourd (guide, 8 modules, études de cas, examens blancs)
- **5 cours** Corrections/Réponses (révélation des réponses par module)
- **5 cours** Fiches de résumé (par module)
- **Examens blancs** Transport Léger + Transport Lourd
- **Ressources complémentaires** : exercices, e-book, sessions de révision, ateliers pratiques
- **Formation des surveillants**
- **Parcours d'essai** (seul cours ouvert)

### Contenu analysé (780 blocs sur 6 cours principaux)

| Type de contenu | Nombre | Importance |
|---|---|---|
| **Problems (quiz)** | 479 | **Critique** — évaluation principale |
| **SCORM** | 53 | **Critique** — contenu pédagogique principal |
| **Verticals (unités)** | 109 | Structure |
| **Sequentials (modules)** | 104 | Structure |
| **Chapters (sections)** | 12 | Structure |
| **HTML** | 11 | Marginal |
| **Vidéos** | 4 | Marginal |
| **Free text response** | 2 | XBlock custom |

### Structure type d'un cours (ex: Cours 1 — L'activité de transport)
- Chapitre principal avec 9 modules
- Chaque module : contenu SCORM + quiz d'entraînement noté
- Quiz avec points variables (2 à 25 pts selon le module)
- Chapitre final : lien vers la matière suivante

### Notation
- Type unique : **"Evaluation"** (poids 100%)
- Note de passage : **50%**
- Note minimum crédit : **80%**
- Certificats : **pas configurés** actuellement

### Fonctionnalités à conserver

| Fonctionnalité | État actuel | Action migration |
|---|---|---|
| Dashboard apprenant (cards/list) | Custom moocit | Refaire avec tutor-indigo |
| Mes cours | Fonctionnel | Natif Open edX |
| **Live Sessions** | Menu custom moocit | À recréer (Sprint 2) |
| Favoris/Bookmarks | Natif | Natif |
| **SCORM** (53 packages) | XBlock | **Critique** — installer openedx-scorm-xblock |
| **Free text response** | XBlock custom | Installer le XBlock |
| Quiz/évaluations (479) | Natif | Natif |
| **Timespent V2** | Plugin MFE React custom moocit | **Sprint 2** — à reproduire |
| Inscription sur invitation | Config | Natif |
| Tableau instructeur | Natif | Natif |
| Envoi email aux apprenants | Natif | Natif |
| Examens spéciaux/proctored | Natif | Natif |
| Gestion cohortes | Natif | Natif |
| Analytics instructeur | Natif | + tutor-contrib-aspects |

### Timespent V2 — Architecture (pour reproduction Sprint 2)
- **Frontend** : MFE React + Material UI + TailwindCSS (bundle 498KB)
- **Backend** : API REST `/moocit_admin_panel/api/timespent_v2/`
- **Heartbeat** : toutes les 10 secondes
- **Idle detection** : warning après 20min, déconnexion après 5min countdown
- **Session max** : 4h puis relance auto
- **Widget compact** : timer dans le header du cours (Session MM:SS + Total HH:MM:SS)
- **Modal analytics** : 4 onglets (overview, timeline, sessions, analytics admin)
- **Comparison widget** : temps passé vs temps estimé du cours

### Équipe actuelle sur la plateforme
| Username | Email | Rôle |
|---|---|---|
| SK | skouni@digimoov.fr | Staff + Instructor |
| Fatima | fdrissi@digimoov.fr | Instructor |
| Youssef | yfarkli@digimoov.fr | Instructor |

### Intégrations externes actuelles
| Service | Usage |
|---|---|
| Google Tag Manager (GTM-PXNX3TPW) | Tracking |
| Google Analytics | Analytics |
| Crisp Chat | Support (Studio) |
| AWS S3 + CloudFront | CDN assets/images |
| SMTP (Brevo) | Emails |

### Branding actuel
- **Digimoov** : violet (#381D81), boutons arrondis, fond blanc
- **MCM Academy** : jaune (#ffc107), fond neutre (#f5f5f4)
- Registration cachée (CSS `display:none`), nav buttons cachés, coach bubble custom

### Points d'attention migration
1. **53 SCORM packages** — contenu principal, tester la compatibilité en priorité
2. **Timespent V2** — custom moocit, pas dispo open source, à reproduire Sprint 2
3. **Live Sessions** — feature custom moocit, à recréer Sprint 2
4. **CSS très customisé** — inscription cachée, nav cachée, à refaire dans le nouveau thème
5. **Images/assets sur S3 moocit** — à migrer vers notre propre stockage
6. **Pas de MFE** actuellement — Lilac est pré-MFE, la nouvelle version utilise React MFE

### Accès plateforme actuelle
- **LMS** : https://forma.digimoov.fr/ (credentials dans Infisical)
- **Studio** : https://studio.forma.digimoov.fr/
- **MCM Academy** : https://forma.mcm-academy.fr/
- **Secrets** : https://secrets.formalab.tech

---

## 3. Sprint Plan — 8 jours (1 jour gagné grâce à l'audit pré-fait)

### Phase 1 : Export des cours + Infrastructure (Jour 1-2 — mardi 15, mercredi 16)

| # | Tâche | Diff. | Temps | Outil |
|---|---|---|---|---|
| 1.1 | Exporter TOUS les cours depuis Studio (.tar.gz) — 37 Digimoov + 19 MCM | ⭐ | 3h | Studio Export |
| 1.2 | Commander le VPS OVH B2-30 (8 vCPU, 30GB RAM, 200GB NVMe, ~22€/mois) | ⭐ | 1h | Console OVH — demander validation Nasser avant commande |
| 1.3 | Configurer le serveur : Ubuntu 24.04, Docker, sécurité de base, Tailscale | ⭐⭐ | 2h | Claude Code sur le nouveau serveur |
| 1.4 | Installer Tutor (dernière version stable) | ⭐⭐ | 1h | `pip install "tutor[full]"` + `tutor local launch` |
| 1.5 | Configurer DNS sous-domaines de test (ex: `new-forma.digimoov.fr`) | ⭐⭐ | 2h | Gestionnaire DNS + Tutor config |
| 1.6 | Configurer HTTPS (Caddy auto via Tutor) | ⭐ | 1h | Tutor config |
| 1.7 | Installer les plugins essentiels | ⭐⭐ | 2h | Claude Code |
| 1.8 | Vérifier que la plateforme est accessible et fonctionnelle | ⭐ | 1h | Navigateur + `curl` tests |

| # | Tâche | Diff. | Temps | Outil |
|---|---|---|---|---|
| 2.1 | Commander le VPS OVH B2-30 (8 vCPU, 30GB RAM, 200GB NVMe, ~22€/mois) | ⭐ | 1h | Console OVH — demander validation Nasser avant commande |
| 2.2 | Configurer le serveur : Ubuntu 24.04, Docker, sécurité de base, Tailscale | ⭐⭐ | 2h | Claude Code sur le nouveau serveur |
| 2.3 | Installer Tutor (dernière version stable) | ⭐⭐ | 1h | `pip install "tutor[full]"` + `tutor local launch` |
| 2.4 | Configurer DNS : `forma.digimoov.fr` et `forma.mcm-academy.fr` en sous-domaines de test (ex: `new-forma.digimoov.fr`) | ⭐⭐ | 2h | Gestionnaire DNS + Tutor config |
| 2.5 | Configurer HTTPS (Caddy auto via Tutor) | ⭐ | 1h | Tutor config |
| 2.6 | Installer les plugins essentiels | ⭐⭐ | 2h | Claude Code |
| 2.7 | Vérifier que la plateforme est accessible et fonctionnelle | ⭐ | 1h | Navigateur + `curl` tests |

**Livrable J1-2** : Cours exportés + Plateforme Open edX opérationnelle sur VPS avec HTTPS

**Plugins à installer :**
```bash
pip install tutor-indigo          # Thème customisable
pip install tutor-mfe             # Micro Frontends (React)
pip install tutor-discovery       # Catalogue de cours
pip install tutor-contrib-aspects # Analytics (ClickHouse + Superset)

# XBlocks critiques (dans tutor config)
tutor config save --set 'OPENEDX_EXTRA_PIP_REQUIREMENTS=["openedx-scorm-xblock","xblock-free-text-response"]'
tutor images build openedx
tutor local launch
```

---

### Phase 2 : Multi-tenant & Branding (Jour 3 — jeudi 17)

| # | Tâche | Diff. | Temps | Outil |
|---|---|---|---|---|
| 3.1 | Configurer le multi-tenant via Django Sites (2 sites : Digimoov + MCM Academy) | ⭐⭐⭐ | 3h | Django Admin (`/admin/sites/site/`) + Claude Code |
| 3.2 | Créer les 2 organisations (Digimoov + MCM_Academy) | ⭐ | 1h | Django Admin (`/admin/organizations/organization/`) |
| 3.3 | Configurer le branding par marque (logos, couleurs, noms) | ⭐⭐ | 2h | Tutor Indigo config + CSS custom |
| 3.4 | Tester : 2 URLs distinctes, 2 brandings, catalogue séparé | ⭐ | 1h | Navigateur |

**Config multi-tenant :**
```
Site 1 : new-forma.digimoov.fr → org Digimoov → thème violet (#381D81)
Site 2 : new-forma.mcm-academy.fr → org MCM_Academy → thème jaune (#ffc107)
course_org_filter par site pour séparer les catalogues
```

**Livrable J3** : 2 URLs fonctionnelles avec branding distinct

---

### Phase 3 : Migration & Import des cours (Jour 4-5 — vendredi 18, lundi 21)

| # | Tâche | Diff. | Temps | Outil |
|---|---|---|---|---|
| 4.1 | Importer les 37 cours Digimoov dans Studio (upload .tar.gz) | ⭐⭐ | 4h | Studio → Import (par batch) + Claude Code pour automatiser via API si possible |
| 4.2 | Importer les 19 cours MCM Academy | ⭐⭐ | 2h | Studio → Import |
| 4.3 | Vérifier les 53 packages SCORM — s'assurer qu'ils se chargent | ⭐⭐⭐ | 3h | Navigateur — tester chaque cours contenant du SCORM |
| 4.4 | Vérifier les quiz (479 problems) — échantillon de 10 cours | ⭐⭐ | 2h | Navigateur — parcours apprenant test |
| 4.5 | Vérifier le XBlock freetextresponse | ⭐ | 1h | Navigateur |
| 4.6 | Corriger les problèmes de migration identifiés | ⭐⭐⭐ | 3h | Claude Code |

**Livrable J4-5** : 56 cours migrés et fonctionnels (SCORM + quiz vérifiés)

---

### Phase 4 : Configuration plateforme (Jour 6 — mardi 22)

| # | Tâche | Diff. | Temps | Outil |
|---|---|---|---|---|
| 5.1 | Configurer les rôles utilisateurs (mapping vers les nouveaux profils) | ⭐⭐ | 2h | Django Admin + Claude Code |
| 5.2 | Configurer l'inscription sur invitation (comme aujourd'hui) | ⭐ | 1h | Studio → Settings par cours |
| 5.3 | Configurer la notation (Evaluation 100%, passage 50%, crédit 80%) | ⭐ | 1h | Studio → Grading settings |
| 5.4 | Configurer SMTP pour les emails (Brevo, déjà dans Infisical) | ⭐⭐ | 1h | Tutor config |
| 5.5 | Tester le parcours complet : inscription → cours → SCORM → quiz → note | ⭐⭐ | 2h | Navigateur (créer un compte test apprenant) |
| 5.6 | Installer et configurer les analytics (Aspects + Superset) | ⭐⭐⭐ | 2h | Tutor + Claude Code |

**Mapping des rôles :**
```
Open edX natif          →  Profil métier
─────────────────────────────────────────
Learner                 →  Apprenant
Course Staff            →  ESM (Education Success Manager)
Course Instructor       →  Formateur
Staff (platform-wide)   →  Admin formation / Concepteur péda
Superuser               →  Admin technique
```

**Livrable J6** : Plateforme configurée, parcours apprenant testé de bout en bout

---

### Phase 5 : Documentation & Démo (Jour 7-8 — mercredi 23, jeudi 24)

| # | Tâche | Diff. | Temps | Outil |
|---|---|---|---|---|
| 6.1 | Rédiger la documentation technique (installation, architecture, procédures) | ⭐⭐ | 3h | Claude Code — générer le doc structuré |
| 6.2 | Rédiger le guide admin (comment ajouter un cours, un user, gérer les rôles) | ⭐ | 2h | Claude Code |
| 6.3 | Préparer la démo (scénarios : apprenant, formateur, ESM, admin) | ⭐ | 1h | Navigateur |
| 6.4 | Démo + présentation à Nasser | ⭐ | 1h | Visio/présentiel |

**Livrable J7-8** : Documentation complète + démo fonctionnelle

**Jour bonus** : Le jour gagné grâce à l'audit pré-fait permet d'absorber les imprévus ou d'avancer sur les optimisations.

---

## 4. Récapitulatif des livrables Sprint 1

| # | Livrable | Date |
|---|---|---|
| L1 | Cours exportés + VPS OVH + Open edX installé HTTPS | 16 avril |
| L2 | Multi-tenant Digimoov + MCM Academy avec branding | 17 avril |
| L3 | 56 cours migrés et vérifiés (SCORM + quiz) | 21 avril |
| L4 | Plateforme configurée (rôles, inscription, notation, emails, analytics) | 22 avril |
| L5 | Documentation technique + guide admin | 24 avril |
| L6 | **Démo finale** | 25 avril (vendredi) |

---

## 5. Outils à disposition

### Claude Code (principal)
- Utilisé tout au long du sprint pour : scripting, debug, documentation, recherche
- Connexion : `tailscale ssh akhouloud@srv1533748` → `tmux attach -t akhouloud-session` → `claude`

### Agents Claude Code recommandés
| Agent | Usage | Quand |
|---|---|---|
| **Agent Explore** | Explorer la doc Tutor, chercher des solutions | Phases 2, 3, 4 |
| **Agent Plan** | Planifier les étapes complexes (migration, multi-tenant) | Phases 3, 4 |
| **Agent général** | Recherche web, debug, automatisation | Tout le sprint |

### Skills utiles
- `/commit` — pour commiter proprement le code et la config
- `/review-pr` — pour review les changements avant déploiement

### Ressources
| Ressource | URL |
|---|---|
| Doc Tutor (officielle) | https://docs.tutor.edly.io/ |
| Open edX Forum | https://discuss.openedx.org/ |
| SCORM XBlock | https://github.com/overhangio/openedx-scorm-xblock |
| Tutor Indigo (thème) | https://github.com/overhangio/tutor-indigo |
| Tutor Aspects (analytics) | https://github.com/openedx/tutor-contrib-aspects |
| Plateforme actuelle | https://forma.digimoov.fr/ |
| Studio actuel | https://studio.forma.digimoov.fr/ |
| Secrets | https://secrets.formalab.tech (Infisical) |

---

## 6. Roadmap post-Sprint 1

### Sprint 2 (2 semaines) — Timespent V2 + Live Sessions
| Fonctionnalité | Description | Complexité |
|---|---|---|
| **Timespent V2** | Reproduire le plugin MFE React (timer, heartbeat 10s, idle detection 20min, session max 4h, analytics modal) | Haute — 8-10 jours |
| **Live Sessions** | Intégration Google Meet + Odoo pour émargement/signatures | Haute — 5 jours |

### Sprint 3 (2 semaines) — IA & Documents
| Fonctionnalité | Description | Complexité |
|---|---|---|
| **Coach IA (ESM virtuel)** | Bouton WhatsApp → chatbot IA (Claude API) pour accompagnement apprenant | Moyenne — 5 jours |
| **Validation documents IA** | Upload CNI, justificatif domicile, CERFA, JDC → validation auto via Gemini | Haute — 5 jours |
| **Auto-génération de cours** | Outil pour concepteurs/ingénieurs péda, génération de contenu IA | Moyenne — 5 jours |

### Sprint 4 (2 semaines) — Examens & Admin
| Fonctionnalité | Description | Complexité |
|---|---|---|
| **Intégration examens** | Remontée des notes, remplacement Evalbox ou intégration | Haute — 8 jours |
| **Documents admin auto** | Génération attestations fin de formation, relevés de notes, convocations | Moyenne — 5 jours |
| **Gestion groupes avancée** | Sessions, ESM, formateurs, surveillance, DREAL, financeurs | Haute — 8 jours |

### Sprint 5 (2 semaines) — Commercialisation & Scale
| Fonctionnalité | Description | Complexité |
|---|---|---|
| **Multi-centre** | Architecture pour onboarder d'autres centres de formation | Haute |
| **App mobile** | Application apprenant (React Native ou PWA) | Haute |
| **Reporting avancé** | Dashboards financeurs, DREAL, suivi cohortes | Moyenne |
| **Cutover production** | Migration DNS, formation équipes, mise en prod | Moyenne |

---

## 7. Risques & Mitigations

| Risque | Impact | Mitigation |
|---|---|---|
| SCORM incompatible nouvelle version | Bloquant | Tester dès J5, prévoir 3h de debug |
| VPS sous-dimensionné | Performance | Monitoring dès J3, upgrade si besoin |
| Export Studio échoue sur certains cours | Retard | Avoir un accès API en backup pour export programmatique |
| Multi-tenant complexe à configurer | Retard | Suivre la doc officielle, tester sur 1 cours d'abord |
| Délai fournisseur VPS | Retard | Commander J2 matin, avoir un backup Hetzner |

---

## 8. Critères de validation (Definition of Done)

- [ ] Open edX dernière version installé et accessible en HTTPS
- [ ] 2 URLs distinctes (Digimoov + MCM Academy) avec branding correct
- [ ] 56 cours importés et navigables
- [ ] SCORM fonctionne (tester 5 packages minimum)
- [ ] Quiz fonctionnent (tester 10 quiz minimum)
- [ ] Rôles configurés (apprenant, ESM, formateur, admin)
- [ ] Inscription sur invitation fonctionne
- [ ] Emails transactionnels fonctionnent
- [ ] Analytics opérationnel
- [ ] Documentation technique livrée
- [ ] Démo réalisée le 25 avril
