v2.1.0 — Waveform scrubber, design system & performance
Highlights
- Waveform scrubber — the flat progress bar is now an amplitude waveform you can drag to seek, with a live playhead and time tooltip. Bars are generated locally from a deterministic per-episode seed (no audio analysis needed).
- Living equalizer — the now-playing equalizer animates only during playback, and the currently-playing episode row shows a mini-equalizer in place of its index.
- Solid design system — spacing, type, motion-duration and elevation token scales; now-playing title crossfade; refined, theme-aware visuals across Dark, Light and OLED.
Fixed
- Podcast load failure / "Failed to fetch." Worked around the iTunes CDN serving cached responses bearing another origin's CORS header: requests now use a cache-busting parameter (plus a CORS-proxy fallback) so every request is fresh and correctly attributed.
- Light theme readability — themed surface/text tokens, a theme-aware wordmark sheen (so "Seseri" no longer disappears on white), cleaner hero vignette, AA-legible captions.
Changed
- Path-independent deployment — manifest
scope/start_url, the Service Worker, and404.htmlresolve relative paths, so the app runs at any base URL with no configuration. The Service Worker is now network-first for navigations (new deploys appear immediately); cache bumped toseseri-v2.
Performance
- Removed the stacked
backdrop-filterblurs from the settings drawer that caused an FPS drop on open/scroll (solid surface + composited slide). - Episode rows use
content-visibilityso off-screen rows in long feeds aren't rendered until scrolled into view. - Background motion pauses while the settings drawer is open; dropped the animated hero-glow blur filter; momentum +
overscroll-behavior: containon scroll areas.
Full changelog: CHANGELOG.md