Files
storytime/ROADMAP.md
T
Vincent Bourdon 682d240893 feat(j0.1): squelette projet Flutter + arborescence clean archi
- flutter create --platforms=android --org biz.siteop
- arborescence lib/core/{error,theme,router,di} et lib/features/{locking,playback,podcasts,parental,limits}/{domain,application,data,presentation}
- pubspec.yaml : flutter_riverpod ^2.6.1 (YAGNI — autres paquets aux jalons suivants)
- lib/main.dart : ProviderScope + StorytimeApp (MaterialApp + écran placeholder)
- test/app_boots_test.dart : TDD Red→Green vérifié (flutter test vert, flutter analyze 0 issue)
- README.md : prérequis Flutter 3.41.6 / Dart 3.11.4

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 17:09:01 +02:00

83 lines
3.6 KiB
Markdown

# 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 | `[~]` en cours | — |
| 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)
- [ ] 0.2 — Outillage qualité (lint strict, format, CI locale)
- [ ] 0.3 — Socle transverse (`Result`, erreurs, thème, router, DI Riverpod)
## 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)_