feat: automate blog podcast publishing
Closed
RI
1mo ago+1264+1264+0123456789012345678901234567890123456789-6-6-0123456789
Summary
- Generate a two-voice episode for each eligible English blog post, then attach it to the configured podcast show with its canonical article link.
- Expose every generated episode directly on matching blog pages with an accessible native audio player, Open Graph audio metadata, and linked structured data.
- Publish the website-owned RSS feed, including valid RSS 2.0 enclosures, stable GUIDs, podcast artwork, and canonical article links.
- Make the feed crawl-discoverable through a global RSS alternate link and the robots.txt sitemap entry.
- Add a serialized workflow for new posts plus a quota-aware daily backfill of the two oldest missing episodes.
Why
The automation now produces an episode and the website becomes its discoverable home. Google-supported Article markup remains the primary markup; PodcastEpisode and AudioObject add accurate semantic context without claiming a podcast rich result.
Visual proof

Visual diff
Generated for /blog/textinput-react-native/.
| Status | Suite | Route | Viewport | Diff (px) |
|---|---|---|---|---|
| changed | web | /blog/textinput-react-native/ | desktop | 7859260 |
| changed | web | /blog/textinput-react-native/ | mobile | 4468700 |
Activation
Set PODCAST_AUTOMATION_ENABLED=true and configure AUTOCONTENT_API_KEY, AUTOCONTENT_PODCAST_SHOW_ID, AUTOCONTENT_PODCAST_VOICE_1, and AUTOCONTENT_PODCAST_VOICE_2 as repository secrets.
Validation
- bun test scripts/blogs/generate-podcast.test.ts scripts/blogs/podcast-discovery.test.ts
- bun run ci:verify:web
- Static fixture check: player, og:audio, JSON-LD graph, and RSS enclosure.