Skip to content

feat: add YouTube episode embeds, mini-player, and synchronized player controls - #2289

Open
w3cj wants to merge 3 commits into
mainfrom
feat/youtube-episode-embeds
Open

w3cj wants to merge 3 commits into
mainfrom
feat/youtube-episode-embeds

Conversation

@w3cj

@w3cj w3cj commented Oct 7, 2026

Copy link
Copy Markdown
Member
  • Youtube embeds on home page list of recent episodes
  • Youtube embeds on every page of /shows
  • Youtube embed on individual /show/ page
  • Miniplayer shows at bottom right when scrolling embed out of view
    • Navigating away from a page where video play started, keeps episode playing mini player in bottom right
  • Seek / play activity saved to local storage so you can resume an episode
  • Bottom play bar controls and stays in sync with currently playing video

@vercel

vercel Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
syntax-website Ready Ready Preview Oct 7, 2026 10:45pm UTC

Request Review

…ine handling

- Replace per-embed scroll listeners and intervals with a shared
  IntersectionObserver and a single playback ticker
- Keep the mini-player mounted (hidden) to avoid iframe reloads; on list
  pages it keeps playing until the card is played directly
- Add video/audio preference toggle (default video, audio when offline)
- Track audio and video positions separately; route audio-timeline
  timestamps (show notes, transcript, ?t=) to video only when durations match
- Throttle position saves, sync player with youtube_player via store
  subscription, type the media-chrome media swap
- Mini-player follows the bottom player height; layout fixes scoped to
  video cards; dedupe show header with a snippet
- Move store tests to src/state and add media_timeline tests

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@codecov

