LoopBeat
Your music. Everywhere.
A passwordless, invite-gated personal music tool. Paste a YouTube URL, a search, or a Spotify / Apple Music playlist link — LoopBeat downloads the audio, transcodes it to MP3 or AAC, stores it in object storage, and hands you a short-lived signed download link.
How it's built
Front to back, every connected service — at a glance.
Frontend
Astro 5 static site with React 19 "islands", deployed on Vercel. The browser only ever talks to its own origin — Vercel rewrites /api/* to the backend server-side, so sessions stay first-party.
Backend
FastAPI (Python 3.11) in a container on Render. Downloads run as background tasks — yt-dlp pulls the audio, ffmpeg transcodes it — and can be offloaded to a self-hosted worker on my home server, reached securely over a Cloudflare Tunnel.
Database
Neon / Postgres via SQLAlchemy holds the metadata only — users, sessions, jobs, playlist matches. The audio itself never lives in the DB. Secrets are stored as hashes, never plaintext.
Audio storage
The actual audio files live in Cloudflare R2 object storage under random keys. Playback and downloads go through short-lived signed links that the app refreshes for you, so your library stays available without exposing the raw files.
Login
Passwordless and invite-gated. Request a magic link by email (delivered via Resend) or sign in with a passkey (WebAuthn) — either way you land in the same secure session, with no password ever stored.
Connected services
Spotify & Apple Music supply playlist metadata; the YouTube Data API powers the live search autocomplete in the download box; yt-dlp fetches the real audio from YouTube.
From a link to your library
How a song actually gets stored and served.
- linkPaste or searchA YouTube / Spotify URL or a plain queryarrow_forward
- downloadDownloadyt-dlp pulls best-available audioarrow_forward
- graphic_eqTranscodeffmpeg → MP3 or AAC at 192 / 320 kbpsarrow_forward
- cloud_uploadStore in R2Uploaded to Cloudflare under a UUID keyarrow_forward
- vpn_keySigned linkA short-lived signed URL to play / save
Inside the app
Dashboard and live search.
