User Flow complet -- Revise Mieux¶
Document UX principal. Couvre le defi produit, les personas, les 9 parcours, le flow ecran par ecran, le modele d'etats, les edge cases, les principes UX pedagogiques, l'equilibre parent/eleve, les implications React Native, les decisions ouvertes et les recommandations finales.
1. Executive summary¶
Revise Mieux transforme des photos de cahier en sessions de revision adaptatives pour les collegiens (11-15 ans), avec un dashboard parent integre. Le defi UX central est la double adoption : l'eleve decide d'ouvrir l'app chaque soir, le parent decide de payer et d'installer. Chaque decision de design doit satisfaire les deux audiences simultanement sans compromettre ni l'engagement de l'eleve ni la confiance du parent.
Ce document detaille les 20 ecrans de l'app (8 existants, 12 a creer), les 9 parcours produit cles, les 11 etats d'affichage par ecran critique, et les 30 edge cases identifies. Il est directement exploitable par un developpeur React Native avec Expo Router.
Chiffres cles : - 53 ACs couverts par le Lot 0 (33 P1 + 20 P2) - 171 ACs totaux repartis sur 8 zones - 4 chapitres pilotes (HG, SVT, Physique-Chimie) - Cible : premiere session reussie en < 3 minutes apres l'install
2. Defi UX produit : la double adoption¶
Pourquoi ce n'est PAS une app standard a audience unique¶
La plupart des apps educatives ciblent soit l'eleve (Duolingo, Quizlet) soit le parent (Klassroom, Pronote). Revise Mieux doit convaincre les deux simultanement, dans des cadres temporels differents :
- L'eleve ouvre l'app le soir, 10-15 min. Sa decision est repetee quotidiennement. Chaque session est un micro-choix : "est-ce que j'ouvre l'app ou je regarde TikTok ?" Le design doit donner envie, pas obliger.
- Le parent ouvre l'app 1-2 fois par semaine, < 2 min. Sa decision est ponctuelle (installation, renouvellement). Il a besoin d'un signal fiable sans micro-management.
Tensions entre les deux audiences¶
| L'eleve veut | Le parent veut | Tension |
|---|---|---|
| Interface attractive, moderne | Interface serieuse, credible | Esthetique intergenerationnelle |
| Pas de surveillance | Visibilite sur l'usage | Transparence vs autonomie |
| Pas de culpabilisation | Alertes si inactivite | Notification vs bien-etre |
| Recompenses implicites (progression) | Metriques explicites (scores) | Granularite du feedback |
| Sessions courtes et optionnelles | Usage regulier et mesurable | Frequence vs liberte |
Risques d'adoption¶
Cote eleve : - Friction dans les 30 premieres secondes -> desinstallation - Premier OCR echoue sans recovery -> "ca marche pas" - Sessions trop longues ou repetitives -> lassitude - Sentiment de surveillance parentale -> rejet emotionnel
Cote parent : - Aucun signal pendant 6 jours -> oubli de l'app - Metriques incomprehensibles (UNKNOWN, FRAGILE) -> perte de confiance - Trop de notifications -> desactivation complete - Score gonfle sur QCM faciles -> fausse securite
Qu'est-ce qui fait revenir un collegien de 13 ans chaque soir ?¶
- Previsibilite : "Ce soir : 3 activites, ~15 min." L'engagement est defini, pas ouvert.
- Progression visible : des items qui passent de UNKNOWN a SOLID. Un % qui monte.
- Permission de fermer : l'ecran "Fini pour ce soir" dit explicitement "c'est assez".
- Variete : alternance des types de questions (MCQ, CLOZE, SHORT) et des matieres.
- Pas de punition : pas de streak, pas de regression par inactivite, pas de "tu as rate".
Qu'est-ce qui fait qu'un parent de 45 ans fait confiance ?¶
- Preuve rapide : digest anticipe J+2 avec temps de revision et matieres couvertes.
- Honnetete : score_confidence visible, mention des items en verification.
- Engagement minimal : notification "routine terminee" le soir + digest hebdo le dimanche.
- Labels lisibles : "Bien acquis" au lieu de "SOLID", "En cours d'apprentissage" au lieu de "FRAGILE".
- Action concrete : script 3 minutes avec 2-3 questions orales a poser.
3. Personas¶
Voir le document dedie : docs/ux/personas.md
4 personas : - Theo (13 ans, 4e) : motive mais irregulier. Veut 10-15 min/soir, pas plus. - Ines (11 ans, 6e) : appliquee mais anxieuse. Besoin de reassurance et de "fini". - Lucas (15 ans, 3e) : desengage. Seuil de friction zero. 30 secondes pour prouver la valeur. - Laurent (45 ans, pere) : cherche un signal fiable sans micro-manager.
4. Parcours produit cles¶
Parcours 1 : Onboarding -- premiere connexion¶
Acteurs : Eleve (+ parent potentiel) Objectif : Premiere session reussie en < 3 minutes ACs : Z8-AC01, Z8-AC02, Z8-AC04, Z8-AC08
Installation
|
v
Dashboard vide + chapitre demo (Z8-AC01, Z8-AC02)
|
v
Session demo evening_first (~3 min, 8 questions)
|
v
Debrief : 6/8 -> transitions UNKNOWN -> FRAGILE
|
v
Dashboard avec progression visible
|
v
Capture premier vrai cours (quand l'eleve veut)
|
v
Pipeline OCR (processing.tsx) -> chapitre cree
|
v
evening_first sur vrai chapitre -> debrief -> invitation parent (Z8-AC07)
Gains pedagogiques : premier contact avec le rappel actif. L'eleve decouvre que repondre a des questions est plus efficace que relire.
Reduction d'effort : 0 configuration requise. Pas d'emploi du temps, pas de matiere, pas de formulaire. Un seul tap "Charger le chapitre demo" et c'est parti.
Parcours 2 : Capture J0¶
Acteurs : Eleve Objectif : Transformer des photos de cahier en items revisables ACs : Z2-AC01 a AC10, Z5-AC11, Z8-AC04
Tab Capture -> prendre 1-30 photos
|
v
(Optionnel) Saisie emploi du temps matiere (Z6-AC01)
|
v
Processing screen (3 phases, Z8-AC04)
|
v
├── Succes : chapitre cree -> carte de lecon avec items
|
└── Echec : ecran recovery (Z8-AC03)
├── Reprendre les photos
├── Essayer quand meme
└── Chapitre demo
Gains pedagogiques : le contenu de revision est le propre cours de l'eleve, pas un contenu generique. L'ancrage est plus fort car l'eleve reconnait ses notes.
Parcours 3 : Dashboard eleve -- plan d'action quotidien¶
Acteurs : Eleve Objectif : Savoir quoi faire maintenant en < 5 secondes ACs : Z7-AC01, Z7-AC02, Z7-AC04, Z7-AC05, Z7-AC08, Z6-AC30
Ouverture de l'app (17h-22h)
|
v
Dashboard soiree :
"Bonsoir Hugo ! Ce soir : 3 activites, ~15 min."
|
v
[C'est parti !] ou [Je n'ai pas beaucoup de temps]
| |
v v
Plan complet Mode express (~10 min)
| |
v v
Completion progressive des etapes
|
v
Ecran de cloture : "Bravo ! Soiree terminee en 14 min."
-> notification parent "routine terminee"
Reduction d'anxiete : l'estimation de duree et l'ecran de cloture encadrent l'effort. L'eleve sait quand il commence et quand il finit.
Parcours 4 : Session de revision¶
Acteurs : Eleve Objectif : Repondre a des questions, recevoir du feedback, progresser ACs : Z1-AC01 a AC12, Z4-AC04 a AC09, Z6-AC05
Lancer une session
|
v
Question affichee (MCQ / SHORT / CLOZE / NUMERIC)
|
v
Reponse + Valider
|
v
├── MCQ : scoring automatique
└── Autres : auto-evaluation "Je savais / Je ne savais pas"
|
v
Feedback enrichi (reponse correcte + ce qui manquait + indice)
|
v
├── Transition positive ? -> micro-celebration
└── Question suivante
|
v
Debrief : score, progressions, item prioritaire a revoir
Gains pedagogiques : rappel actif (repondre > relire). Feedback immediat avec explication. Alternance de formats pour activer differents circuits cognitifs.
Parcours 5 : Revue des erreurs¶
Acteurs : Eleve Objectif : Comprendre ce qui a ete rate, pas juste constater ACs : Z4-AC09, Z1-AC19, Z1-AC21
Le feedback enrichi (Z4-AC09) apres chaque reponse incorrecte contient 3 elements : 1. La reponse correcte 2. Ce qui manquait (specifique au type de question) 3. Un indice pour la prochaine fois (1 phrase max)
L'eleve peut aussi : - "Voir ma lecon" (Z1-AC21) pour le contexte complet - "Je ne comprends pas la question" (Z1-AC22) pour une reformulation
Apres 3 echecs consecutifs sur le meme item, la difficulte descend automatiquement (Z1-AC19).
Parcours 6 : Retour apres absence (3-7 jours)¶
Acteurs : Eleve Objectif : Reprendre sans etre submerge ACs : Z6-AC13, Z6-AC22, Z6-AC21
Ouverture apres 5 jours d'absence
|
v
Message : "Content de te revoir ! On reprend doucement."
|
v
Session "retour en douceur" :
- 5 min max
- 4-6 items les plus anciens en retard
- Gabarits difficulte 1-2
|
v
Debrief : "Bon retour ! Les points restants arrivent demain."
|
v
Items restants etales sur 3-5 jours
Principes critiques : aucune regression par inactivite (Z6-AC13). Pas de streak. Pas de culpabilisation. Le message d'accueil est neutre ou positif.
Parcours 7 : Dashboard parent¶
Acteurs : Parent Objectif : Comprendre ce que fait l'app, verifier l'utilite ACs : Z6-AC27, Z6-AC29, Z6-AC30, Z8-AC05
Premier acces apres liaison (code 6 caracteres)
|
v
Onboarding 3 ecrans (30s) :
1. "Voici ce que fait [Prenom]"
2. "Votre tableau de bord"
3. "Restez informe sans effort"
|
v
Dashboard parent :
- Maitrise globale (% items OK+SOLID)
- Chapitres par matiere avec barres
- Activite de la semaine
- Script 3 minutes
- Validations en attente (si mode actif)
Labels traduits (Z6-AC29) : - UNKNOWN -> "Pas encore vu" - FRAGILE -> "En cours d'apprentissage" - OK -> "Compris, a consolider" - SOLID -> "Bien acquis" - validation_required -> "En verification"
Parcours 8 : Validation HITL¶
Acteurs : Eleve ou parent Objectif : Valider les items incertains generes par le LLM ACs : Z3-AC01 a AC06
Bandeau sur le chapitre : "6 zones a verifier"
|
v
Ecran validation : item + suggestion IA
|
v
├── Confirmer -> confidence boostee, cache invalidee
├── Corriger -> contenu mis a jour, confidence = 1.0
├── Je ne sais pas -> delegue a l'admin, item en mode simple
└── Ignorer -> item exclu des sessions, recuperable plus tard
Point critique : le chapitre est TOUJOURS utilisable meme si 0 validations faites (Z3-AC06). La validation est encouragee mais jamais bloquante.
Parcours 9 : Gestion de contenu OCR incomplet¶
Acteurs : Eleve, systeme Objectif : Continuer a travailler malgre des pages problematiques ACs : Z2-AC01, Z2-AC02, Z2-AC04, Z2-AC05, Z2-AC11
Pipeline OCR avec 10 pages
|
v
Pages 1-3 traitees, 4-10 en cours
|
v
Carte de lecon affiche les items des pages 1-3 (Z2-AC01)
+ indicateur "3/10 pages analysees"
|
v
Page 4 timeout -> badge "Zone illisible page 4" (Z2-AC02)
Page 5 = 0 items -> marquee no_items_extracted (Z2-AC04)
Page 6 = erreur LLM -> badge "Exercices non generes page 6" + bouton Reessayer (Z2-AC11)
|
v
L'eleve peut lancer le diagnostic sur les items disponibles
Le chapitre N'EST PAS bloque
5. Flow detaille ecran par ecran¶
Voir le document dedie : docs/ux/screen-inventory.md
Resume : 20 ecrans au total. - 8 existants : Dashboard, Capture, Settings, Onboarding, Processing, Chapter detail, Session, Debrief - 12 a creer : Validation HITL, Recovery OCR, Creation exam, Emploi du temps, Invitation parent, Dashboard parent, Onboarding parent, Angles morts, Fiche PDF, Report papier, Cloture soiree, Controle blanc
6. Modele d'etats par ecran critique¶
Voir le document dedie : docs/ux/state-model.md
11 etats couverts pour 8 ecrans critiques : Default, Loading, Processing, Success, Empty, Partial, Stale, OCR Uncertainty, Error, Blocked, Retry.
7. Edge cases et chemins de recuperation¶
Voir le document dedie : docs/ux/edge-cases.md
30 edge cases repartis en 6 categories : Capture photo (6), Session de revision (7), Validation HITL (4), Adoption et engagement (6), Connectivite (3), Cas limites techniques (4).
8. Principes UX pedagogiques¶
Principe 1 : Rappel actif > relecture¶
Toute session genere des questions. L'eleve ne relit jamais passivement. Meme le mode fallback (LLM indisponible, Z4-AC12) utilise des flashcards avec "Je savais / Je ne savais pas".
Implication design : pas d'ecran de "lecture de la lecon" comme activite principale. Le bouton "Voir ma lecon" (Z1-AC21) est contextuel (pendant une question), pas un mode de revision.
Principe 2 : Repetition espacee invisible¶
L'algorithme SRS (UNKNOWN -> FRAGILE -> OK -> SOLID avec next_due_at) est entierement transparent pour l'eleve. Il ne voit pas les intervalles, les dates, les algorithmes. Il voit : "Ce soir : 3 activites, ~15 min."
Implication design : jamais montrer next_due_at a l'eleve. Le dashboard soiree presente un plan, pas un calendrier de revision.
Principe 3 : Espacement obligatoire pour SOLID¶
La transition OK -> SOLID exige 2 reussites espacees de 24h minimum (Z1-AC03/AC04). L'eleve ne peut pas "grinder" un item en SOLID en une seule session.
Implication design : message explicatif quand l'espacement bloque la progression : "Bonne reponse ! Reviens demain pour verrouiller ce point -- ton cerveau a besoin d'une nuit pour bien memoriser."
Principe 4 : Double codage (Paivio)¶
Les blocs visuels du cahier (schemas, graphiques, tableaux) sont preserves et reutilises dans les questions (Z2-AC15, Z4-AC17). L'eleve voit le schema de son cahier dans le quiz.
Implication design : les questions visuelles affichent l'image au-dessus du texte, avec zoom plein ecran (Z2-AC18). Placeholder aux dimensions exactes pour eviter le reflow.
Principe 5 : Growth mindset dans tous les messages¶
Aucun message ne dit "echec", "regression", "tu as perdu". Les regressions sont framed comme "refresh", "a revoir", "pas encore acquis" (Z1-AC05, Z1-AC06, Z1-AC26).
Implication design : fichier de strings centralise avec review systematique du framing. Chaque message negatif doit etre reformule en action future positive.
Principe 6 : Pas de streak, pas de gamification punitive¶
L'app ne compte pas les jours consecutifs (Z6-AC15). Pas de mecanique de type "tu as perdu ta serie de 7 jours". La seule recompense est la progression de maitrise (UNKNOWN -> SOLID).
Implication design : les micro-celebrations (Z1-AC14) portent sur les transitions de maitrise, pas sur la regularite. Le debrief valorise ce qui a progresse, pas combien de jours d'affilee.
9. Principes d'equilibre parent/eleve¶
Ce que le parent DOIT voir¶
- Maitrise globale par chapitre (% items OK+SOLID)
- Frequence de revision (sessions/semaine, temps total)
- Alertes risque reel : inactivite 3+ jours, controle dans 3 jours avec items FRAGILE
- Qualite du signal : score_confidence, items en verification
Ce que le parent NE DOIT PAS dominer¶
- Le detail question par question (l'eleve a droit a l'intimite de ses erreurs)
- Le temps exact de chaque session (le parent n'est pas un chrono)
- Les regressions individuelles (le parent voit les tendances, pas les micro-echecs)
- L'emploi du temps modifie (l'eleve gere, le parent est notifie si opt-in)
Comment l'eleve percoit la presence du parent¶
- Invisible au quotidien : l'eleve ne voit JAMAIS "ton parent a ete prevenu" (Z6-AC17 note). La notification parent est unidirectionnelle.
- Presente a 2 moments : (1) l'invitation initiale apres la premiere session, (2) les ValidationTasks si le parent est en mode actif (max 3/semaine).
- Percue comme un allie, pas un flic : le script 3 minutes est un moment de discussion parent-enfant autour du cours, pas un interrogatoire.
Design principles pour l'intergenerationnel¶
- Pas enfantin : pas de mascottes, pas d'etoiles, pas de confettis excessifs. Les micro-celebrations sont des messages textuels + animations subtiles.
- Pas froid : le tutoiement (eleve), les messages personalises avec prenom, le ton encourageant.
- Pas bureaucratique : le parent voit des barres de couleur et des % lisibles, pas des tableaux Excel.
- Deux niveaux de lecture : le meme score "72% maitrise" est lisible par l'eleve (barre de couleur) et par le parent (% numerique + label "Compris, a consolider").
10. Implications pour l'implementation React Native¶
Liste des ecrans et routes Expo Router¶
Voir docs/ux/screen-inventory.md pour la liste complete.
Logique de navigation¶
Root (_layout.tsx)
├── (tabs)/
│ ├── index.tsx -- Dashboard eleve
│ ├── capture.tsx -- Capture photo
│ └── settings.tsx -- Parametres
├── onboarding.tsx -- Onboarding eleve
├── processing.tsx -- Pipeline OCR
├── recovery.tsx -- Recovery OCR (a creer)
├── chapter/[id].tsx -- Detail chapitre
├── session/[id].tsx -- Session revision
├── validation/[id].tsx -- Validation HITL (a creer)
├── exam/create.tsx -- Creation exam (a creer)
├── schedule.tsx -- Emploi du temps (a creer)
├── invite-parent.tsx -- Invitation parent (a creer)
├── blind-spots.tsx -- Angles morts (a creer)
├── paper-report/[id].tsx -- Report papier (a creer)
└── parent/ (a creer)
├── dashboard.tsx -- Dashboard parent
└── onboarding.tsx -- Onboarding parent
Etat partage : Context vs local vs TanStack Query (prevu)¶
| Donnee | Ou vit l'etat | Justification |
|---|---|---|
| Token JWT / auth | React Context (global) | Necessaire partout |
| User profile (prenom, zone) | React Context (global) | Utilise dans les messages personnalises |
| Liste des chapitres | TanStack Query (cache serveur) | Rafraichi par pull-to-refresh, invalide apres upload |
| Masteries | TanStack Query (cache serveur) | Invalide apres chaque session |
| EveningPlan | Etat local du dashboard | Calcule a chaque ouverture, ephemere |
| Session en cours | Etat local de session/[id].tsx | Specifique a un ecran |
| Photos capturees | Etat local de capture.tsx | Pas de persistence entre navigations |
| Reponses pending_sync | AsyncStorage (persistance locale) | Survit au kill de l'app |
Patterns reutilisables¶
| Composant | Usage | Props cles |
|---|---|---|
EmptyState |
Dashboard vide, 0 validations, 0 items | icon, title, subtitle, ctaLabel, onCta |
ErrorState |
Erreur reseau sur tout ecran | message, onRetry |
LoadingSkeleton |
Placeholder pendant chargement | variant (card, list, bar) |
MasteryBar |
Barre de maitrise (existant) | breakdown, height, showLabel |
MasteryBadge |
Badge etat d'un item (existant) | state |
FeedbackCard |
Feedback post-reponse | isCorrect, expected, missing, hint |
MicroCelebration |
Animation transition positive | fromState, toState, term |
ProgressSteps |
Checklist etapes (onboarding, plan soiree) | steps[], currentIndex |
ProcessingPhase |
Phase 1/2/3 du pipeline | phase, progress |
Types TypeScript (props majeurs)¶
// EveningPlan
type EveningStep = {
type: 'capture' | 'evening_first' | 'daily' | 'pre_class';
subject_label: string;
estimated_duration_min: number;
status: 'pending' | 'in_progress' | 'completed' | 'skipped';
session_id?: string;
};
type EveningPlan = {
steps: EveningStep[];
total_duration_min: number;
mode: 'full' | 'express';
completed_at?: string;
};
// Feedback
type FeedbackData = {
is_correct: boolean;
expected_answer: string;
missing_elements?: string[];
hint: string;
transition?: {
from_state: MasteryState;
to_state: MasteryState;
term: string;
};
};
// Validation
type ValidationAction = 'confirm' | 'correct' | 'skip' | 'ignore';
type ValidationTask = {
id: string;
item_id: string;
suggestion: string;
source: 'fidelity_check' | 'coherence_check' | 'student_report' | 'anomaly_detection';
status: 'PENDING' | 'RESOLVED_CONFIRMED' | 'RESOLVED_CORRECTED' | 'DEFERRED_BY_STUDENT' | 'IGNORED_BY_STUDENT';
};
// Parent dashboard
type ParentChapterSummary = {
id: string;
name: string;
subject: string;
mastery_pct: number; // % items OK+SOLID
validation_pending_count: number;
mastery_label: string; // "Bien acquis", "En cours d'apprentissage"
};
type ParentDigest = {
sessions_count: number;
total_revision_min: number;
chapters: ParentChapterSummary[];
alerts: string[];
next_action: string;
};
11. Decisions produit ouvertes¶
Voir le document dedie : docs/ux/open-decisions.md
11 decisions identifiees, dont 3 bloquantes pour le Lot 0 P2 : 1. App unique vs separee pour le parent 2. Auto-evaluation vs scoring automatique MCQ 3. Position du bouton "Ajouter des pages"
12. Recommandations UX finales¶
R1 : Prioriser le "Time to First Quiz" (TTFQ)¶
Le chapitre demo (Z8-AC01) est le meilleur investissement UX du Lot 0. Un eleve qui fait son premier quiz en 3 minutes a 5x plus de chances de revenir le lendemain. Le TTFQ doit etre mesure et optimise comme metrique produit primaire.
R2 : Le plan de soiree est le produit¶
Le dashboard soiree (Z7-AC02) n'est pas une feature -- c'est l'interface principale. L'eleve ne devrait jamais avoir a decider quoi faire. Le plan decide pour lui. L'estimation de duree et l'ecran de cloture sont les deux extremites du "contrat" avec l'eleve.
R3 : Investir dans le feedback enrichi (Z4-AC09) avant tout le reste¶
Un feedback qui dit "Faux -- la bonne reponse est X" n'enseigne rien. Le feedback enrichi (reponse correcte + ce qui manquait + indice 1 phrase) est le micro-moment d'apprentissage le plus puissant de chaque session. Il doit etre templatise (pas LLM en temps reel) pour garantir la rapidite (< 200 ms).
R4 : Tester le mode express (Z7-AC08) des la premiere semaine¶
Le mode "Je n'ai pas beaucoup de temps" est un anti-churn majeur. 5 minutes de revision ciblee valent infiniment mieux que 0 minute. Si l'eleve ne voit pas ce bouton, il saute la revision entierement les soirs charges.
R5 : La notification "routine terminee" est le killer feature parent¶
Le parent qui recoit "Theo a termine sa revision du soir : 3 matieres, 14 min" chaque soir n'a pas besoin d'ouvrir l'app. C'est le signal de confiance maximal avec le cout minimal. Implementer Z7-AC13 le plus tot possible.
R6 : Ne jamais montrer un ecran vide¶
Chaque ecran a un empty state explicite avec un CTA. Le dashboard vide a le chapitre demo. La session sans items a le message "Bravo, tu es a jour". Le dashboard parent sans activite a "Vous serez notifie des la premiere session". Aucun ecran ne doit laisser l'utilisateur face a du vide sans action possible.
R7 : Mesurer le taux d'echec du premier OCR¶
L'echec du premier OCR (Z8-AC03) est le point de churn #1 du funnel. Logger chaque j0_first_upload_recovery et monitorer le taux. Si > 20% des premiers uploads echouent, c'est un probleme systeme, pas un probleme utilisateur.
R8 : Implementer la persistance locale des reponses (Z6-AC31) tot¶
Un collegien utilise l'app dans le bus, en zone blanche, avec du wifi instable. Une deconnexion de 10 secondes ne doit jamais perdre une reponse. La persistance optimiste cote client est un prerequis pour toute session fiable en mobilite.