From 5f25670535b1f35641a7563e09139cfe9d17dfcd Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Sun, 29 Mar 2026 23:59:57 +0200 Subject: [PATCH] docs: update README with 16 levels, multi-forest, Docker, repo URL --- README.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6302f2b..cb79836 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ The child keeps practicing voluntarily because they want to see what appears nex - No visible scores, timers, or error counters — progress shown only through the growing forest - Parent dashboard (Ctrl+Shift+E + access code) with statistics, export/import, and settings - Audio feedback (key sounds, rewards) and optional speech output via Web Speech API +- Multi-forest pagination — as the forest fills up, new pages are created with arrow navigation between them - Offline-capable with IndexedDB storage (images cached as blobs) - Watercolor pastel art style with gentle animations @@ -43,8 +44,8 @@ The child keeps practicing voluntarily because they want to see what appears nex ## Getting Started ```bash -git clone -cd zauberwald +git clone https://codeberg.org/gurix/Zauberwald.git +cd Zauberwald npm install cp public/config.example.json public/config.json # Edit public/config.json and add your Gemini API key @@ -89,11 +90,11 @@ scripts/ ## How It Works -The child picks a companion character (a fairy, a unicorn, a fox, or an owl) and starts a level. Each level introduces new keys on the home row, with levels 1–6 available in the current version. Lessons are designed to complete in under 5 minutes. +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. The child is motivated to continue because they want to see what appears next in their forest — the reward is discovery, not a score. +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. ## Configuration @@ -112,6 +113,8 @@ Notes: ## Deployment +### Static Build + ```bash npm run build # Serve the dist/ directory with any static file server @@ -123,6 +126,15 @@ For a VPS preview of the production build: npm run preview # serves on 0.0.0.0:4173 ``` +### Docker + +```bash +docker build -t zauberwald . +docker run -v /path/to/config.json:/app/dist/config.json:ro -p 4173:4173 zauberwald +``` + +Mount your `config.json` with the Gemini API key into the container. The app is then available at `http://localhost:4173`. + 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