Skip to content

feat: podcasts (follow shows, resume, speed, offline downloads) - #42

Merged
EnesYilmazcode merged 5 commits into
mainfrom
feat/podcasts
Sep 26, 2026
Merged

EnesYilmazcode merged 5 commits into
mainfrom
feat/podcasts

Conversation

@EnesYilmazcode

Copy link
Copy Markdown
Owner

Adds podcasts in two parts.

Podcast mode for anything 20+ minutes (episodes and long YouTube imports): remembers where you stopped, 0.75x to 2x speed, 15s back and 30s forward buttons in Now Playing and on the lock screen, and a "42m left" label in lists.

Podcasts tab: search shows through Apple's podcast directory or paste an RSS link, follow, and play episodes. Episodes stream by default. Download saves one for offline, the same way imported tracks work. Continue listening sits at the top, and feeds refresh when the tab opens if they are over an hour old.

Notes:

  • Episodes live in their own table so a show's back catalog stays out of the music library.
  • Many episode URLs pass through ad-tracking redirects, and one hop without CORS breaks the download. If a download fails, it retries with those prefixes removed so it goes straight to the real host. Hosts that send no CORS headers at all can still stream, just not download.
  • CSP now allows img, media and connect to any https host, because every show hosts its feed, art and audio somewhere different.

Tested with node scripts/test-podcasts.mjs, which runs against real feeds in a headless iPhone viewport. 14 of 14 checks pass: search, follow, stream, speed, skip, position saved on pause, resume after reload, download, and offline playback from local storage.

@EnesYilmazcode
EnesYilmazcode merged commit fd74528 into main Sep 26, 2026
1 check passed
@EnesYilmazcode
EnesYilmazcode deleted the feat/podcasts branch September 26, 2026 02:44
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