- 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>
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>