- 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>
Replace manual Threadfin lookup instructions with a signed approve
button in admin notification emails. Clicking it activates channels
in Threadfin via WebSocket API and sends a confirmation email to
the requester.
- Add /api/approve-channels endpoint with HMAC-signed tokens
- Add lib/threadfin.ts for WebSocket-based channel activation
- Add lib/token.ts for signed token creation/verification
- Add ws dependency for Threadfin WebSocket communication
- Update docker-compose with TOKEN_SECRET and THREADFIN_* env vars
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>
Resend required domain verification that wasn't set up. Switch to
self-hosted Mailcow (mx.jeffemmett.com) using nodemailer for SMTP,
matching the pattern used by other projects (cosmolocal, etc).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Updated icon.svg to use 🤣 emoji
- Added generate-favicon.mjs script for PNG generation
- Added canvas dependency for favicon generation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>