news-to-podcast line · scan in, approved episode out

Briefing Line

Generating a podcast is one API call now. Refusing to ship a bad one is the part that took engineering.

status runs weekly · gatedrole designed + built end to end
interactive · click and scroll itlive
A real episode from this morning's news, playable, plus the gate ledger: every episode ever scored, the two it blocked, and the verdicts verbatim.
2 of 3archived episodes the gate blocked on first contact, for turn-length evenness nobody had caught by listening.
8 checksall deterministic, no model in the gate, because a model asked to judge a script says yes.
1 repairgrounded in the gate's complaints, bounded, best attempt wins, thresholds never relax.
4 languageseach with its own marker vocabulary, because an English gate measures nothing in Spanish.
What it solves

The middle of this pipeline is commodity: turning a script into two-host audio is a single API call in 2026, and tools that do it are everywhere. What none of them do is say no. Generated podcasts have a documented sound, symmetric turns, hosts agreeing with each other, every line restating the last one, and the only quality control on offer is listening to the whole thing yourself. The interesting problem was never generation. It was building the instrument that can tell a good episode from a bad one without a person in the loop.

The constraint

The gate had to be deterministic end to end. Asking a model whether a script is good produces yes, and published work shows the obvious speech-quality metrics reward formal speech and punish exactly the fillers and turn-taking that make conversation sound human. So every check is a measurement: coefficient of variation on turn lengths, agreement markers per hundred turns, the rate at which turns introduce something the previous turn did not. The repair loop is grounded for the same reason. Unaided self-correction makes model output worse on average, so the retry prompt carries the gate's specific complaints, two attempts, and the best-scoring version wins even when that is the original.

Who it serves

Anyone producing recurring audio or content from a feed of source material, and anyone who has to trust automation with their voice.

Who it is for

The same rule as everything else here, applied to creative output: generation is cheap, judgment is the product, and nothing ships itself.

How it works
  1. Scan and dedupSix feeds, scored and deduplicated. A run this week read 80 stories and kept ten.
  2. Four agents writeResearcher enriches the stories, architect plans the episode, writer does the dialogue in each host's voice, editor reads it back.
  3. The gate decidesEight deterministic checks against the documented tells. Exit code stops the pipeline, and every failure prints its fix.
  4. One grounded repairA blocked script is edited against the gate's own complaints and re-scored. Best version wins; still failing means a person reads it.
  5. Audio, then a personTwo synthesized hosts, show notes with every source linked, a social post, and an approve or reject link. Nothing publishes itself.
The decision that was not obvious

State lives in files and a data table, never in a waiting process. Every step writes its artifact and is skipped when the artifact exists, so a crash after the paid script step never re-bills it. The approval side has no Wait node at all, because waiting executions get pruned and time out silently; a finished episode parks as a pending row and the decision arrives as its own webhook call. The scheduler is Windows Task Scheduler with missed-start recovery, chosen over a workflow platform on purpose: for five sequential steps that write files, a platform is a runtime to operate, and the checkpoint is a file-exists test.

What I would change if I rebuilt it today

The audio is stitched, one turn at a time, so there is no overlap or interruption between hosts, and better voices cannot fix that. The next real upgrade is a one-pass dialogue model, which generates both speakers jointly. And story ranking still has no notion of whether a vulnerability is actually being exploited; for security news, exploitation status is the editorial signal that beats coverage volume, and it is one public feed away.

Built with
Node Python Gemini Kokoro TTS deterministic gate n8n approval 4 languages