DialASermon
LaunchedDeprecatedA phone line for churches — call a number, hear the latest message. It launched in 2020 with paying congregations on three continents, and I kept rebuilding it for six years.
In spring 2020 every congregation in the world had the same problem at once: the building was closed and the service had to reach people anyway. The answer everyone reached for was streaming video, which works if you have broadband and a device and the confidence to use both.
This was for everyone else. A phone number you call to hear this week's message. No app, no account, no internet — the technology a ninety-year-old already owns and already trusts.
It went further than anything else I have built for myself, and it is finished now. The path is the interesting part.
2020 — it launched
An AWS CDK stack for the storage and the API in front of it: a versioned S3 bucket for raw MP3 uploads, with Lambda and API Gateway wired up. Versioning was deliberate — a church admin re-uploading "this week's sermon" over last week's is the obvious failure, and object versioning makes it recoverable rather than fatal.
Alongside it, a React and Redux dashboard: a login system, a profile edit screen, and the phone number configuration component binding a congregation to its number.
And then it went live, with real congregations paying for it.
By mid-2020 there were seven churches active, each with its own provisioned phone number, across the United States and the United Kingdom — Baptist, Methodist, Anglican and independent. Two ways in: a church could point us at its existing podcast RSS feed and have each new sermon picked up automatically, or upload through the dashboard. Most chose the dashboard; the ones already podcasting chose the feed.
Around it was an actual business. Outreach letters, follow-ups, onboarding sequences, a payment process, invoicing scheduled to begin that July, and a pipeline of dozens more congregations in Canada, Italy and Singapore. My father worked the sales side. I built the thing and configured the numbers.
The lines rang. People called a number and heard their pastor.
The restarts
I started it over three more times and got nowhere — a React scaffold, a React Native project, an Expo project, each abandoned in its first week. None of them came close to what 2020 had already done.
2025 — AudioDrive
Then it became a product, or nearly. AudioDrive was a monorepo SaaS platform for delivering voice messages by phone to churches and nonprofits:
- a marketing site with separate landing pages and sign-up flows for churches and for nonprofits
- a client portal — the customer dashboard, with authentication
- an admin portal for internal administration
- a shared UI package carrying the brand, a deep teal built out into dark, light and bright variants with a full semantic palette on top
The database migrations are where the seriousness shows. Organizations, users, channels, contacts, billing fields, notification settings — and then migrations that refactor those: user contact restructuring, organization access, removing billing fields from channel contacts. That is a schema being lived with rather than designed once.
2026 — the vertical slice
The most recent work is a rebuild against a written specification, scoped tight: sign-up, billing stub, one organization, one purchased number, one uploaded recording, one inbound call that plays it back, and a dashboard showing call metrics.
After five years of half-starts I stopped trying to build the platform. Make one call work end to end, for one church, then widen it.
Why I kept going back
I restarted this idea more times than anything else I have built, because the problem never went away — the people it was for in 2020 were the same people five years later, and they still were not streaming anything.
The hard part was never the code. Provisioning a number and playing a file down a call is a weekend. What it actually took was letters to hundreds of congregations, follow-ups, onboarding, invoicing, and someone free to answer when a pastor could not work out why the recording had not updated. That is a business, and I could not run one properly in the margins of a full-time job.
So it stopped — not because it failed, but because keeping it alive well would have meant choosing it over everything else. Knowing which of your projects deserve that is a slower lesson than it sounds.