Cindy Zhu.
← all free guides
Building & apps Claude

Build a bedtime story app in your own voice with Claude

Hey, it's Cindy ๐ŸŒฑ This is the full build from the reel: an app that reads bedtime stories out loud in a clone of your own voice, built with Claude and Fish Audio, no coding needed. I made you a working demo you can play with first, then the exact prompt to build your own.
try it now

Play with the finished app ๐ŸŒ™

Before you build anything, here's a live demo so you can feel what you're making. Tap a story, hit play, and it reads aloud. It's the same calm night-time look and player you'll build.

โœฆ Open the live demo →

๐Ÿ”Š In the demo it reads with a stand-in browser voice so you hear it instantly. In the app you build, that voice becomes a clone of your own, that's the whole magic.

the opportunity

Can you actually make money with this? ๐Ÿ’ธ

In my video I said you can make up to $10,000 a month building bedtime story apps. That's the top end, and it's real: people are running actual businesses on exactly this idea. Three I dug up:

  1. Oscar Stories, around $6,000 a month. A two-person team in Vienna built an app that makes personalised bedtime stories with the child as the hero. About 50,000 users and 700+ paying. Starter Story breakdown.
  2. HabitKit, a solo dev's app that grew to $15k a month. One person, one simple app, no team. Proof that a single builder can make an app that genuinely pays. His Indie Hackers post.
  3. Voice Dream Reader, replaced a full salary, then got acquired. A solo founder built a text-to-speech reading app, made enough to support his family within a year, ran it alone for a decade, and sold it. His interview.

two tools

What you're building ๐Ÿ› ๏ธ

An app where you pick or paste a story and it reads it back in your own voice, softly, like you're actually there. Two tools do the work:

๐Ÿ› ๏ธ Claude builds it You describe what you want and it writes the whole thing: the app, the screens, and the Fish Audio connection. You never touch code you don't understand.
๐ŸŽ™๏ธ Fish Audio is your voice You record yourself once, it clones your voice, and every story plays back in it, with the emotion you tag.

the build

Step 1: hand Claude the full brief ๐Ÿ› ๏ธ

You don't need to code. Open Claude Code (that's the one that can actually create the files, install everything, and run the app on your computer, the desktop chat app can only write it out) and paste this whole thing in. It's detailed on purpose, that's what gets you an app that looks good instead of a bare wireframe:

๐Ÿ› ๏ธ Paste this whole prompt into Claude
Build me a complete bedtime story app that reads stories aloud in a clone of my
own voice. I am not a developer, so set everything up for me and walk me through
running it step by step, explaining each part in plain language as you go.

How it should look and work:
- A calming home screen: deep indigo and purple background, soft stars, rounded
  cards, warm gold accents. Show a "tonight's pick" featured story plus a small
  library of story cards, each with cover art, a title and a duration.
- Tapping a story opens a player screen with the cover, the title, a big
  play/pause button, skip back and forward 15 seconds, and a progress bar.
  Highlight the sentence being read as it plays.
- Let me also paste in my own story text and play that.
- Support inline emotion tags in the text like [whisper], [soft] and [excited],
  and pass them through to the voice so the delivery actually changes.

The voice (this is the whole point, so set it up with me):
- The stories must play in MY cloned voice using Fish Audio, not a generic voice.
- First, walk me through setting up Fish Audio: signing up at fish.audio, creating
  an API key, and cloning my own voice from a short recording. Tell me exactly which
  pages to click, then pause so I can paste my API key into the .env file and my
  cloned voice reference_id into the app before we continue.
- Then use the fishaudio Python SDK with the free model s2.1-pro-free for the text to speech,
  reading in that cloned voice.
- IMPORTANT: never put my API key in the web page. Build a tiny local backend
  (Python, FastAPI or Flask) that holds the key, loaded from a .env file, and
  have the page call that backend. Explain why, so I understand the app is safe.
- Until Fish Audio is connected, fall back to the browser's built-in voice, but
  show a clear "Connect Fish Audio to hear it in your own voice" note, so it's
  obvious the real voice is the goal.

Please:
- Give me the full project and the exact terminal commands to install and run it,
  copy and paste ready.
- Include two or three short sample stories so it looks alive on the first run.
- Make it genuinely nice to look at, calm and cosy, not a plain wireframe.
- When it's built, run it and show me it working, then tell me the one or two
  things I need to personalise: my Fish Audio key and my cloned voice ID.
