Inspiration
We save far more than we ever read: articles, newsletters, PDFs, notes. Text-to-speech apps already exist, but they all feel like utilities. You paste text in, a flat voice reads it out, and nothing stays with you afterward. We wanted listening to feel like collecting. What if every piece of text you cared about became something you could hold, like a CD you pressed yourself and put on your own shelf?
What it does
Shelfo turns any text into an audiobook and lets you make each one your own.
- Bring anything in. Paste a link (Shelfo pulls out the article), paste text, import a PDF, scan a page with OCR, share from another app, or write your own book with chapters in the built-in editor.
- Pick the voice. Ten natural voices run entirely on your iPhone, and you can hear every one of them before choosing. Or read the book yourself: record it in your own voice and Shelfo transcribes it on-device, so the text follows along as you play.
- Design the disc. Every audiobook is a CD. Use your own photo or search for a cover, then print it on one of ten real sleeve finishes: silk, velvet, linen, canvas, washi, laid, rag, pearl, frost or gloss. Add a line of text on top, and drag, resize and recolor it however you like.
- Build your shelf. Choose how your shelf is made (plank, oak, niche, rail, floating and more) and place each book exactly where you want it. Gaps stay where you leave them.
- Listen and keep what matters. Use the player with chapters and a mini player on every tab. Highlight lines and add notes, and find them all again in one place.
- Keep it forever. Pro backs up your whole shelf, including your own recordings, so a new phone doesn't mean starting over.
Free users get two books and one voice. Pro unlocks more room, all ten voices and the backup.
How we built it
- Flutter for the iOS app, with native Swift channels for PDF import, OCR, the share extension, audio recording and Apple Speech transcription.
- On-device TTS with the Supertonic model through ONNX Runtime. The model downloads once, then every book is synthesized locally. No text goes to a TTS server.
- SQLite as the local source of truth, so the app works fully offline.
- Supabase for Sign in with Apple, shelf metadata and listening stats, all behind row-level security.
- Cloudflare Workers + R2 for covers, book text and recordings. Every request is scoped per user by verifying the Supabase token, and uploads stream straight through instead of being held in memory.
- RevenueCat for subscriptions, the paywall and restoring purchases.
- The disc finishes are real relief textures. A phone can't light a height field every frame, so we lit each one offline and baked it into a seamless tile that's drawn as an overlay. Decorations are a few bytes of JSON on the book, and the original cover photo is never modified.
Challenges we ran into
- Making recordings safe. A recording of your voice is the only thing in the app that can't be recreated. We had to rethink a lot of code that quietly threw it away: edits that lost track of the file, cleanup that deleted it after a voice change, backups that skipped it. It now has a permanent identity, survives edits and gets backed up.
- Recording size. Our first recordings were about 37 MB for forty minutes because the export re-encoded audio to stereo at a high bitrate. Switching to a passthrough export and 32 kbps mono AAC brought that down to roughly 9 MB (our estimate, not yet measured on a device).
- Respecting people's data plans. Right after someone buys Pro, their whole shelf wants to sync at once, and recordings can be 100 MB+. Small items sync right away, but we ask before sending recordings over the network.
- A shelf that doesn't reflow. We wanted books to have a place, not a rank. We encoded each spot (case, board, slot) as a single sortable integer, so we needed no schema migration and positions stay stable across different phone sizes.
- Getting the paywall honest. We rewrote it several times so it only sells what Pro actually delivers, and so every voice can be heard before you pay.
Accomplishments that we're proud of
- Speech is synthesized fully on-device, with no per-minute cost to us and no text sent to a TTS provider.
- The customization feels physical rather than like a settings screen: ten sleeve finishes, freeform type on the disc and six shelf styles.
- You can make an audiobook in your own voice, with a synced transcript.
- The free tier is genuinely usable, and a subscription adds room and permanence instead of locking basic features.
What we learned
- Personalization is what turns a utility into something people come back to. Nobody gets attached to a text-to-speech queue, but people get attached to a shelf they designed.
- Anything the user can't recreate deserves more engineering care than anything else in the app.
- On-device ML is ready for real products: it's fast enough, it keeps content private, and it changes the economics of a subscription.
- Clear, honest paywall copy matters as much as the pricing.
What's next for Shelfo: Text to Audiobook
- More voices, plus control over speed and style per book
- More sleeve finishes and cover layouts, and seasonal shelf themes
- Sharing a finished disc, so friends can see or play what you made
- An Android release (the Flutter codebase is already cross-platform)
- Sending articles to your shelf from Safari and a read-later inbox
Built With
- cloudflare
- flutter
- onnx
- revenuecat
- supabase
Log in or sign up for Devpost to join the conversation.