Here is what happens when a parent taps "play" on a bedtime story:
Content — 211 stories are handwritten and stored in the codebase. Each has a `{childName}` placeholder that gets replaced with the child's real name.
Personalization — The story text is filled with the child's name, family members, pet, and cultural context from their profile.
Audio — If pre-generated audio exists (cached in Firebase), it plays instantly. If not, OpenAI TTS generates it in real-time with the selected narrator voice.
Images — Each story has a unique image prompt. OpenAI gpt-image-1 generates cover art that matches the story — no stock photos, no generic teddy bears.
Caching — Audio is cached in IndexedDB locally + Firebase Storage globally. Second plays are instant.
How We Keep It Efficient
Smart caching
Pre-generate, don't live-generate. We generate audio and images once per story, cache them globally. A million users playing the same story uses the same cached file — not a million API calls. Personalized audio (with the child's name) is a Pro feature that generates on-demand and caches per child.
Security & Privacy
We take your family's data seriously. Here is what we do:
While our codebase is private, we believe in transparency. This blog, our security audit, our email throttling guide, and our belief system documentation are all public. We build in the open because we believe parents should know exactly how the platform their children use is built.
Built by Parents, for Parents
We are Prat and Deepti — a small team in Toronto who built My Sleepy Tale for our son Veda. Every decision we make starts with one question: would we want our child to use this?