-
-
Once upon a time, there was your child
-
A story for whatever tonight brings
-
Read aloud, word by word
-
Or in your own voice
-
Bedtime stories starring your child: one photo, her own picture book
-
Make her story for tonight
-
Read by family or a storyteller
-
Pick the style she loves
-
New words and what they mean
-
Sounds that bring the story to life
-
She decides what happens next
-
Just stories. No ads.
-
Real app screen, no device frame (1179 x 2556): the story player
-
App icon (1024 x 1024)
-
Just talk: tell Dreamy about your day and it builds the story with you
Inspiration
A couple of years ago we moved from Ukraine to Portugal because of the war. Our daughter was born here, and her grandparents stayed far away. She loves books, but different time zones and patchy connections meant her grandparents could almost never read to her. Books in our native language are hard to buy here, and we travel often, so a shelf of books never comes with us.
We started with pre-recorded audio. Then I found ElevenLabs: it could clone a voice, and generative AI was starting to make images, audio and text too. I built a working prototype, but it never became a real product. The pictures and voices still felt like AI slop.
That changed. Images, voices, voice cloning and story writing are finally good enough for something a family wants at bedtime. When I saw Shipaton, I decided to give it a go.
Dreamy does not replace making up stories together. Some nights my daughter and I still invent them ourselves. But some nights I am exhausted, and some nights she wants pictures to help her imagine. Then she lies in bed and tells Dreamy: "I want a story about the dog we met today!" A storyteller's voice asks her what should happen, and we dream it up together. She loves that voice.
What it does
- Your child is the hero. Add a photo (or describe them). Dreamy paints a watercolor portrait and keeps the same face on every page of every story. Pets, toys and a child's own drawings can join as heroes too.
- Tonight's story in a few taps. Pick a place, an adventure and a feeling (scared of the dark, angry days, worried about tomorrow), or type an idea. Or skip the tapping and just talk: Talk with Dreamy is a voice chat with an AI storyteller. It asks what the story should be about and builds it with you and your child.
- Read by someone you love. Pick a storyteller voice, or record a short sample so the story is read in your voice, your partner's or a grandparent's, even when they can't be there.
- As much or as little as you want. Read the text yourself, listen to the narration, or go all in: pictures, narration, sound effects (thunder, rustling leaves, animals) and choices where the child decides what happens next. It feels closer to a film, but it is still a story, in the picture style and voice you picked.
- Read, listen or read together. Word-by-word highlighting and four modes: Dreamy reads, We read, You read, Just listen. In Explore mode a child taps a word to hear it, or taps a thing in the picture to hear its name and a small fact about it: a book with layers.
- Made for the last minutes of the day. Sundown dimming, a dark screen when the phone is face down, kid lock, a nightlight after the story, and sleep sounds with a timer.
- A bedtime habit. A bedtime reminder (on Android, Pro can ask for a "Surprise me" story that is ready before bedtime), story streaks, themed Story Forts, and a printable book PDF of any story.
- Stories in 74 languages. New stories are private by default. No ads.
How I built it
- Kotlin Multiplatform + Compose Multiplatform. I love Kotlin, and Compose Multiplatform finally gives one codebase for the UI while each platform keeps its native parts. One shared module (about 490 Kotlin files in
commonMain) holds the UI and logic for Android and iOS. The iOS app is a thin SwiftUI shell (5 Swift files) around the shared Compose UI. Decompose, Koin, Ktor, SQLDelight, Coil. Platform pieces (Media3 / AVPlayer audio, voice sessions, sensors) sit behindexpect/actual. - RevenueCat through
purchases-kmpfrom shared code: the hosted paywall inside our own layout (the child's portrait behind it, achild_namecustom variable in the title), Customer Center, adefaultand anonboarding_exitoffering, and one "Dreamy AI Pro" entitlement. - Convex backend (workpools, rate limits) runs the generation pipeline:
- Claude Opus 5.5 writes the story and its performance script.
- A character bible built from the photo keeps the hero consistent; Gemini image models paint the cover and pages.
- ElevenLabs
eleven_v4narrates with per-line audio tags; instant voice clones turn a short family recording into a narrator; sound effects and Eleven Music lullaby beds fill in the scene; ElevenLabs Agents (with Claude Haiku 4.5) runs Talk with Dreamy. - fal SAM 3 cuts the tap masks for Explore mode.
- PostHog for analytics and feature kill switches, OneSignal for push, Firebase Crashlytics.
Challenges
- Same child, every page. Keeping one child recognisable across a dozen illustrations and many stories took a character bible plus multi-reference image prompts.
- Narration that sounds performed, not read. I A/B tested story models and narration-tag strategies before picking Claude Opus 5.5 and
eleven_v4audio tags. - Generation takes minutes. So the wait became part of the product: the cover is painted first and the story unfolds on screen while it is made.
- One codebase, two stores. Audio, voice and sensors differ per platform; store policy for a parent-facing app with a storybook look needed an 18+ audience and a grown-ups check before purchases and settings.
What I'm proud of
- One Compose Multiplatform codebase for Android and iOS, including the RevenueCat paywall flow.
- A story with the child's face, their worry of the day and their language, narrated in character, in a few minutes.
What I learned
- The tiny details matter most to kids. A spark that flies into the progress path, a mascot that lip-syncs, a sound when a story choice lands: children remember them, laugh at them and ask for more.
- Personalisation belongs before the paywall. Onboarding builds the child's portrait and story "recipe" first, so the paywall asks for something the parent has already seen.
What's next
- The whole family on one shelf. Grandparents record their voice once, from wherever they live, and every new story can be read by them.
- Stories that remember. Tomorrow's story picks up where tonight's ended: the same dog, the same forest, the friends she made.
- Two languages, one bedtime. Stories that switch between the family's home language and the local one, so children abroad keep both.
- Made with the people who help kids. Routines and story styles shaped with the school psychologists already using Dreamy, for children who need the same hero and the same calm every night.
- From screen to shelf. A favourite story printed as a real hardcover book.
Built With
- claude
- compose-multiplatform
- convex
- decompose
- elevenlabs
- fal.ai
- firebase
- gemini
- jetpack-compose
- koin
- kotlin
- kotlin-multiplatform
- ktor
- livekit
- media3
- next.js
- onesignal
- openai
- posthog
- revenuecat
- sqldelight
- swift
- swiftui
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.