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:
| Surface | What it does | Code |
|---|---|---|
| Platform catalog | Data-driven registry of 20 directories with per-platform submission copy, tiers, and verification metadata | src/lib/constants/distribution-platforms.ts |
| Listings & monitoring | Per-(podcast, platform) lifecycle rows, submission endpoints, readiness checks, ownership verification, the hourly detection cron, and publish-time freshness pings | src/api/routes/distribution/index.ts, workers/distribution-monitor/, src/lib/utils/ping-directories.ts |
| Smart links | The public listen.podcasterplus.com pages (podcast landing + per-episode) with platform badges, oEmbed discovery, and SEO meta | src/routes/(listen)/ |
| Settings UI | The Distribution settings page that consumes all of the above | src/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()insrc/lib/automation/events.ts, which matches enabled rules in-process and enqueuesexecute_rulemessages directly ontoautomation-executions. - The monitor worker sends a
type: 'trigger'message to theautomation-eventsqueue; 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).
Related pages
- Distribution API route stub
- Distribution Monitor worker stub
- RSS Feed worker (renders the
podcast:txtverification tags and the owner-email visibility window) - Public API & Embed worker (episode paging + oEmbed endpoint used by the listen pages)