# 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)*