Work / DreamWhisp
DreamWhisp

The Situation
A founder wanted a bedtime story app for parents of children aged 2 to 12. A parent creates a profile for their child and picks a theme. The app writes a new story with the child’s name woven through it, then reads it aloud, highlighting each word as it’s spoken. Paid parents can clone their own voice, so the story is told in Mum’s or Dad’s voice.
The Constraint
AI-written stories for young children had to be safe, calm and the right length for every age, every time. Every story and every narrated minute has a real AI cost, so free use had to be limited in a way users couldn’t get around. Because the app handles children’s details and parents’ voices, it also had to meet Apple’s and Google’s rules for AI apps used by families.
What we did
We built the app and its Supabase backend from the first commit.
Safe stories: stories are written on the server, never on the phone. Each draft is checked before a parent sees it. It has to use the child’s name often enough and stay within the word range for that age, and the prompt rules out anything violent or scary. If a draft fails, the server tries again, up to three times. Lengths are capped by age, because narration is billed per character.
Read-along narration: ElevenLabs narrates every story and returns timings for each word. The reader uses those timings to highlight the text in step with the voice.
Try before signing up: a parent can make a first story as a guest. Saving it turns the guest into a full account with the same ID, so nothing is lost.
Limits that hold: story, child and voice limits are checked on the server and again in the database. Only the server can change a parent’s plan, using purchase events from RevenueCat.
Voice cloning with consent: the parent reads their consent aloud as part of the recording. The raw recording is deleted once the voice is created, and deleting an account removes the cloned voice too.
Family-safe by design: an AI notice before the first story, a “report this story” button, and a parental check before every purchase.
.png)
.png)
.png)
The trade-off
We launched with text and narration only, and no illustrations. Generating artwork for each story reliably would have meant adding a new AI service and its cost, so we left it for later. We also accepted a gap of a few seconds after a trial starts, while the server waits for confirmation from RevenueCat. In that window a parent can make a story before their plan shows as updated. Making them wait would have harmed the purchase moment for a very small risk.
Outcome
| Metric | Value | Source | Date |
|---|---|---|---|
| First commit to App Store release | 16 weeks | Repository and App Store records | 6 Apr to 27 Jul 2026 |
| Live on | App Store and Google Play | Store listings | Oct 2026 |
| Story themes | 12, plus “Surprise me” | App source | Oct 2026 |
| Ages served, with length set per age | 2 to 12 | App source | Oct 2026 |
| Server functions | 8 | Backend source | Oct 2026 |
| Automated test files | 52 | Repository | Oct 2026 |
What we would do differently
We would settle the free plan before writing any code. It changed three times: three stories a month, then three in total at one a day, then one story ever. Each change touched the app, the server and the paywall copy, and the project docs fell behind the code. Deciding up front would have saved several rounds of rework.
More work
See all work →Ready when the work has to be right the first time.
A 30-minute scoping call with a senior engineer, designer or growth lead. You will leave with a written view of scope, risks and a realistic timeline, whether or not you hire us.
12 years40+ shipped products6 industries
Karachi and Sharjah
.png)
.png)