Follow-up to Times Table 400: Vibe-Coding, Round Two
The Idea
Every sleep app I have ever tried wants to fix me with science. Breathing exercises, brainwave frequencies, a subscription. But the most reliable sleep technology ever invented is a lot older than any of that: someone you trust, reading you a story you already know, slowly, while the rain comes down outside.
So that is the concept of my next app: Softly — classic bedtime stories, read aloud in a calm gentle voice, over soft rain or a crackling fireplace, with a sleep timer that fades everything out after you have drifted off. The whole thing is designed to be like your sweet grandmother or mom reading to you by candlelight (with a classic British accent):

Classic Bedtime Stories
Softly ships with eight books: The Wind in the Willows (1908, all twelve chapters, six and a half hours of narration), five Beatrix Potter tales, The Velveteen Rabbit, and a curated handful of drowsy Robert Louis Stevenson poems. All beautifully written, all timeless, all perfect for bedtime.
The Code Was Easy. Vibe Coding The Sound Wasn’t.
If you have read the earlier posts in this series, you know the setup: I am not a programmer, and I build these apps by describing what I want to Anthropic’s Claude Code (the Fable 5 model) and iterating stubbornly until it exists. And you know the recurring lesson: the code is the fast part, and each app has some other part that turns out to be the real work. For the weather app it was the aesthetic personality. For the math app it was the development of the curriculum. For a bedtime app, it is hitting the mark on the sound.
The narration is AI-generated, a soft British voice I auditioned against several candidates and then slowed to a dreamy 85% pace. Auditioning voices for a bedtime story is exactly as pleasant as it sounds, but it is also genuinely a judgment call: one candidate read beautifully but unevenly, and uneven is fatal at 11 PM. The computer cannot tell you which voice would put a child at ease. You have to listen.
The ambient sound was harder. My first rain loop had a faint electrical hum that surfaced every twenty seconds or so, it turned out to be the seam where the loop restarted, and fixing it properly meant learning more about audio filtering and seamless loops than I ever expected to know. And then there were the crickets. I wanted a summer-night crickets option, and I generated attempt after attempt, and every single one sounded like tinny white noise instead of a meadow. After three rounds I cut the feature entirely. Rain and fireplace made the bar; the crickets did not. Shipping is choosing.

Apple Said No
Weather Gnome sailed through review. Times Table 400 got questioned at the border. Softly got flat-out rejected.
The rejection letter cited “Guideline 4.2.2 — Minimum Functionality” and said the app “only includes links, images, or content aggregated from the Internet” and “does not sufficiently differ from a web browsing experience.”
I contemplated this initial rejection several times. Softly has no links. It has no web view. It makes no network requests at all, every word of every book and every minute of audio is bundled into the app. You can use the whole thing in airplane mode. Whatever the reviewer was describing, it was not the app I shipped. After two rounds of App Review being demanding but basically reasonable, this was my first rejection that was simply wrong.
The Counterpunch
Here is where the earlier lesson — App Review is a conversation, not a verdict — paid off, because the temptation is to either despair or fire off an angry reply. We did neither. We did three things, all in one evening.
First, a calm, factual response in the Resolution Center: no links, no web content, no network use, eight narrated books, native audio engine. No indignation, just receipts.
Second — and this is the part I am proud of — instead of only arguing that the app was native enough, we made it more obviously native. The rejection became the excuse to build the feature a bedtime app should have had anyway: full lock-screen playback controls. Play, pause, skip, scrub, the chapter and book title right there on the lock screen with a little moon artwork. Now the phone itself testifies that this is a real audio app.
Third, the rejection mentioned the review was done on an iPad, and the iPad screenshots were the weakest part of the listing. New ones, same evening.
Resubmitted that night.

Approved!
One day later: approved, and Softly is live on the App Store. Free, no ads, no accounts, and — as the review saga established beyond all doubt — it works entirely offline!
Some Thoughts
- A rejection is not always right. Reviewers are humans moving fast. If the facts are on your side, state them plainly and politely, with evidence. Do not despair and do not vent — neither one ships apps.
- Turn the rejection into a feature. The best answer to “this does not feel like a real app” was to make it undeniable. The lock-screen controls were on the wish list anyway; Apple just moved them up the schedule.
- The public domain is a gift. Some of the best bedtime literature in the English language is sitting there, free, waiting to be treated well. (See you in January, Pooh!)
- Every app has its hard part, and it is never the code. Personality, curriculum, and now sound. The pattern is holding: the model writes the code, and the judgment is still your job.
- Round three really is easier. The certificates, the screenshots, the submission ritual — what used to take days of head-scratching is muscle memory and a folder of scripts now.
Softly is on the App Store now! Pick a story, light the fireplace, set the sleep timer, and let Mole and Ratty row you to sleep.