Skip to content

Pod v1.0.0

Choose a tag to compare

@github-actions github-actions released this 12 Jul 12:06

First public release.

Editorial audio home page

  • Hero card with the latest episode: cover art, title, custom excerpt, audio
    player, "Read the full show notes" affordance.
  • Full archive grid below, with tag chips (excluding internal tags) and
    paginated collection.
  • Optional newsletter signup for non-members with Portal-powered submission,
    inline validation and success feedback.
  • Optional Ghost recommendations block, gated on @site.recommendations_enabled.

Episode page

  • Sticky-column layout on wide viewports: cover + host + audio player on the
    left, show notes on the right.
  • Podcast-native audio player (Pod player) with skip ±30s, playback speed
    toggle, waveform scrubber, keyboard-accessible seek.
  • Client-rendered chapter list from pod:chapter=HH:MM:SS|Title markers in
    the post's code injection.
  • End-of-episode "Keep Listening" CTA with the same dynamic subscribe pills
    as the homepage band; can be turned off via the show_post_cta custom
    setting.
  • Prev / next episode navigation, powered by Ghost's prev_post /
    next_post helpers.
  • Comments block honouring @site.comments_enabled.

/subscribe/ landing page

  • One-link-to-rule-them-all page hosted on the publisher's own domain.
  • Full 10-16 platform grid, dynamic per publisher configuration:
    • Always shown (URL derived from the RSS feed): Apple Podcasts, Overcast,
      Pocket Casts, Castro, Podcast Addict, AntennaPod, Podverse, Player FM,
      gPodder, RSS.
    • Conditional (renders only when publisher supplies the show URL via
      theme settings): Spotify, Amazon Music, YouTube Music, iHeartRadio,
      Castbox, Pandora.
  • Copy-RSS-URL card for power users, with clipboard integration.
  • URL patterns validated against Nathan Gathright's podcast platform catalog
    and each platform's own documentation.

Homepage subscribe band + episode CTA

  • Top-5 pills (Apple, Spotify when configured, Overcast, Pocket Casts, RSS)
    plus a "More ways to subscribe →" link routing to /subscribe/.
  • Same partial (partials/subscribe-pills.hbs) used by both surfaces to keep
    the two-tier system in lockstep.

Podcast RSS feed

  • Full iTunes-spec RSS 2.0 at /podcast/rss/.
  • Channel-level: title, description, category, explicit flag, owner, author,
    copyright, cover artwork.
  • Per-episode: audio enclosure (from pod:audio= marker or first <audio>
    in the post body) with byte length from pod:audioLength= marker
    (validators + download-progress UIs want the exact size — falls back to
    length="0" when the marker isn't set), duration, episode / season /
    type, explicit override.
  • Podlove Simple Chapters (PSC) emitted from repeatable
    pod:chapter=HH:MM:SS|Title markers.
  • content:encoded uses a strict <p>-block whitelist so Ghost card
    artefacts (audio player, bookmark cards, buttons, callouts, galleries)
    don't leak into show notes in Apple, Overcast and Pocket Casts.
  • Per-episode iTunes:image at size="xxl" (2000px) — satisfies Apple's
    1400px minimum. Falls back cleanly when a post has no feature image.
  • Theme ships a default cover at assets/img/default-cover.jpg (3000×3000,
    ~360 KB — Ghost's own publication-cover.jpg cropped square and
    re-compressed under Apple's 512 KB recommendation). Used as fallback for
    both channel-level <itunes:image> (when the site cover is still
    Ghost's default placeholder) and per-episode <itunes:image> (when a
    post has no feature_image). Every generated feed carries valid
    artwork out of the box.

Podcasting 2.0 support

Full podcastindex.org namespace coverage, emitted
alongside the iTunes tags:

  • Channel-level (from custom theme settings):
    • <podcast:guid> (publisher-provided UUIDv5), <podcast:medium>podcast
    • <podcast:locked> with owner email
    • <podcast:funding url=... /> for donation/support links — falls back
      to Ghost's built-in tipjar ({site_url}/#/portal/support) when
      @site.donations_enabled is on and no explicit URL is set
    • <podcast:value type="lightning"> + <podcast:valueRecipient> for
      Value 4 Value micro-payments (keysend by default)
  • Per-episode (from pod:* markers in code-injection foot):
    • <podcast:episode> and <podcast:season> — emitted alongside their
      iTunes equivalents so both 2.0 and legacy clients get the values
    • <podcast:chapters> — pointer to a publisher-hosted chapters.json
      (pod:chapters=URL). Emitted alongside PSC so 2.0-aware apps prefer
      the JSON while legacy clients continue to use inline PSC.
    • <podcast:transcript> (repeatable) — VTT/SRT link with MIME + language
      (pod:transcript=URL|text/vtt|en). Rendered by Podverse, Fountain,
      CurioCaster and the Podcast Index website.
    • <podcast:person> (repeatable) — hosts, guests, credits with role,
      href and image URL (pod:person=Name|Role|Href|Img). Role defaults
      to host.
    • <podcast:socialInteract> — fediverse comment root for the episode
      (pod:socialinteract=URL; protocol defaults to activitypub).

Theme system

  • Light / dark / system color-scheme with a header toggle; default set via
    the color_scheme_default custom setting.
  • Site accent driven from @site.accent_color — pill borders, links, focus
    outlines, subscribe-band accent all inherit from a single CSS custom
    property, so a Ghost admin change to the accent color re-skins the site.
  • Two typography surfaces: Inter (sans, UI + display) and Source Serif Pro
    (serif, body copy), with JetBrains Mono for eyebrow labels. Self-hosted
    woff2 in assets/built/.
  • Cover art fallback: gradient tile with waveform bars + episode number when
    a post has no feature image.

Accessibility

  • Skip-to-main-content link at the top of every page.
  • role="main" on the primary content region, aria-label on the mobile
    menu and audio player controls.
  • Audio scrubber is a proper role="slider" with aria-valuemin /
    aria-valuenow / aria-valuemax, and reachable by keyboard.
  • Focus outlines use the theme accent for high-contrast visibility across
    both light and dark schemes.

Internationalization

  • Locale files for English, German, French, Spanish, Ukrainian and Italian.
  • All user-facing UI strings routed through the {{t}} helper.

Build & tooling

  • Vite build (npm run build / npm run dev).
  • Tailwind + PostCSS for styles.
  • npm run zip produces a Ghost-ready release archive including the theme
    templates, built assets, source CSS/JS, locales, README, CHANGELOG,
    CONTRIBUTING, LICENSE, THIRD-PARTY-NOTICES and the SIL OFL font license.
  • gscan-validated against Ghost 6.x.

Third-party licensing