feat: automate blog podcast publishing

Closed
RI
1mo ago
+1437-6

Supersedes #879 — rebased onto current main with merge conflicts resolved and richer episode descriptions.

Summary

  • Generate two-voice podcast episodes from eligible English blog posts via AutoContent API (https://api.autocontentapi.com).
  • Expose episodes on matching blog pages with an accessible native audio player, Open Graph audio metadata, and JSON-LD (PodcastEpisode + AudioObject).
  • Publish a site-owned RSS feed at /podcast.xml with valid enclosures, stable GUIDs, artwork, and canonical article links.
  • Make the feed discoverable via a global RSS alternate link and robots.txt sitemap entry.
  • Add GitHub Actions workflow for new posts, daily quota-aware backfill (2 oldest missing), and manual --slug runs.

Description backlinks

Episode descriptions now include:

  • The source article URL
  • Up to 3 related Capgo blog posts (matched by shared tags)
  • Up to 3 Capgo product/docs links (matched by tags/keywords, e.g. /live-update/, /docs/plugins/updater/, /plugins/)

Activation (required before automation runs)

Automation is off by default. Set these in GitHub repository settings:

TypeNamePurpose
VariablePODCAST_AUTOMATION_ENABLEDSet to true to enable workflows
Variable (optional)PODCAST_SITE_URLDefaults to https://capgo.app
SecretAUTOCONTENT_API_KEYAutoContent API bearer token
SecretAUTOCONTENT_PODCAST_SHOW_IDTarget podcast show ID
SecretAUTOCONTENT_PODCAST_VOICE_1First voice ID (integer)
SecretAUTOCONTENT_PODCAST_VOICE_2Second voice ID (integer)

Optional env overrides for local/manual runs: AUTOCONTENT_API_BASE_URL, PODCAST_POLL_INTERVAL_MS, PODCAST_POLL_TIMEOUT_MS.

Workflows

  • .github/workflows/generate-podcast.yml — push on new EN blog posts, daily cron backfill, workflow_dispatch
  • Outrank import workflow also generates one episode per import batch when enabled

Visual proof

Podcast player on a blog post

Validation

bun test scripts/blogs/generate-podcast.test.ts scripts/blogs/podcast-discovery.test.ts
bun run ci:verify:web
Open in Web Open in Cursor 

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.