Opemipo Aikomo
đź”’ Private

Fable

An app is a spatial intervention. It’s what happens when you combine fiction-capable minds, visual symbols, screens and a feedback loop.

A million dollar app is a miracle. Up until November 30, 2022, ChatGPT only existed in the minds of the twenty-something people building the app. Five days later, a million people across the world are using it.

When Timi and I started Fable, our goal was to build something magical and successful. Fable hasn’t worked out to be that million dollar app. But it is one of the more important projects I’ve worked on.

Publishing an iOS app

Fable is our first independently published iOS app, and it was surprisingly harder than I expected to get up and running.

To publish Fable in the US, we needed an Apple Developer Account with payouts set up. To get that, we had to incorporate a company, set up a bank account (Every), and then get a D‑U‑N‑S number.

The D-U-N-S was a bit of a hassle, but the bank account was easy (and free). It cost $500 to incorporate on Norebase, and then $1k in yearly tax filings. Add $99/year for the Apple Developer Program.

Architecture

The team comes from a web background, so Fable is built on React Native and Expo. Expo supports over-the-air deployments, allowing us to push updates in real-time and skip the multi-day review process at Apple.

Fable’s generation pipeline is fully asynchronous. When a user submits a document, the GraphQL API accepts the request, creates a database record, and immediately enqueues a job. The actual work happens in the background across three discrete worker stages, each handing off to the next via a Redis queue managed by Asynq.

Design

Fable converts documents to podcasts using a pipeline of LLMs.

1. Content Analysis

In the first stage, the source material is analysed and summarised.

We convert the content into “prep notes” using Gemini 2.5 Pro, and this overview is used in the next step to generate the dialogue.

We also process the information to synthesize structured metadata that guides the conversation e.g. tempo, duration and arc.

2. Dialogue Scripting

We made a deliberate choice to go with a podcast format — two AI hosts discussing the content rather than a single voice reading it word-for-word — because we believe that a conversation, even when artificial, carries more character and perspective.

By increasingly fine-tuning the prompt, we managed to remove a lot of unnaturalness from the generated dialogue. But even with an explicit prompt, we still got the occasional weirdness.

To solve this, we pass the initial generated dialogue through a “cleanup pass” to refine the output.

3. Audio Synthesis

In the last stage, we convert the dialogue script to audio.

For this, we tried both ElevenLabs and Google’s Neural2, and found the difference to be very significant. While Google’s model is cheaper, it lacks the detailed prosody of the former.1

Prosody is the pattern of stress and intonation in a language that distinguishes human conversation from flat, machine-speak. ElevenLabs costs more per character, but what you get in return is a much wider dynamic range. The voices have natural variation in pace, pitch, and emphasis that the Google voices don’t have.

We also spent a lot of time on pacing. Spoken conversation has micro-pauses, turn-taking breath gaps, and longer pauses between topic shifts that don’t exist in the raw script. Instead of converting all the text to voice at once, we break it into chunks and compile the eventual conversation.

Market Reality

Fable sells 100 minutes of audio for $5.99, significantly higher than free alternatives like NotebookLM and ElevenReader. And after many rounds of iteration, we were never able to get the voices to sound as natural as the competition.

That second problem was the real one. Chaining LLMs together isn’t a catch-all solution, and until we have better models, we’re limited.

We tried to pivot to a bookmarking tool. We explored new design directions. We hired a marketing person. None of it landed. Eventually I came to the conclusion that Fable wasn’t worth continuing to sell.

But it was worth making.

We2 shipped an iOS app. I can live with that.

Read the full case study at helloworld.ng/fable.

Or try out Fable at fablepod.com


1 NotebookLM is so good that it’s crazy how bad Google’s TTS model is. They must do some additional processing under the hood.

2 Cheers to Timi for the Fable idea, and Tosin, Sama, Taqib, Fawaz and Bobby for making this with us.


Published on Mar 06, 2026
© 2025
Close