๐ŸŸ The voice is Fish Audio, and it's required. The magic isn't Claude reading in a robot voice, it's your voice. When you paste the prompt, Claude will send you to Fish Audio to make a free account, grab an API key, and clone your voice (that's Step 2 below). Until you connect it, the app plays a stand-in browser voice, the same as the demo.
๐ŸŒฑ Never run code before? That's fine. Let Claude install everything and, if a step confuses you, paste the error or say "explain that like I've never done this." Working through it with Claude is the whole point.

your voice

Step 2: clone your voice with Fish Audio ๐ŸŽ™๏ธ

  1. ๐Ÿ”‘ Make a free account and get your API key. Sign up at fish.audio, open the API keys page, and create a key. Paste it into your .env file, never into the chat.
  2. ๐ŸŽค Record a clean sample and clone it. In Fish Audio, choose Instant Voice Clone and upload a clean recording of you reading (30 seconds to a couple of minutes, quiet room, no music). It clones your voice in seconds.
  3. ๐Ÿ†” Copy your voice ID. Open your cloned voice and copy its reference ID. That's the one line you hand to Claude so the app reads in your voice.
๐ŸŒฑ Fish Audio's free S2.1 Pro model (the model string is s2.1-pro-free) has a free developer window right now (they've extended it before, so check the current status on their site before a big batch). After that, paid plans start at $11 a month, so it stays cheap either way.

the warmth

Step 3: add the emotion ๐Ÿซถ

A bedtime story should sound soft, not flat. You tag the feeling right in the text and Fish Audio reads it that way:

๐Ÿคซ [whisper] for the sleepy ending
๐ŸŒ™ [soft] for the gentle middle

There's a set of core tags (like [excited], [sad], [whisper]) and S2.1 also reads free-form ones like [soft] or [gentle], so you can write almost any feeling in brackets. That's what makes it sound like you're actually tucking them in.


under the hood

The heart of the code ๐Ÿ’ป

Claude writes and explains all of this for you, but here's the core so you can see how little it really is. Your key loads from the .env file, never hard-coded, and model="s2.1-pro-free" is what makes the emotion tags actually fire:

๐Ÿ’ป What Claude wires up for you
import os
from fishaudio import FishAudio

# your key is read from the .env file, never written in the code
client = FishAudio()  # picks up FISH_API_KEY from your environment

story = "[soft] Once upon a time, in a cosy little house... [whisper] and they all slept soundly."

audio = client.tts.convert(
    text=story,
    reference_id="YOUR_CLONED_VOICE_ID",  # your voice
    model="s2.1-pro-free",                        # needed for the emotion tags to work
)

with open("bedtime.mp3", "wb") as f:
    f.write(audio)

go further

3 bonus prompts to run next ๐ŸŽ

Once it works, these turn a nice demo into something you'd actually ship. Same project, same chat.

๐Ÿ“š A grown-up story library. Add a saved library so I can keep lots of stories, tag them by mood and length, and search them. Add a favourites row and a "recently played" shelf.
โœจ Generate a brand-new story. Let me type a child's name and a theme, and write a short, gentle, age-appropriate bedtime story on the spot, then read it in my cloned voice.
๐ŸŒ› A real bedtime routine. Add a sleep timer that fades the volume out at the end, a soft background soundscape option, and a "play tonight's story at 7:30pm" schedule.

the next level

Putting it on the App Store ๐Ÿ“ฑ

What you build here runs on your own computer, which is perfect for using it yourself and for filming. Turning it into a real App Store app that strangers can download is a different beast, and worth knowing before you promise anyone anything:

  • ๐Ÿ“ You need an Apple Developer account ($99 a year) and a Google Play account ($25 once) to publish.
  • ๐Ÿ” A web app has to be wrapped into a real mobile app (tools like Capacitor or Expo) and pass each store's review.
  • โ˜๏ธ Once other people use it, the Fish Audio calls run on your account, so you'll want usage limits, accounts, and a paid plan to cover the audio.
๐Ÿ’ก You don't need any of that to start. Build it for yourself first, use it every night, film it for content, and only take on the store once you actually want other people paying for it. Claude can walk you through that step too when you're ready.

The links ๐Ÿ”—

๐ŸŽฎ The live demo: try it here (the finished look and feel)
๐ŸŽ™ Fish Audio: fish.audio (free account, voice cloning, API keys)
๐Ÿค– Claude: claude.com (use Claude Code so it can build and run the whole thing for you)


The honest part ๐Ÿซถ

This is meant to complement you, never replace you, it's for the nights you genuinely can't be there. And your voice is yours: keep your sample and your API key private in that .env file, and only ever clone a voice you have the right to use, which is your own.
Follow @cindiezhu for more AI tips every single day ๐ŸŒฑ