Our Podcast Workflow: Zola, VDO.Ninja, OBS, and Claude Code
Episode Description
How we record and publish this podcast with a self-hosted static site and a virtual studio: Zola and the simplepod theme for RSS, VDO.Ninja for low-latency WebRTC calls, OBS and Audacity for recording, and a Claude Code skill that transcribes with Whisper and publishes in minutes.
Available on your favorite podcast platform.
In this episode, Cliff and Khem walk through the complete toolchain behind this podcast: self-hosted static site generation, a virtual recording studio built on WebRTC, and an automated publishing workflow. After 53 episodes and six years since our July 2020 start, the process has grown into something we can run end to end in minutes, and we are happy to share the whole recipe.
- Hosting is a static website built with Zola, a Rust static site generator. We ran Hugo with a podcast theme for years and recently switched; both build a large site in fractions of a second, and Zola is a little cleaner for our needs.
- A podcast is fundamentally an RSS feed, much like a blog. Apple, Spotify, and YouTube consume that feed. The work in self-hosting is generating the right RSS tags and the metadata Apple expects.
- simplepod, the Zola theme Cliff wrote for this show. One directory of episodes in, a complete podcast feed out. We built it after running into limits with the more complex Hugo theme.
- Getting listed: register with Apple, Spotify, and YouTube, and the remaining directories generally find you from there.
- The server is a small Linux VPS at about $5 a month, fronted by Caddy for automatic HTTPS.
- Recording with VDO.Ninja: browser-based WebRTC built for podcasting. The server arbitrates the call and then hands off to a direct point-to-point connection, so latency stays as low as it can be.
- The recording trick we like most: VDO.Ninja spawns a headless Chromium instance that joins as another participant, and OBS records that. No desktop audio capture and no hand-mixing of mic and speaker levels, since VDO.Ninja normalizes levels across participants.
- Tips for effective audio in podcasts and video conferencing, the checklist we have collected on our forum over the years: use a headset with a built-in mic or a studio mic rather than a laptop microphone, and prefer wired connections for both network and audio.
- Why latency matters. Even a few hundred milliseconds starts to feel clunky. Cliff's theory is that this is what makes video calls tiring: you spend effort subconsciously working out whether it is your turn to speak.
- Post-processing is light: Audacity pulls the audio out of the OBS recording, we add intro and outro music, and run compression to optimize levels. Good mics mean we rarely need noise filtering.
- Redundant recording. Everything is captured locally, so both of us run OBS, especially with a guest on the call.
- Publishing is a Claude Code skill: it checks prerequisites, scaffolds the episode from a template, transcribes with Whisper in a Docker container, builds the outline and metadata from the transcript, and commits. An rsync script deploys the site in seconds.
- Start with a shared outline. A dozen lines covering topics and order takes most of the stress out of being on a podcast, for hosts and guests alike.
- On the list next: scripting the audio processing to add intro and outro and trim silence, and a video version for YouTube using VDO.Ninja's layout and director controls.
Discuss this episode at our community site.