- 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>
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>
Add channel request form (/request-channel) that emails admin with
channel details via nodemailer. Adds cyan "Request a Channel" button
to both hero and CTA sections of the homepage alongside Live TV and
Music buttons. Rename Traefik router to avoid conflicts with media stack.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace Movies/Shows/Music/Live Sports buttons with Request/Watch/Upload
flow. Update request-access page with clear requests.jefflix.lol and
movies.jefflix.lol instructions plus install-as-app tips. Clean up
README, remove @vercel/analytics, add backlog tasks and vpn-setup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Live Sports button linking to Jellyfin Live TV section
- Create /request-access page for users to request account access
- Add API endpoint that sends email notifications via Resend
- Add environment variables for RESEND_API_KEY and ADMIN_EMAIL
- Add .gitignore to exclude build artifacts and node_modules
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Change media server links from jeffemmett.com to jefflix.lol subdomains:
- movies.jefflix.lol for movies
- shows.jefflix.lol for TV shows
- music.jefflix.lol for music
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds new section before footer encouraging users to support real artists
instead of extractive corporate gatekeepers:
- Filmworkers Unions (strike funds, worker cooperatives)
- Local Arts Funds (theaters, galleries, indie creators)
- Direct to Artists (Patreon, Bandcamp, Ko-fi)
Includes callout with streaming cost breakdown ($180/year to corporations)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>