--- phase: 04-polish-audio plan: 04 type: execute wave: 2 depends_on: ["04-01", "04-02", "04-03"] files_modified: - src/ui/screens.ts - src/forest/reward.ts - src/forest/scene.ts - src/app.ts autonomous: false requirements: [PLSH-01, PLSH-02, PLSH-03, PLSH-04, PLSH-05, AUDI-01, AUDI-02, AUDI-03, AUDI-04, AUDI-05, PRNT-05, PRNT-06, PRNT-07] must_haves: truths: - "Richtiger Tastendruck in lesson spielt kurzen Ton" - "Belohnungs-Screen spielt aufsteigende Tonfolge" - "Neues Waldelement in Forest spielt Glitzer-Sound" - "Companion-Texte werden vorgelesen wenn speechEnabled=true" - "Gesamte App funktioniert fehlerfrei als zusammenhaengendes Erlebnis" artifacts: - path: "src/ui/screens.ts" provides: "playCorrectSound() call on correct keypress" contains: "playCorrectSound" - path: "src/forest/reward.ts" provides: "playRewardSound() + speakText() calls" contains: "playRewardSound" - path: "src/forest/scene.ts" provides: "playForestElementSound() on new element" contains: "playForestElementSound" key_links: - from: "src/ui/screens.ts" to: "src/audio/sounds.ts" via: "import + call in correct keypress handler" pattern: "import.*playCorrectSound" - from: "src/forest/reward.ts" to: "src/audio/sounds.ts" via: "import + call in reward init" pattern: "import.*playRewardSound" - from: "src/forest/scene.ts" to: "src/audio/sounds.ts" via: "import + call on element appear" pattern: "import.*playForestElementSound" - from: "src/forest/reward.ts" to: "src/audio/speech.ts" via: "import + speakText for companion comment" pattern: "import.*speakText" --- Wire audio into all touch points and verify the complete Phase 4 experience end-to-end. Purpose: Connect the audio system (Plan 01), animations (Plan 02), and export/import (Plan 03) into a cohesive experience. Human verification confirms everything works together. Output: Fully wired audio in lesson/reward/forest, human-verified complete app. @$HOME/.claude/get-shit-done/workflows/execute-plan.md @$HOME/.claude/get-shit-done/templates/summary.md @.planning/PROJECT.md @.planning/ROADMAP.md @.planning/phases/04-polish-audio/04-CONTEXT.md @.planning/phases/04-polish-audio/04-01-SUMMARY.md @.planning/phases/04-polish-audio/04-02-SUMMARY.md @.planning/phases/04-polish-audio/04-03-SUMMARY.md @src/ui/screens.ts @src/forest/reward.ts @src/forest/scene.ts @src/app.ts @src/audio/sounds.ts @src/audio/speech.ts Task 1: Wire audio + speech into lesson, reward, forest, and app src/ui/screens.ts, src/forest/reward.ts, src/forest/scene.ts, src/app.ts src/ui/screens.ts, src/forest/reward.ts, src/forest/scene.ts, src/app.ts, src/audio/sounds.ts, src/audio/speech.ts 1. In `src/ui/screens.ts` (per AUDI-01): - Import `playCorrectSound` from `../audio/sounds` - In the keydown handler where `result.correct` is true (two locations: letter mode ~line 214, word mode ~line 289), add `playCorrectSound()` call. Fire-and-forget (no await needed, sound functions handle errors internally). 2. In `src/forest/reward.ts` (per AUDI-02, AUDI-05): - Import `playRewardSound` from `../audio/sounds` - Import `speakText` from `../audio/speech` - In `initRewardScreen` (or wherever the reward is displayed), call `playRewardSound()` when the reward image/content appears. - After companion comment text is set, call `speakText(commentText)` to read it aloud. 3. In `src/forest/scene.ts` (per AUDI-03): - Import `playForestElementSound` from `../audio/sounds` - When a new forest element is rendered/appears (the element with `forest-element-appear` animation), call `playForestElementSound()`. 4. In `src/app.ts` (per AUDI-05): - Import `speakText` from `../audio/speech` - Where the companion greeting text is displayed on the forest screen, call `speakText(greetingText)` to read it aloud. All audio calls are fire-and-forget. The sound/speech modules internally check settings and handle errors. No try/catch needed at call sites. cd /home/dev/workspace/zauberwald && npx tsc --noEmit 2>&1 | head -20 && grep -c "playCorrectSound\|playRewardSound\|playForestElementSound\|speakText" src/ui/screens.ts src/forest/reward.ts src/forest/scene.ts src/app.ts - screens.ts imports and calls playCorrectSound on correct keypress - reward.ts imports and calls playRewardSound when reward displays - reward.ts imports and calls speakText for companion comment - scene.ts imports and calls playForestElementSound on new element - app.ts imports and calls speakText for greeting - TypeScript compiles without errors All audio touch points wired: correct keystroke sound, reward melody, forest element glitter, speech for companion texts Task 2: End-to-end verification of Phase 4 none Human verifies the complete Phase 4 experience by testing all audio, animation, responsive, error handling, and export/import/reset features in the browser. Complete Phase 4 polish: audio system (3 sounds + speech), enhanced animations (leaf-fall, stardust, companion float), responsive layout, error handler, export/import/reset. Start the dev server: `npm run dev` Open http://<vps-ip>:5173 in browser. **1. Audio (AUDI-01..03):** - Start a lesson, type correct letters -- hear short tone on each correct press - Complete a lesson -- hear ascending reward melody on reward screen - Go back to forest -- hear glitter sound when new element appears - If no sound: check mute button state **2. Mute Button (AUDI-04):** - Click mute button (bottom-right) -- icon changes to muted - Type correct letters -- no sound - Reload page -- mute state preserved - Click again -- unmuted, sounds resume **3. Speech (AUDI-05):** - Enable speech in parent area settings (if toggle exists) or check if companion texts are read aloud - Greeting on forest screen should be spoken in German **4. Animations (PLSH-01..03):** - Falling letters sway side-to-side like leaves (not just float up/down) - Correct keypress shows sparkle/stardust particles - Companion avatar gently bobs up and down **5. Responsive (PLSH-04):** - Resize browser to < 700px width -- keyboard shrinks, fonts scale, grid adjusts **6. Error Handler (PLSH-05):** - Open console, run: `throw new Error('test')` -- child-friendly overlay appears - Click "Nochmal versuchen" -- page reloads **7. Export/Import/Reset (PRNT-05..07):** - Open parent area (Ctrl+Shift+E, code 1234) - Click "Fortschritt exportieren" -- JSON file downloads - Click "Fortschritt importieren" -- file picker opens, select the exported file, confirm - Click "Alles zuruecksetzen" -- two confirmations, then app resets to welcome screen **8. No console errors:** - Play through a complete lesson cycle with console open -- no unhandled errors Human confirms all 8 verification areas pass All Phase 4 features verified: audio plays at correct moments, mute persists, animations smooth, responsive works, error handler catches exceptions, export/import/reset functional Type "approved" or describe issues to fix - TypeScript compiles: `npx tsc --noEmit` - Linting passes: `npm run lint` - All audio imports present in screens.ts, reward.ts, scene.ts, app.ts - Human verifies complete flow App is visuell und auditiv angenehm, alle Phase 4 requirements met, bereit zum Testen mit dem Kind. After completion, create `.planning/phases/04-polish-audio/04-04-SUMMARY.md`