# Storytime — Roadmap > Vue d'ensemble de l'avancement. **À tenir à jour à la fin de chaque étape** > (cocher la case + dater au format AAAA-MM-JJ). Source de vérité du « où on en est ». > > Légende : `[ ]` à faire · `[~]` en cours · `[x]` terminé (date) Spec détaillée : [`docs/specs/`](docs/specs/) — un dossier par jalon, étapes en sous-fichiers. --- ## État global | Jalon | Titre | Statut | Bloquant | |-------|-------|--------|----------| | 0 | Fondations | `[x]` terminé (2026-06-19) | — | | 1 | Verrouillage / épinglage | `[ ]` à faire | ⚠️ **bloquant projet** | | 2 | Lecture audio | `[ ]` à faire | — | | 3 | Découverte & gestion des podcasts | `[ ]` à faire | — | | 4 | Espace enfant | `[ ]` à faire | — | | 5 | Code parental & espace parent | `[ ]` à faire | — | | 6 | Limites, avertissements & fin de session | `[ ]` à faire | — | > ⚠️ Le jalon 1 valide la faisabilité de l'exigence n°1 (interdire la sortie). > Si l'épinglage ne tient pas (plugin + fallback natif), on reconsidère la stratégie matérielle (tablette dédiée) **avant** d'investir dans le reste. --- ## Jalon 0 — Fondations Spec : [`docs/specs/jalon-0-fondations/`](docs/specs/jalon-0-fondations/) - [x] 0.1 — Structure du projet Flutter & arborescence clean archi (2026-06-19) - [x] 0.2 — Outillage qualité (lint strict, format, CI locale) (2026-06-19) - [x] 0.3 — Socle transverse (`Result`, erreurs, thème, router, DI Riverpod) (2026-06-19) ## Jalon 1 — Verrouillage / épinglage ⚠️ Spec : [`docs/specs/jalon-1-verrouillage/`](docs/specs/jalon-1-verrouillage/) - [ ] 1.1 — Spike `kiosk_mode` sur appareil réel (épingler/désépingler) — **bloquant** - [ ] 1.2 — Service de verrouillage (interface domaine + impl. + use cases) - [ ] 1.3 — Fallback natif Kotlin via platform channel (si 1.1 insuffisant) ## Jalon 2 — Lecture audio Spec : [`docs/specs/jalon-2-lecture-audio/`](docs/specs/jalon-2-lecture-audio/) - [ ] 2.1 — Domaine de lecture (entités épisode/histoire, état de lecture) - [ ] 2.2 — Service audio (`just_audio` + `audio_service`) derrière interface - [ ] 2.3 — UI lecteur (boutons, progression) + contrôleur Riverpod ## Jalon 3 — Découverte & gestion des podcasts Spec : [`docs/specs/jalon-3-podcasts/`](docs/specs/jalon-3-podcasts/) - [ ] 3.1 — Recherche annuaire (API iTunes Search) - [ ] 3.2 — Ajout par URL RSS (parsing + aperçu) - [ ] 3.3 — Persistance des abonnements (SQLite) + use cases CRUD ## Jalon 4 — Espace enfant Spec : [`docs/specs/jalon-4-espace-enfant/`](docs/specs/jalon-4-espace-enfant/) - [ ] 4.1 — Liste des histoires (titres cliquables, vignettes) - [ ] 4.2 — Navigation verrouillée (épinglage auto au démarrage, pas d'échappatoire UI) ## Jalon 5 — Code parental & espace parent Spec : [`docs/specs/jalon-5-code-parental/`](docs/specs/jalon-5-code-parental/) - [ ] 5.1 — Création du code au premier lancement (4 chiffres, double saisie) - [ ] 5.2 — Stockage sécurisé (haché) + vérification du code - [ ] 5.3 — Accès à l'espace parent (icône discrète → saisie code) + abritage de la gestion podcasts ## Jalon 6 — Limites, avertissements & fin de session Spec : [`docs/specs/jalon-6-limites/`](docs/specs/jalon-6-limites/) - [ ] 6.1 — Domaine des limites (minuterie + compteur d'histoires, reset quotidien) - [ ] 6.2 — Avertissements doux en amont (« encore 5 min », « dernière histoire ») - [ ] 6.3 — Écran de fin « C'est fini pour ce soir 🌙 » + reprise parent uniquement --- ## Journal des décisions / écarts > Noter ici toute décision prise en cours de route ou tout écart avec la spec. - _(vide pour l'instant)_