Commit Graph

14 Commits

Author SHA1 Message Date
Jeff Emmett c9cd56b452 feat: add World Radio page with 3D globe + Radio Garden integration
- 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>
2026-04-10 16:48:01 -04:00
Jeff Emmett c2af4327aa feat: add all to queue — show "Add All to Queue" when a song is playing
Replace "Play All" with "Add All to Queue" button on offline page when
a song is already playing, so it doesn't interrupt playback. Adds
ADD_ALL_TO_QUEUE batch action to music provider.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 21:37:30 -07:00
Jeff Emmett 02278f4cf8 feat: shuffle mode, queue-next fix, song switch confirmation, playlist dedup
- 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>
2026-03-31 21:03:34 -07:00
Jeff Emmett 4694db4f95 feat: queue view — view, rearrange, and manage playback queue
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>
2026-03-31 20:25:56 -07:00
Jeff Emmett 47d7565d04 feat: synced scrolling lyrics + playlist offline download
- 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>
2026-03-31 19:17:51 -07:00
Jeff Emmett c24962f829 feat: search dedup, MusicBrainz discovery, swipe-to-queue, audio output selector
- 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>
2026-03-31 19:06:28 -07:00
Jeff Emmett 0f76ce3cd7 feat: make update banner more prominent with header and one-click button
Redesigned the PWA update notification from a thin bar to a bold,
animated banner with gradient background, pulsing download icon,
"Update Available" header, and a large "Update Now" pill button.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 12:20:02 -07:00
Jeff Emmett b122d00be3 feat: add "tap to update" banner when new version is deployed
Polls /api/version every 60s and on tab focus. When the server's
build ID differs from the one loaded at page init, a fixed purple
banner appears at the top of the screen prompting the user to reload.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 23:35:02 -07:00
Jeff Emmett 1bdb5e50ef feat: add playlist browsing with cover art on music page
Playlists now display as expandable cards with cover art thumbnails
on the /music page when no search is active. Tapping a playlist
reveals its songs with cover art via the SongRow component.
Also added GET handler for /api/music/playlist/[id] and
improved playlist-picker dialog with cover art.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 21:16:12 -07:00
Jeff Emmett b9551d7597 feat: add integrated music player with Navidrome + Soulseek support
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>
2026-03-30 20:35:13 -07:00
v0 7e12d50cb7 feat: add custom solidarity fist icon component
Replace generic hand icon with new custom design in key section.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-12-02 20:36:04 +00:00
v0 f3a5a61aaf feat: color-code navigation buttons
Assign red to Movies, blue to Shows, and green to Music.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-12-02 20:18:11 +00:00
v0 6ba17a7828 revert v9 to v8 and restore images and components
#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-11-28 07:03:56 +00:00
v0 980ec86afe Initialized repository for chat Jefflix website
Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-11-28 02:08:25 +00:00