content/podcast/holds two shows: the archived PowerScripting Podcast (2007–2020, libsyn audio, original hosts) and The PowerShell Podcast (2022→, Podbean audio, Andrew Pla). They are told apart by audio host:mcdn.podbean.com⇒ The PowerShell Podcast. This work touches only The PowerShell Podcast (the 220 modern, Podbean-hosted episodes).- The Podbean RSS feed (
feed.podbean.com/powershellpodcast/feed.xml) is truncated to the 10 most recent items — it can keep the recent tail in sync but can never backfill history. - Episode number is embedded in the existing
podcast_urlfilename (..._episode_220_...) for 217/220 modern files — a reliable local key.
For every modern (Podbean) episode:
author:→Andrew Pla(the byline shown on the page).authors:→ replaceJames PettywithAndrew Pla; insertJordan Hammondwhendate≤ 2023-12-25 (the "Farewell to Jordan" episode); keep all existing guests; dedupe; Andrew first.- James Petty remains the author of his 32 articles — only the podcast mis-attribution is corrected.
Add to each modern episode:
episode:— parsed from thepodcast_urlfilename (217/220; 3 Summit/bar specials set by hand or left blank).guid:— only where the live feed provides it (recent items). Old episodes never re-appear in the feed, so they need no guid.youtube:— theyoutu.beid. 76/220 already carry it in-body; the rest are matched against the YouTube playlist by episode number / title. Missing ⇒ no embed, template falls back to the icon.
Originally scoped as a YouTube/Podbean scrape of episodes that had rolled off the 10-item feed window. Not needed: the live feed turned out to carry the full archive (see ADR 0003 update), so the first WS4 run generated the entire gap (eps 221–234) directly. No scrape was performed.
- Runtime: Node +
node-fetch, matchingdiscourse-sync.yml/migrate-posts.cjs. - Trigger: scheduled GitHub Action (weekly, Tuesday — after the Monday
release),
workflow_dispatchenabled. Auto-commits to the branch; Netlify rebuilds on push. Must run at least every ~10 weeks or feed items roll off. - Implemented:
.github/scripts/sync-podcast-feed.js(add-only) +.github/workflows/podcast-sync.yml(weekly Tuesday,workflow_dispatch, auto-commit). Runnode .github/scripts/sync-podcast-feed.js --dry-runto preview. - Per feed item:
- Match existing files by enclosure URL, else
guid, elseepisodenumber → skip if present. (All existing files carrypodcast_url; none carriedguid, so the enclosure URL is the universal key.) - Filename
YYYY-MM-DD-<slug>.md, date frompubDate,aliases: /YYYY/MM/<slug>/(matches migrated convention). author: Andrew Pla; guests extracted conservatively (high-confidence only, never remove) — bio-section +with <Name>title patterns ported fromscripts/update-podcast-authors.py.podcast_url= enclosure;episode= number parsed from the enclosure filename (the repo convention —itunes:episoderuns one ahead, see ADR 0003);guid;youtube=youtu.beid from the notes.durationwas omitted to keep the synced frontmatter identical to the existing files (no episode currently carries it).- Body:
content:encodedHTML → markdown, strip recurring boilerplate (Andrew's links, PDQ Discord, Summit promo, redundant YouTube line) via a maintained strip-list; keep episode-specific resource links.
- Match existing files by enclosure URL, else
podcast/list.html&_default/single.html: render the YouTube thumbnail (https://img.youtube.com/vi/<id>/maxresdefault.jpg) hotlinked, falling back to the existing purple icon when noyoutubeid.- Single page: click-to-load YouTube embed facade (thumbnail poster → iframe on click) alongside the existing audio player.
Scaffold profiles with tools/new-author.ps1 so the rewritten bylines resolve to
real bio cards instead of bare taxonomy pages (per ADR 0002):
content/authors/andrew-pla/_index.md— host. Tagline + bio, links (e.g.andrewpla.tech/links), avatar.content/authors/jordan-hammond/_index.md— early co-host.
Slugs must match Hugo's slug of the exact authors: string (Andrew Pla →
andrew-pla, Jordan Hammond → jordan-hammond); new-author.ps1 enforces this.
The truncated-feed constraint and the incremental-sync-vs-backfill split are
captured in ADR 0003. The two-podcast
distinction is in CONTEXT.md.