codecov Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 55.83kB (0.67%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
website-client-esm 2.32MB 23.49kB (1.02%) ⬆️
website-server-esm 6.02MB 32.34kB (0.54%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: website-server-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
chunks/Icon.js 1.32kB 35.84kB 3.83%
chunks/player.js 23.81kB 32.7kB 267.71% ⚠️
_app/immutable/assets/_layout.*.css 12 bytes 12.24kB 0.1%
_app/immutable/assets/_layout.*.css 2.73kB 14.09kB 23.97% ⚠️
entries/pages/(site)/show/_show_number_/_slug_/_layout.svelte.js 1.43kB 11.91kB 13.69% ⚠️
entries/pages/(site)/show/_show_number_/_slug_/transcript/_page.svelte.js -222 bytes 8.09kB -2.67%
chunks/ShowCard.js 820 bytes 6.88kB 13.53% ⚠️
entries/pages/(site)/_page.svelte.js 25 bytes 5.53kB 0.45%
_app/immutable/assets/ShowCard.*.css 869 bytes 4.3kB 25.34% ⚠️
_app/immutable/assets/_page.*.css 93 bytes 3.35kB 2.86%
chunks/YoutubeEmbed.js (New) 1.19kB 1.19kB 100.0% 🚀
_app/immutable/assets/YoutubeEmbed.*.css (New) 257 bytes 257 bytes 100.0% 🚀

Files in chunks/Icon.js:

  • ./src/lib/Icon.svelte → Total Size: 34.86kB

Files in chunks/player.js:

  • ./src/state/youtube_player.ts → Total Size: 12.51kB

  • ./src/state/player.ts → Total Size: 11.65kB

  • ./src/state/player_utils.ts → Total Size: 1.09kB

  • ./src/state/media_preference.ts → Total Size: 627 bytes

  • ./src/state/media_timeline.ts → Total Size: 3.89kB

  • ./src/utilities/youtube.ts → Total Size: 418 bytes

Files in entries/pages/(site)/show/_show_number_/_slug_/_layout.svelte.js:

  • ./src/routes/(site)/show/[show_number]/[slug]/+layout.svelte → Total Size: 6.61kB

Files in entries/pages/(site)/show/_show_number_/_slug_/transcript/_page.svelte.js:

  • ./src/routes/(site)/show/[show_number]/[slug]/transcript/+page.svelte → Total Size: 406 bytes

  • ./src/lib/transcript/Transcript.svelte → Total Size: 5.52kB

Files in chunks/ShowCard.js:

  • ./src/lib/ShowCard.svelte → Total Size: 5.25kB

Files in entries/pages/(site)/_page.svelte.js:

  • ./src/routes/(site)/+page.svelte → Total Size: 904 bytes

Files in chunks/YoutubeEmbed.js:

  • ./src/lib/videos/YoutubeEmbed.svelte → Total Size: 536 bytes

App Routes Affected:

App Route Size Change Total Size Change (%)
/(site) 25 bytes 27.71kB 0.09%
/(site)/show/[show_number]/[slug] 1.43kB 19.55kB 7.92% ⚠️
/(site)/show/[show_number]/[slug]/transcript -222 bytes 9.48kB -2.29%
view changes for bundle: website-client-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
_app/immutable/nodes/32.*.js -296 bytes 47.29kB -0.62%
_app/immutable/nodes/39.C6y5F_9u.js (New) 39.15kB 39.15kB 100.0% 🚀
_app/immutable/nodes/3.*.js 3.1kB 37.0kB 9.15% ⚠️
_app/immutable/chunks/Icon.*.js 1.21kB 33.73kB 3.72%
_app/immutable/chunks/entry.*.js (New) 30.25kB 30.25kB 100.0% 🚀
_app/immutable/chunks/player.*.js 11.21kB 19.6kB 133.52% ⚠️
_app/immutable/chunks/SelectMenu.CJ_lSTJy.js (New) 14.41kB 14.41kB 100.0% 🚀
_app/immutable/assets/3.*.css 1.87kB 14.07kB 15.31% ⚠️
_app/immutable/assets/5.*.css 868 bytes 12.24kB 7.64% ⚠️
_app/immutable/nodes/5.*.js 1.0kB 11.94kB 9.19% ⚠️
_app/immutable/nodes/10.*.js (New) 9.15kB 9.15kB 100.0% 🚀
_app/immutable/nodes/13.DudYZSz_.js (New) 8.27kB 8.27kB 100.0% 🚀
_app/immutable/chunks/HairButton.Dh6_QOsL.js (New) 8.21kB 8.21kB 100.0% 🚀
_app/immutable/chunks/ShowCard.*.js 980 bytes 7.23kB 15.67% ⚠️
_app/immutable/nodes/33.*.js (New) 5.45kB 5.45kB 100.0% 🚀
_app/immutable/nodes/11.*.js 24 bytes 5.39kB 0.45%
_app/immutable/assets/ShowCard.*.css 869 bytes 4.3kB 25.34% ⚠️
_app/immutable/assets/11.*.css (New) 3.24kB 3.24kB 100.0% 🚀
_app/immutable/nodes/22.BF8_2ThO.js (New) 3.01kB 3.01kB 100.0% 🚀
_app/immutable/nodes/25.BA0NIa_o.js (New) 3.01kB 3.01kB 100.0% 🚀
_app/immutable/chunks/render.*.js (New) 2.37kB 2.37kB 100.0% 🚀
_app/immutable/nodes/19.D_h5dtBz.js (New) 2.23kB 2.23kB 100.0% 🚀
_app/immutable/nodes/42.*.js (New) 2.21kB 2.21kB 100.0% 🚀
_app/immutable/nodes/40.*.js -1.2kB 1.94kB -38.3%
_app/immutable/nodes/20.NSnL_Wvw.js (New) 1.9kB 1.9kB 100.0% 🚀
_app/immutable/chunks/YoutubeEmbed.*.js (New) 1.82kB 1.82kB 100.0% 🚀
_app/immutable/chunks/HostSocialLink.*.js 5 bytes 1.68kB 0.3%
_app/immutable/chunks/size.*.js (New) 1.64kB 1.64kB 100.0% 🚀
_app/immutable/nodes/28.*.js (New) 1.48kB 1.48kB 100.0% 🚀
_app/immutable/nodes/45.*.js (New) 1.37kB 1.37kB 100.0% 🚀
_app/immutable/nodes/6.C4C5ZPS_.js (New) 1.04kB 1.04kB 100.0% 🚀
_app/immutable/chunks/AdminSearch.BG_lKzce.js (New) 797 bytes 797 bytes 100.0% 🚀
_app/immutable/nodes/27.CEz_L29r.js (New) 705 bytes 705 bytes 100.0% 🚀
_app/immutable/chunks/AdminActions.*.js (New) 678 bytes 678 bytes 100.0% 🚀
_app/immutable/nodes/0.Crw8XZ_H.js (New) 641 bytes 641 bytes 100.0% 🚀
_app/immutable/assets/YoutubeEmbed.*.css (New) 257 bytes 257 bytes 100.0% 🚀
_app/immutable/nodes/39.*.js (Deleted) -39.15kB 0 bytes -100.0% 🗑️
_app/immutable/chunks/entry._jlTdCpW.js (Deleted) -30.22kB 0 bytes -100.0% 🗑️
_app/immutable/chunks/SelectMenu.*.js (Deleted) -14.41kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/10.CG1VJ4v_.js (Deleted) -9.15kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/13.BKslsVN_.js (Deleted) -8.27kB 0 bytes -100.0% 🗑️
_app/immutable/chunks/HairButton.*.js (Deleted) -8.2kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/33.ChI_Od9q.js (Deleted) -5.45kB 0 bytes -100.0% 🗑️
_app/immutable/assets/11.C_xYLnZG.css (Deleted) -3.15kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/25.*.js (Deleted) -3.01kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/22.*.js (Deleted) -3.01kB 0 bytes -100.0% 🗑️
_app/immutable/chunks/render._rL2vgCR.js (Deleted) -2.37kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/19.*.js (Deleted) -2.23kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/42.B_Zqqi2s.js (Deleted) -2.21kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/20.*.js (Deleted) -1.9kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/28.BH85T_g6.js (Deleted) -1.48kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/45.BHg_nolH.js (Deleted) -1.37kB 0 bytes -100.0% 🗑️
_app/immutable/nodes/6.*.js (Deleted) -1.04kB 0 bytes -100.0% 🗑️
_app/immutable/chunks/AdminSearch.*.js (Deleted) -797 bytes 0 bytes -100.0% 🗑️
_app/immutable/nodes/27.*.js (Deleted) -705 bytes 0 bytes -100.0% 🗑️
_app/immutable/chunks/AdminActions.EDJ_cqfJ.js (Deleted) -678 bytes 0 bytes -100.0% 🗑️
_app/immutable/nodes/0.*.js (Deleted) -641 bytes 0 bytes -100.0% 🗑️

Files in _app/immutable/nodes/32.*.js:

  • ./src/routes/(site)/show/[show_number]/[slug]/transcript/+page.svelte → Total Size: 823 bytes

  • ./src/lib/transcript/Transcript.svelte → Total Size: 7.27kB

Files in _app/immutable/nodes/3.*.js:

  • ./src/routes/(site)/+layout.svelte → Total Size: 3.01kB

  • ./src/lib/player/Player.svelte → Total Size: 8.48kB

  • ./src/lib/videos/YoutubeMiniPlayer.svelte → Total Size: 4.59kB

Files in _app/immutable/chunks/Icon.*.js:

  • ./src/lib/Icon.svelte → Total Size: 40.84kB

Files in _app/immutable/chunks/player.*.js:

  • ./src/state/player_utils.ts → Total Size: 1.09kB

  • ./src/state/player.ts → Total Size: 11.64kB

  • ./src/state/youtube_player.ts → Total Size: 12.51kB

  • ./src/state/media_preference.ts → Total Size: 627 bytes

  • ./src/utilities/youtube.ts → Total Size: 418 bytes

  • ./src/state/media_timeline.ts → Total Size: 3.89kB

Files in _app/immutable/nodes/5.*.js:

  • ./src/routes/(site)/show/[show_number]/[slug]/+layout.svelte → Total Size: 11.33kB

Files in _app/immutable/chunks/ShowCard.*.js:

  • ./src/lib/ShowCard.svelte → Total Size: 9.57kB

Files in _app/immutable/nodes/11.*.js:

  • ./src/routes/(site)/+page.svelte → Total Size: 1.1kB

Files in _app/immutable/chunks/YoutubeEmbed.*.js:

  • ./src/lib/videos/YoutubeEmbed.svelte → Total Size: 2.3kB

App Routes Affected:

App Route Size Change Total Size Change (%)
/(site) 3.12kB 42.39kB 7.96% ⚠️
/(site)/show/[show_number]/[slug] 1.0kB 15.76kB 6.81% ⚠️
/(site)/login -5 bytes 3.01kB -0.17%
/(site)/system/components -1.2kB 1.94kB -38.3%
/(site)/show/[show_number]/[slug]/transcript -296 bytes 47.29kB -0.62%

- snake_case renames in Transcript (incl. ai_show_note prop), ShowCard,
  and show layout
- Remove unused vars/catch bindings
- Make show page JSON-LD schema $derived so it updates when navigating
  between episodes, and fix the parse error from the inline template

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 7352dcb6 Deployed Oct 7, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant