- New /radio page with interactive Three.js globe showing 30K+ radio stations worldwide
- Radio Garden API proxy routes (places, channels, stream resolver, search) with caching
- Extended Track type to MusicTrack | RadioTrack discriminated union
- MusicProvider handles radio streams (skip IndexedDB/precache, direct stream URL)
- Mini-player and full-screen player show LIVE badge, hide seek/download/lyrics for radio
- Shared globe component reused on /request-channel page (Search/Globe tab toggle)
- Homepage gets rose "Listen to Radio" button with Waves icon
- react-globe.gl for efficient rendering of 40K+ geo-points
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add shuffle toggle to mini-player and full-screen player (Fisher-Yates
shuffle of upcoming queue items, restores original order on toggle off)
- Fix ADD_TO_QUEUE to insert after current track instead of appending to end
- Add confirmation dialog ("Switch song, DJ Cutoff?") when clicking a
different song while one is playing
- Dedup playlist songs by title+artist (keeps first occurrence)
- Make artist name clickable in full-screen player (navigates to search)
- Music page reads ?q= param to pre-fill search from artist links
- Add pre-cache module for upcoming tracks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds full-screen queue panel with drag-and-drop reordering, remove,
jump-to, clear upcoming, and add-songs navigation. Accessible from
both the mini player bar and full-screen player actions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fetch timed LRC lyrics from LRCLIB API (Navidrome fallback for plain text)
- Synced lyrics component with auto-scroll, active line highlighting, and tap-to-seek
- Past lines fade out, current line enlarges — Spotify-style karaoke experience
- Add "Download All" button on expanded playlists for bulk offline download
- Button shows green checkmark when all songs already downloaded
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Deduplicate Navidrome search results by title+artist (keep highest bitRate)
- Deduplicate Soulseek results by filename across peers (show peer count badge)
- Add MusicBrainz fuzzy search with one-tap Soulseek auto-download
- Add swipe-right-to-queue gesture on mobile song rows
- Add audio output device selector (phone/Bluetooth) in full-screen player
- Include offline mode, download button, and service worker from prior work
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Search and play music from the Navidrome library with a persistent mini
player, full-screen drawer with lyrics/playlists, and Soulseek P2P
fallback for discovering new tracks. All streaming proxied through
server-side API routes to keep credentials hidden.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>