What's Changed
New Features
Friend Activity on Home Tab
- The Home tab now shows a "Friend Activity" widget with up to 5 friends sorted by online-first, then most recent activity. Includes relative timestamps ("now", "2h ago"), color-coded online/offline status dots, track info, and a Listen Along button for online friends. (#487)
- Friend track rows are clickable to play and right-clickable for the full track context menu (add to queue, playlist, etc.). (#492)
- Listen-along sessions now automatically end when you manually play a different track, with a toast notification. (#498)
Embeddable Smart Link Player
- New "Embed" button on public smart link pages with a customization modal — choose between standard/large sizes, customize background color to match your site, see a live preview, and copy the embed code to your clipboard. Embed endpoints now accept a
bgquery parameter for theming. (#484)
What's New Card
- After app updates, a "Learn What's New" card appears in the Enhance Your Experience section, opening a modal with release highlights. Dismissed per-version so it only shows once. (#507)
Deep Link Generation (Power User)
- Right-click any page header to copy a
parachord://deep link capturing the current page and active tab. Covers all navigable views: Home, Artist, Collection, History, Playlists, Search, Settings, and more. A tooltip-styled context menu appears at the cursor for visual feedback. (#488, #489)
Bug Fixes
Apple Music
- Fixed progress bar for all three playback paths (native MusicKit polling, MusicKit JS web, preview audio) — added missing
timeupdatelistener for preview audio, fixed seek calling wrong backend on non-macOS, and added smooth interpolation between polling intervals. (#504) - Fixed seek silently failing due to Swift Int/Double type coercion — the
AnyCodabledecoder stored integer JSON values asInt, and Swift'sas? Doublecan't coerceInt. Now accepts both types. (#510) - Fixed progress bar snapping back during seek by adding a
seekingRefguard that suppresses all external progress updates while dragging. Guards all sources: MusicKit polling, MusicKit JS events, preview audio, Spotify interpolation/polling, audioRef, and the generic elapsed timer. (#505, #506)
Collection & Library Sync
- Fixed track/album removal failing for items with special characters —
removeTrackFromCollectionnow matches by storedtrack.idfirst, falling back togenerateTrackIdfor tracks from other views. (#494) - Fixed remove-from-collection failing due to inconsistent ID generation between
addTracksToCollection(inline regex) andremoveTrackFromCollection(generateTrackId). Both now use the canonical function. (#490) - Fixed background sync visually flickering the collection count when Spotify API pagination fails partway through — UI update is now skipped when sync returns a suspicious net loss (>50 tracks AND >10% of collection). (#494)
- Re-authentication of Spotify or Apple Music now triggers an immediate library sync instead of waiting for the next 15-minute interval. (#495)
Album Cover Art
- Fixed cover art permanently disappearing after Fresh Drops refresh — the
onErrorhandler was unconditionally overwriting valid cached URLs withnullon transient CAA 404s. Now only writes null when no valid URL is already cached. (#500) - Removed the null-entry concept from
albumArtCacheentirely — albums without art always retry the deterministic CAA URL on display. Existing null entries from prior sessions are filtered out on load. (#501)
UI / UX Polish
- Fixed progress bar tooltip showing wrong resolver name — was checking
currentTrack.sources?.spotifyinstead of_activeResolver, so it always said "Spotify" even when playing via Apple Music. (#493) - Fixed volume slider tooltip never appearing — wired up the existing
getTooltip()function that had context-aware messages for disabled states. (#486) - Fixed volume tooltip overflowing the window — added a
tooltip-top-endright-aligned CSS variant for controls near the right edge. (#491) - Fixed Shuffleupagus AI chat not scrolling to bottom when opened — added a dedicated effect that scrolls after the sidebar animation completes. (#509)
- Progress toasts (publishing, resolving, creating embeds) now stay visible until replaced by the success/error toast instead of auto-dismissing. (#485)
- Share button resized ~33% smaller and left-aligned. (#502)
- Home page now shows 4 playlists to better balance with 5 friend activity items. (#511)
Full Changelog: v0.8.0-alpha.3...v0.8.0-alpha.4