Releases: magicpages/pod
Releases · magicpages/pod
Release list
Pod v1.0.4
Patch Changes
- d0a9da4: Ship a full, upload-as-is
routes.yamlinstead of the previous "merge these two entries into whatever's already there" partial file. On a fresh Ghost site, publishers can now click a single link on the GitHub Release page, downloadroutes.yaml, and upload it via Settings → Labs → Upload routes.yaml — one file, no merging. The file is Ghost's defaultroutes.yaml(root collection + tag/author taxonomies) plus Pod's two/podcast/rss/and/subscribe/entries. Publishers with existing route customisations merge instead of overwrite; the getting-started doc calls that out.routes.yamlalso ships alongsidepod.zipas a separate release asset viascripts/release.mjsso it can be grabbed without unpacking the theme.
Pod v1.0.3
Patch Changes
- 74a5918: Fix the auto-deploy trigger. The
on: release: publishedtrigger ondeploy.ymldidn't fire because GitHub's anti-loop rule silently drops that event when the release was created byGITHUB_TOKEN(whichscripts/release.mjsdoes viagh release create). Switched toon: workflow_run: workflows: [Release], which is officially blessed for this. The deploy job now guards on whether avX.Y.Ztag matchingpackage.json's current version exists on origin — most Release runs are no-op replays and shouldn't trigger a redeploy. Also addedworkflow_dispatchfor one-off manual kicks.
Pod v1.0.2
Patch Changes
-
91e5691: Two release-plumbing fixes:
- Auto-deploy to the demo. New
.github/workflows/deploy.ymluses the officialTryGhost/action-deploy-theme@v2to upload + activate the theme onpod.magicpages.cowhenever a stable release is published. Requires thePOD_GHOST_ADMIN_API_KEYrepository secret. - Release notes now populate the GitHub Release body.
scripts/release.mjs's CHANGELOG extract regex now matches both## [1.0.0](Keep-a-Changelog, hand-written) and## 1.0.1(Changesets output), so## 1.0.1's section lands in the Release body instead of the "See CHANGELOG.md for details" fallback.
- Auto-deploy to the demo. New
Pod v1.0.1
Release v1.0.1. See CHANGELOG.md for details.
Pod v1.0.0
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|Titlemarkers 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 theshow_post_ctacustom
setting. - Prev / next episode navigation, powered by Ghost's
prev_post/
next_posthelpers. - 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.
- Always shown (URL derived from the RSS feed): Apple Podcasts, Overcast,
- 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 frompod: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|Titlemarkers. content:encodeduses 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 ownpublication-cover.jpgcropped 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 nofeature_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_enabledis 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-hostedchapters.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
tohost.<podcast:socialInteract>— fediverse comment root for the episode
(pod:socialinteract=URL; protocol defaults toactivitypub).
Theme system
- Light / dark / system color-scheme with a header toggle; default set via
thecolor_scheme_defaultcustom 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 inassets/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-labelon the mobile
menu and audio player controls.- Audio scrubber is a proper
role="slider"witharia-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 zipproduces 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
- Bundled fonts (Inter, Source Serif Pro, JetBrains Mono) are all under
SIL OFL 1.1. Per-font attribution recorded in
THIRD-PARTY-NOTICES.md.