Private site
A podcast I record, edit and host myself: three microphones into a mixer, a pipeline that joins studio audio to camera video without an editor, and a private site built to hold the episodes.
From microphone to site
Capture
3× Fifine AM8
Record
RØDECaster Pro
Sync
Python · ffmpeg
cron, every 15 minutes
Host
Next.js 14 · Postgres
Docker, behind Cloudflare
A problem worth solving
The camera and the mixer each record on their own clock, so every episode comes out as a video and a better-sounding audio file that are off by some number of seconds. Fixing that by hand means scrubbing a timeline for every episode.
The pipeline watches an inbox folder. Once the files stop changing, it compares the camera's own microphone with the mixer's recording to find how far apart they started, shifts the audio by that amount, and writes one MP4 with the mixer's sound. Compatible video is copied, not re-encoded, so there is no quality loss and a 200-second clip takes about six seconds.
When it can't be confident, say the camera mic was off or the wrong files were paired, it
still writes the file but names it CHECK-SYNC so a bad guess never ships
quietly. Against test media with a known offset it landed within about ten milliseconds.
The site
There is no sign-up page: accounts are issued by hand. Behind the login is a Next.js app with a per-request nonce Content-Security-Policy, CSRF protection, rate limiting keyed to the client address Cloudflare reports rather than one a caller can spoof, and an audit log of who did what.
A written security audit found sixteen issues; fifteen are fixed. Playing episodes back to viewers is the part still being built.