Skip to content

Distribution

Distribution is the feature set that gets a show.fm-hosted feed listed on external podcast directories and keeps those listings observable. It spans four surfaces:

SurfaceWhat it doesCode
Platform catalogData-driven registry of 20 directories with per-platform submission copy, tiers, and verification metadatasrc/lib/constants/distribution-platforms.ts
Listings & monitoringPer-(podcast, platform) lifecycle rows, submission endpoints, readiness checks, ownership verification, the hourly detection cron, and publish-time freshness pingssrc/api/routes/distribution/index.ts, workers/distribution-monitor/, src/lib/utils/ping-directories.ts
Smart linksThe public listen.podcasterplus.com pages (podcast landing + per-episode) with platform badges, oEmbed discovery, and SEO metasrc/routes/(listen)/
Settings UIThe Distribution settings page that consumes all of the abovesrc/routes/(app)/p/[slug]/settings/distribution/

Distribution only applies to show.fm-hosted feeds: the settings page redirects externally hosted podcasts back to General settings (hosting_type === 'external' check in +page.server.ts), the monitor scans only hosting_type = 'podcasterplus' rows, and listen pages 404 for external shows.

Architecture

Two distinct paths produce the distribution.listed automation trigger:

  • App actions (pasting a listing URL, confirming a fuzzy Spotify detection, a successful one-click Podcast Index submission) emit through emitAutomationEvent() in src/lib/automation/events.ts, which matches enabled rules in-process and enqueues execute_rule messages directly onto automation-executions.
  • The monitor worker sends a type: 'trigger' message to the automation-events queue; the automation-scheduler consumer owns rule matching there and dedupes with a stable platform-scoped idempotency key, so each rule fires at most once per (rule, podcast, platform).

Internal documentation - Not for public distribution