A magical typing tutor that teaches touch typing through an AI-generated enchanted forest.
Zauberwald is a web application that teaches a 7-year-old child touch typing using the QWERTZ keyboard layout. It combines structured typing exercises with a dynamically growing AI-generated forest world. Fixed lesson structure, surprising rewards — curiosity over performance pressure.
The child keeps practicing voluntarily because they want to see what appears next in the forest — not because of points or stars.
<!--  -->
## Features
- 10-finger touch typing with QWERTZ (DE/CH) on-screen keyboard with color-coded finger zones
- 3-phase micro-lessons: Discover, Practice, Build Words (90–120 seconds each)
- AI-generated forest rewards (Gemini API) — new forest elements appear after each completed lesson
The child picks a companion character (a fairy, a unicorn, a fox, or an owl) and starts a level. There are 16 levels covering the entire keyboard — from the home row through the upper and lower rows to special characters. Lessons are designed to complete in under 5 minutes.
Each micro-lesson has three phases. In the Discover phase, new keys light up on the on-screen keyboard so the child sees which finger to use. In the Practice phase, single letters appear one at a time with adaptive timing — the interval adjusts based on the child's speed, always staying within comfortable bounds. In the Build Words phase, the child types short words using only the keys learned so far. Errors are invisible: a wrong key press does nothing, while the correct key pulses gently.
After completing a lesson, the forest grows. The app generates a new forest element image via the Gemini API (or uses SVG fallbacks when offline or when no API key is configured). The image is cached permanently in IndexedDB. Each forest page holds up to 12 elements — when it fills up, a new page is created. The child can navigate between forest pages using arrow buttons. The child is motivated to continue because they want to see what appears next in their forest — the reward is discovery, not a score.
The dev server binds to `0.0.0.0` by default, making it accessible over the network without additional configuration. No HTTPS is required for local or private use.
## Contributing
Contributions are welcome. Please open an issue first to discuss what you would like to change.
## License
This project is not yet licensed. Please contact the author for usage terms.