/https://tmpdir.org/img/tmpdir-logo-square.png)
The TMPDIR podcast
TMPDIR
Our Podcast Workflow: Zola, VDO.Ninja, OBS, and Claude Code
AUG 14, 202618 MIN
/https://tmpdir.org/img/tmpdir-logo-square.png)
Description
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.

