Files
Zauberwald/.planning/REQUIREMENTS.md
T
gurix 44b6c9053a docs(05-01): complete pagination data model and navigation DOM plan
- 05-01-SUMMARY.md: paginated forest rendering with SLOTS_PER_PAGE=12
- STATE.md: advanced to plan 2 of 2, progress 95%, recorded decisions
- ROADMAP.md: phase 5 progress updated (1/2 summaries)
- REQUIREMENTS.md: MWLD-01..04 marked complete
2026-03-29 23:00:30 +02:00

247 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Requirements: Zauberwald
**Defined:** 2026-03-29
**Core Value:** Das Kind übt freiwillig weiter, weil es wissen will, was als Nächstes im Wald erscheint — nicht weil es Punkte sammelt.
## v1 Requirements
Requirements for initial release (MVP). Each maps to roadmap phases.
### Foundation
- [x] **FNDN-01**: Vite-Projekt mit vanilla-ts Template, TypeScript strict mode, Biome Lint, Vitest
- [x] **FNDN-02**: Projektstruktur gemäss Spec Abschnitt 13 (alle Verzeichnisse + Dateien)
- [x] **FNDN-03**: Alle TypeScript-Interfaces definiert (Progress, ForestElement, CompanionAssets, Level, etc.)
- [x] **FNDN-04**: IndexedDB-Wrapper mit allen Stores (progress, companionAssets, styleReference, forestElements, settings)
- [x] **FNDN-05**: Screen-Management: 5 Screens (welcome, forest, lesson, reward, parent), CSS fade Transitions
### Onboarding
- [x] **ONBD-01**: Willkommens-Screen mit Begleitfigur-Auswahl (4 Karten mit Avataren)
- [x] **ONBD-02**: Tastatur-Layout-Auswahl (DE/CH) im Willkommens-Screen
- [x] **ONBD-03**: Auswahl persistiert in IndexedDB, wird nach Reload wiederhergestellt
- [x] **ONBD-04**: "Los geht's" führt direkt zur Wald-Übersicht (kein Ladescreen)
### Keyboard
- [x] **KYBD-01**: Bildschirmtastatur rendert vollständiges QWERTZ-Layout
- [x] **KYBD-02**: Tasten zeigen Fingerfarben gemäss Farbpalette (8 Fingerfarben + Daumen)
- [x] **KYBD-03**: Aktive Taste pulsiert sanft, gedrückte Taste zeigt Press-Animation
- [x] **KYBD-04**: Noch nicht gelernte Tasten sind ausgegraut
- [x] **KYBD-05**: Beide Layouts (DE/CH) als Daten hinterlegt und umschaltbar
### Typing
- [x] **TYPE-01**: Phase "Üben": Buchstaben erscheinen einzeln (CSS-Animation fallend), 812 pro Übung
- [x] **TYPE-02**: Richtiger Tastendruck löst Buchstaben auf (Sternenstaub-Animation)
- [x] **TYPE-03**: Falscher Tastendruck: Nichts passiert, richtige Taste blinkt sanft auf Tastatur
- [x] **TYPE-04**: Adaptives Tempo: Start 3s, nach 2× richtig -200ms (min 1.5s), nach Fehler +500ms (max 4s)
- [x] **TYPE-05**: Phase "Entdecken": Begleitfigur stellt neuen Buchstaben vor, Taste leuchtet auf
- [x] **TYPE-06**: Phase "Wörter bauen": 34 Wörter aus gelernten Buchstaben, Buchstabe für Buchstabe tippen
- [x] **TYPE-07**: Alle 3 Phasen fliessend verbunden: Entdecken → Üben → Wörter → Belohnung
### Levels
- [x] **LEVL-01**: Stufen 16 definiert gemäss Progressionstabelle (F/J bis E/I)
- [x] **LEVL-02**: Stufe gilt als abgeschlossen nach einmaligem Durchspielen (nicht perfekt)
- [x] **LEVL-03**: Nächste Stufe sofort freigeschaltet, alle gespielten Stufen wiederholbar
- [x] **LEVL-04**: Wortlisten pro Stufe (nur mit bereits gelernten Buchstaben, max 5 Buchstaben)
- [x] **LEVL-05**: Review-Mechanik: Jede 3. Einheit mischt Buchstaben der letzten 23 Stufen
- [x] **LEVL-06**: Wiederholungs-Schutz: Nach 2× gleicher Stufe Ermutigung + Neugier-Trigger
### Gemini API
- [x] **GAPI-01**: Config-Loader: `public/config.json` via fetch laden, typisiertes Interface
- [x] **GAPI-02**: Text-API-Client: `generateText(prompt, systemPrompt)` mit Retry und Fehlerbehandlung
- [x] **GAPI-03**: Bild-API-Client: `generateImage(prompt, referenceImages[])` mit Character Consistency
- [x] **GAPI-04**: Fallback-Texte: 10 Begrüssungen, 10 Wald-Kommentare, Buchstaben-Vorstellungen Stufe 16
- [x] **GAPI-05**: Fallback-Bilder: 510 statische SVG/PNG-Bilder als Backup
- [x] **GAPI-06**: Rate-Limiting: Max 1 Bild + 1 Text pro Übungseinheit
### Assets
- [x] **ASST-01**: Build-Script `scripts/generate-assets.ts` generiert 4 Character Sheets + 4 Avatare + 1 Stil-Referenz
- [x] **ASST-02**: Generierte Assets in `src/assets/companions/` und `src/assets/style-reference/` eingecheckt
- [x] **ASST-03**: Willkommens-Screen zeigt echte generierte Avatare statt Platzhalter
- [x] **ASST-04**: Companion-Area in Übung zeigt Avatar der gewählten Figur
### Forest
- [x] **FRST-01**: Waldszene: SVG-Hintergrund + 4×3 Grid für generierte Bilder
- [x] **FRST-02**: Neue Elemente mit fade-in + scale-up Animation
- [x] **FRST-03**: Alle bisherigen Elemente aus IndexedDB geladen und angezeigt
- [x] **FRST-04**: Stufenkarte: Level-Grid mit Status (locked/current/completed)
- [x] **FRST-05**: "Weiter üben" Button startet nächste offene Stufe
### Companion
- [x] **COMP-01**: Begrüssungstext bei App-Start (KI-generiert, tageszeit-abhängig, oder Fallback)
- [x] **COMP-02**: Buchstaben-Vorstellungstext (KI-generiert mit Eselsbrücke, oder Fallback)
- [x] **COMP-03**: Waldbelohnungs-Kommentar (KI-generiert, Staunen + Freude, oder Fallback)
- [x] **COMP-04**: Alle Texte max 25 Wörter, einfache Sprache, kein Leistungslob, kein Englisch
### Reward
- [x] **RWRD-01**: Belohnungs-Screen nach jeder Einheit: Neues Waldelement-Bild + Companion-Kommentar
- [x] **RWRD-02**: Pre-Generation: Bild wird während Übung im Hintergrund generiert
- [x] **RWRD-03**: Placeholder bei Wartezeit ("Der Wald denkt nach..." mit animierten Blättern)
- [x] **RWRD-04**: "Weiter üben" / "Zurück zum Wald" Buttons
### Parent Area
- [x] **PRNT-01**: Zugang via Ctrl+Shift+E + Code "1234"
- [x] **PRNT-02**: Übersicht: Aktuelle Stufe, abgeschlossene Einheiten, Übungstage (Kalender-Dots)
- [x] **PRNT-03**: Statistik: Durchschnittliche Genauigkeit, häufigste Fehlertasten (nur hier sichtbar)
- [x] **PRNT-04**: Einstellungen: Layout-Wechsel, Audio an/aus, Begleitfigur wechseln, API-Key
- [x] **PRNT-05**: Export: Fortschritt als JSON (ohne Blobs)
- [x] **PRNT-06**: Import: JSON hochladen mit Validierung
- [x] **PRNT-07**: Reset: Alles löschen mit doppelter Bestätigung
### Audio
- [x] **AUDI-01**: Richtiger Tastendruck: Kurzer heller Ton (800Hz, 0.1s, Web Audio API)
- [x] **AUDI-02**: Belohnung: Aufsteigende Tonfolge (0.8s)
- [x] **AUDI-03**: Neues Waldelement: Glitzer-Sound (weisses Rauschen gefiltert, 0.5s)
- [x] **AUDI-04**: Mute-Button immer sichtbar, Zustand persistiert
- [x] **AUDI-05**: Optionale Sprachausgabe via Web Speech API (Deutsch, Rate 0.9, Pitch 1.1)
### Polish
- [x] **PLSH-01**: Fallende Buchstaben als sanft schwebende CSS-Animation (wie Blätter)
- [x] **PLSH-02**: Erfolg-Animation: Sternenstaub/Glitzer via CSS particles
- [x] **PLSH-03**: Begleitfigur-Avatar: Float-Animation (sanftes Schweben)
- [x] **PLSH-04**: Responsive bis 700px Breite (Tastatur verkleinert, Fonts skalieren)
- [x] **PLSH-05**: Globaler Error-Handler: Kindgerechte Fehlermeldung, kein Crash
- [x] **PLSH-06**: CSS-Palette + Typografie vollständig gemäss Spec (Custom Properties, Quicksand, Nunito)
### Multi-Wald-System
- [x] **MWLD-01**: Wald-Seite berechnet aus Element-Index (Math.floor(index / 12)), kein DB-Schema-Change
- [x] **MWLD-02**: renderForestScene zeigt nur 12 Elemente pro Seite (page-basiertes Slicing)
- [x] **MWLD-03**: Navigationspfeile (Links/Rechts) neben Waldszene, min 44px Touch-Targets, Pastellfarben
- [x] **MWLD-04**: "Wald X von Y" Textanzeige, Navigation bei nur einer Seite ausgeblendet
- [ ] **MWLD-05**: currentForestPage in Progress gespeichert, nach Reload wiederhergestellt
- [ ] **MWLD-06**: Nach Lesson-Abschluss automatisch zur Seite mit dem neuen Element navigieren
- [ ] **MWLD-07**: Sanfte Fade-Animation beim Seitenwechsel
## v2 Requirements
Deferred to future release. Tracked but not in current roadmap.
### Extended Levels
- **ELVL-01**: Stufen 715 (untere Reihe, Grossbuchstaben, Zahlen, Sonderzeichen)
- **ELVL-02**: Ganze Sätze tippen
### Extended Features
- **EXTF-01**: "Freies Schreiben"-Modus (Brief an Begleitfigur)
- **EXTF-02**: Saisonale Wald-Themen
- **EXTF-03**: Begleitfigur reagiert auf längere Abwesenheit
- **EXTF-04**: Druckbare Urkunden
## Out of Scope
| Feature | Reason |
|---------|--------|
| Mobile Support | Desktop-only, Kind nutzt Linux-Laptop |
| OAuth/Social Login | Einzelnutzerin, kein Nutzersystem |
| Backend/Server | Rein clientseitig, IndexedDB für Persistenz |
| Echtzeit-Chat | Irrelevant für Einzelnutzung |
| Video-Inhalte | Storage/Bandwidth, unnötig |
| Canvas/WebGL Rendering | DOM-basiert einfacher für generierte PNGs |
| CSS Framework (Tailwind etc.) | Einzelne main.css ausreichend |
| Google SDK | Eigener typisierter REST-Client via fetch |
## Traceability
Which phases cover which requirements. Updated during roadmap creation.
| Requirement | Phase | Status |
|-------------|-------|--------|
| FNDN-01 | Phase 1 | Complete |
| FNDN-02 | Phase 1 | Complete |
| FNDN-03 | Phase 1 | Complete |
| FNDN-04 | Phase 1 | Complete |
| FNDN-05 | Phase 1 | Complete |
| ONBD-01 | Phase 1 | Complete |
| ONBD-02 | Phase 1 | Complete |
| ONBD-03 | Phase 1 | Complete |
| ONBD-04 | Phase 1 | Complete |
| KYBD-01 | Phase 1 | Complete |
| KYBD-02 | Phase 1 | Complete |
| KYBD-03 | Phase 1 | Complete |
| KYBD-04 | Phase 1 | Complete |
| KYBD-05 | Phase 1 | Complete |
| TYPE-01 | Phase 1 | Complete |
| TYPE-02 | Phase 1 | Complete |
| TYPE-03 | Phase 1 | Complete |
| TYPE-04 | Phase 1 | Complete |
| LEVL-01 | Phase 1 | Complete |
| LEVL-02 | Phase 1 | Complete |
| LEVL-03 | Phase 1 | Complete |
| FRST-04 | Phase 1 | Complete |
| FRST-05 | Phase 1 | Complete |
| PLSH-06 | Phase 1 | Complete |
| GAPI-01 | Phase 2 | Complete |
| GAPI-02 | Phase 2 | Complete |
| GAPI-03 | Phase 2 | Complete |
| GAPI-04 | Phase 2 | Complete |
| GAPI-05 | Phase 2 | Complete |
| GAPI-06 | Phase 2 | Complete |
| ASST-01 | Phase 2 | Complete |
| ASST-02 | Phase 2 | Complete |
| ASST-03 | Phase 2 | Complete |
| ASST-04 | Phase 2 | Complete |
| COMP-01 | Phase 2 | Complete |
| COMP-02 | Phase 2 | Complete |
| COMP-03 | Phase 2 | Complete |
| COMP-04 | Phase 2 | Complete |
| TYPE-05 | Phase 3 | Complete |
| TYPE-06 | Phase 3 | Complete |
| TYPE-07 | Phase 3 | Complete |
| LEVL-04 | Phase 3 | Complete |
| LEVL-05 | Phase 3 | Complete |
| LEVL-06 | Phase 3 | Complete |
| FRST-01 | Phase 3 | Complete |
| FRST-02 | Phase 3 | Complete |
| FRST-03 | Phase 3 | Complete |
| RWRD-01 | Phase 3 | Complete |
| RWRD-02 | Phase 3 | Complete |
| RWRD-03 | Phase 3 | Complete |
| RWRD-04 | Phase 3 | Complete |
| PRNT-01 | Phase 3 | Complete |
| PRNT-02 | Phase 3 | Complete |
| PRNT-03 | Phase 3 | Complete |
| PRNT-04 | Phase 3 | Complete |
| AUDI-01 | Phase 4 | Complete |
| AUDI-02 | Phase 4 | Complete |
| AUDI-03 | Phase 4 | Complete |
| AUDI-04 | Phase 4 | Complete |
| AUDI-05 | Phase 4 | Complete |
| PLSH-01 | Phase 4 | Complete |
| PLSH-02 | Phase 4 | Complete |
| PLSH-03 | Phase 4 | Complete |
| PLSH-04 | Phase 4 | Complete |
| PLSH-05 | Phase 4 | Complete |
| PRNT-05 | Phase 4 | Complete |
| PRNT-06 | Phase 4 | Complete |
| PRNT-07 | Phase 4 | Complete |
| MWLD-01 | Phase 5 | Planned |
| MWLD-02 | Phase 5 | Planned |
| MWLD-03 | Phase 5 | Planned |
| MWLD-04 | Phase 5 | Planned |
| MWLD-05 | Phase 5 | Planned |
| MWLD-06 | Phase 5 | Planned |
| MWLD-07 | Phase 5 | Planned |
**Coverage:**
- v1 requirements: 68 total (complete)
- Phase 5 requirements: 7 total (new)
- Mapped to phases: 75
- Unmapped: 0
---
*Requirements defined: 2026-03-29*
*Last updated: 2026-03-29 after Phase 5 planning (75 total requirements)*