HolyCalm
01
Overview
HolyCalm is a Christian meditation app — guided prayer, scripture-based sleep stories and daily devotionals. It is on the App Store, it takes subscription payments, and I designed and built all of it myself: interface, Swift codebase, backend, audio pipeline, store listing and paywall.
I include it here because it answers a question a portfolio of client work cannot. Enterprise case studies show how I operate inside a team with engineers, researchers and a budget. This one shows what I choose to build when every one of those constraints is removed and the only judge is whether it ships.
112
Audio pieces produced
46
Swift source files
1
Person, end to end
02
Context & Challenge
The Christian meditation category is dominated by Hallow, Abide and Pray.com — well-funded products with studio-recorded talent and large content libraries. Competing on catalogue size or production budget was never realistic. A solo build had to win somewhere else or not enter.
The specific opening was price and friction. The incumbents are expensive and push hard toward annual commitment before the user has felt any value. I set HolyCalm at $2.99 monthly or $19.99 a year, with a free tier of one audio per day — enough to build a genuine habit before anyone is asked to pay.
The harder constraint was content. Meditation apps live or die on audio, and audio normally means voice talent, studio time and a recurring production cost per minute. For one person that economic model does not close.
03
Approach
I solved the content economics with synthesis. All 112 audio pieces are pre-generated through ElevenLabs across eight voices, written and curated by me, then rendered and stored rather than streamed from a TTS call at runtime. Generating ahead of time keeps playback instant and offline-capable, and moves cost from per-listen to one-off.
That decision has a real trade-off and I want to be straight about it: a synthesised voice does not carry the warmth of a recorded human one, and in a category built on intimacy that is a genuine sacrifice. I made it deliberately. A library that exists at 112 pieces beats a library of 12 perfectly-recorded ones, because a meditation app with nothing new to play is a meditation app people delete.
The interface is dark-only — black and gold. Not a stylistic preference but a usage conclusion: the two moments people actually reach for this app are early morning and last thing at night, frequently in a dark room next to a sleeping partner. A light theme would be the wrong tool at both.
The build is Swift 6 and SwiftUI on iOS, SwiftData for local persistence, Supabase for content and storage, AVFoundation for background playback with a sleep timer that fades rather than cuts, and StoreKit 2 for subscriptions. Onboarding asks a goal question up front — the answer shapes what gets surfaced first, so the library feels chosen rather than dumped.
04
Reflection
Shipping alone rearranged my sense of what design decisions cost. In a company, "let's add a tier to the paywall" is a sentence in a meeting. Building it yourself, that sentence is StoreKit configuration, receipt validation, restore-purchase edge cases and a review submission. I have become considerably more careful about which ideas are worth their implementation cost, and considerably more sceptical of design proposals that treat engineering effort as free.
It also gave me first-hand experience of the parts of product work I used to hand off — App Store review, subscription mechanics, ATT consent, notification permission timing. Knowing what actually happens downstream of a design decision has made me better at the upstream ones.
What the app does not have yet is an audience. It is live and it is complete, but distribution is a different discipline from building, and I am still learning it. I would rather state that plainly than dress a launch up as traction — the interesting part of this project is that it exists and works, not that it has numbers I cannot honestly claim.
Next Project