// writing · 2026-05-10
Why I made a podcast about my own life — and why personal podcasts are about to be a category.
Every morning at 6am a small Cloudflare Worker on my account generates a podcast about my day. Yesterday's commits, today's in‑flight issues, the weather, three news items I'd actually care about, and a one‑liner at the end. Then ElevenLabs reads it in a voice I picked. By the time I'm in the car, Apple Podcasts has already downloaded it. I press play and listen on the way to the gym.
It's a podcast for an audience of one. Mine. There is no other listener. There is no monetisation. There is no growth chart. There is just a fifteen‑minute drive every morning and a calm British voice telling me what I did and what I'm meant to be doing.
I want to argue this is a category, and that the category is going to matter.
Below is a fictional version of my morning brief. Same format, made‑up data — Tuesday, May twelfth. Press play. About a minute and a half.
That voice is one of David's many synthetic narrators. Same script engine that runs the morning brief, only with fictional content so this article doesn't leak anything real.
The setup is unglamorous. A laptop, a few API keys, a shell script, a cron job. Specifically:
~/good-morning/.gh across my repos, yesterday's commits via git log, news from RSS feeds.Total daily cost: about €0.05 in API calls. Total time investment after the initial setup: zero.
Apple Podcasts treats it like any other show. Custom cover art, episode list, native CarPlay integration, queueing, AirPlay to a speaker at home. The app doesn't know — and doesn't care — that the show has one listener and zero subscribers in any directory.

@resvg/resvg-js and uploaded to R2.
Cover art generated locally with @resvg/resvg-js and uploaded to R2 once. Apple Podcasts pulls the show from a private RSS URL with a 192‑bit token I picked at random — same mechanism a Patreon‑only podcast uses, just simpler.
Nothing in this stack is exotic. The trick is the way they fit together.
A skill is a markdown file with frontmatter. The frontmatter describes when the skill should fire. The body tells the agent how to do the thing. Here's a trimmed version of my read-to-me skill — the one that turns any text into audio:
--- name: read-to-me description: Take any text or doc and turn it into a spoken audio piece. Default voice is a calm conversational narrator. Use whenever you say "read this to me", "narrate this doc", "publish this as an episode", or invoke /read-to-me with a file or stdin. --- # read-to-me Generic TTS skill. Take any text → optionally rewrite in a chosen voice → ElevenLabs → play / save / publish. ## Quickstart ```bash # Read a file aloud ~/.claude/skills/read-to-me/narrate.sh \ --file ./post.md --voice narrator --play # Publish as a podcast episode (lands in Apple Podcasts) ~/.claude/skills/read-to-me/narrate.sh \ --file ./post.md --voice narrator --publish "Episode title" ```
That's it. The CLI inside the skill is forty lines of TypeScript calling OpenRouter and ElevenLabs. The structure — markdown, file in ~/.claude/skills/, trigger phrase, playbook — is all you need. The agent reads the markdown, sees the user's request matches the trigger, follows the playbook.
Mine looks like this:
~/.claude/skills/ ├── good-morning/ # daily brief generator ├── read-to-me/ # any text → audio ├── make-podcast/ # two-host dialogue → audio ├── aria-episode/ # public "Conversations with Aria" wrapper ├── email-me/ # transactional email via Resend ├── obsidian-cli/ # vault CRUD from CLI ├── pm-stages/ # GitHub issue stage labels └── ... # ~30 more, all small
The morning brief above is private — it's about my actual calendar and codebases, with a token‑gated URL. But once the pipeline existed for me, building a public show on the same infrastructure was a half‑day's work.
Conversations with Aria is two‑host instead of solo. Aria is the AI agent that runs in my terminal as Claude Code; Brian, also an AI, interviews her about how I work. Same script engine (LLM → text), same TTS (ElevenLabs, two voices), same delivery (R2 + Worker + Apple Podcasts) — just different format and different audience.
What's different between private and public
daily.davidbroza.dev/shows/aria/feed.xml, anyone can subscribe, distinct cover, two‑host format, intentionally interesting on its own.show field on each episode and whether the feed URL has a token in it.If you want to do this for yourself, the parts list is short. Most of it is free or near‑free.
workers.dev subdomain to start. Apple Podcasts doesn't care.podcast://your-domain/feed.xml. That's it.None of this requires my codebase. Each piece — feed RSS, R2 audio host, episode ingest — is two or three small TypeScript files; the longest, the worker, sits well under three hundred lines. Stand it up against your own data sources, point it at your own ElevenLabs and OpenRouter keys, deploy the worker. You'll have your own personal podcast in an afternoon.
Streaming and YouTube made an audience of one feel weird. You never saw the play count of one and didn't write the song yourself. Personal podcasts feel different — partly because the cost of producing one with a real voice is now somewhere between free and a coffee, and partly because the format actually rewards specificity.
A morning brief generated from your calendar, your repos, your news, voiced by someone who sounds like they know what they're talking about — that's not a worse podcast than a generic one. It's actually a much better one for you, and a much worse one for anyone else. Those are the conditions for a category.
What does the category look like in three years? Something like this:
Some of these will be apps. Some will be RSS feeds you build yourself in an afternoon. The technology is here. The behaviour (commute, walk, gym, drive) is already here. The format slots in naturally.
The unsexy reason this works is the hardest part of personal productivity isn't knowing what to do — it's getting the right context into your head at the right time. A podcast does that without a screen, without your hands, without your full attention. While you're already doing something else.
That's the trick. The rest is plumbing.
one more thing
Aria wrote this article too. I gave her the outline, the facts, and the embedded audio links; she handled the prose. Felt only fair to admit it, given the topic. The mockups, the routes, the article and the show all came out of the same conversation.
Note: this essay was written by an AI. The product, the audio, the screenshots and the system are real and shipping every morning — the prose isn't hand-written.
> share: davidbroza.dev/writing/audience-of-one