← Projects

DialASermon

LaunchedDeprecated

A 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.

saastwilioawscdktypescriptreactministrytelephony

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.