music.jefflix.lol should route to the soulsync-player container,
not jefflix-website. Both containers were claiming the domain,
causing jefflix-website to win the Traefik routing conflict.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use NextResponse.rewrite so the URL stays as music.jefflix.lol/
instead of redirecting to music.jefflix.lol/music.
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>
The update banner needs to reach /api/version without the
jefflix-access cookie, otherwise it gets redirected to /gate.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove the vpn-setup/ directory (Headscale/Tailscale scripts, CoreDNS,
onboarding) and add a lightweight access code gate instead. Visitors
must enter a code to view the site — validated via API route with an
httpOnly cookie persisted for 1 year.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>