- Context
- Family-facing learning tools needed to work on a toddler’s device without surveillance, accounts, or CDN dependency—and still feel polished. Audio and content had to be generated carefully; API keys could never ship in the client. Constraint: offline-first where possible; large touch targets; graceful degradation if a clip is missing.
- Intervention
-
Shipped two static, tracker-free apps and an AI-assisted delivery loop with explicit QA gates.
Phase 1 — Kaczusia content & modes
Built a static web app with a yellow rubber-duck guide. Letters mode: letter + word + rhyme across all 32 Polish letters (incl. Ą Ć Ę Ł Ń Ó Ś Ź Ż). Speech sounds MVP for sz, cz, r: Hear → Syllables → Words. Content driven by JSON for easy edits.
Phase 2 — Offline AI TTS
Generated all audio with AI text-to-speech (ElevenLabs multilingual v2) via offline scripts so the API key never entered the client. Added a graceful fallback chime if a clip is missing.
Phase 3 — Klawiatura + AI delivery QA
Built Klawiatura dźwięków: press a key or big on-screen button for a soft Web Audio sound + animation; works offline after load; runs on iPad Safari and Mac; served over LAN or Cloudflare tunnel; addable to the iPad home screen. Both products were built with AI coding agents and checked by a dedicated AI QA agent (server, data, audio, UI, security) with pass/fail reports.
- Risks & how they were handled
-
- API key in client → offline TTS only; key stays in local scripts.
- Missing audio on device → fallback chime; content still usable.
- AI coding regressions → AI QA agent with explicit pass/fail suites before ship.
- What I'd do differently
-
- Publish a short “how audio was generated” note next to the app for parent trust.
- Expand speech MVP coverage only after a small user feedback loop on sz/cz/r.
- Outcome
- Before: ideas stuck as sketches without a privacy-safe delivery path—recording a full Polish voice-over set by hand (letter + word + rhyme for each letter, plus speech-therapy clips) would take on the order of roughly half a day to a full day of mic time and editing (est.). After: two shippable static apps with no ads, trackers, analytics, or CDN; Kaczusia covers all 32 Polish letters and a speech MVP for 3 targets (sz, cz, r) across Hear → Syllables → Words; the full voice-over set is produced in roughly one offline TTS script run (ElevenLabs multilingual v2; API key never in the client) with a fallback chime; Klawiatura synthesizes sound in-browser (Web Audio) and works offline after load on iPad Safari/Mac; delivery gated by an AI QA agent with pass/fail reports across server, data, audio, UI, and security checks.
System map
Letters & sounds content
Offline AI TTS
key stays local
Kaczusia content
32 Polish letters
Klawiatura soundboard
Web Audio
AI QA gate
pass / fail
Ships tracker-free learning apps
Plays voice-over without a client API key
Blocks ship on AI QA fail
What shipped
- Kaczusia Letters and speech sounds across the Polish alphabet — JSON-driven, no ads or trackers.
- Klawiatura dźwięków Soundboard that works offline after load — no ads or trackers.
- Offline TTS + AI QA Voice-over generated with the API key out of the client; delivery gated by pass/fail QA.
Stack HTML/CSS/JS JSON ElevenLabs TTS Web Audio AI coding AI QA