# 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), 8–12 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": 3–4 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 1–6 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 2–3 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 1–6
- [x] **GAPI-05**: Fallback-Bilder: 5–10 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 7–15 (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)*
