music app
ongoingprivate music streaming for your inner circle. paste spotify/youtube links, auto-download, stream to friends.
your own personal music streaming service. paste a spotify or youtube link, it auto-downloads the mp3. stream to your friends, invite only. curated playlists by you. no ads, no algorithm, no bs. not for the masses, just for the people you care about.
how it works
- 1paste a spotify or youtube link. spotdl downloads the mp3 with full metadata (album art, id3 tags)
- 2bull + redis queue processes downloads asynchronously, websocket pushes live progress to the app
- 3library module scans the filesystem, indexes tracks with metadata, supports search and artist grouping
- 4audio streaming serves files with http range requests: seeking, pause/resume, partial downloads
- 5flutter app connects to the backend, streams audio with just_audio, shows library and player UI
key decisions
monorepo (flutter + nestjs in one repo)
shared types between backend and app. single git history for atomic changes. simpler ci/cd. easier when you're the only developer.
spotdl over yt-dlp
better spotify metadata extraction. auto-fetches album art. handles playlists natively. still uses youtube as the audio source.
raspberry pi as the server
self-hosted on a pi 5 (8GB). 64GB microSD holds ~9,000 songs. tailscale for remote access. perfect for 10-50 concurrent users. total cost: the pi you already own.
websocket for download progress
downloads take 10-30 seconds. polling would hammer the server. websocket pushes real-time progress. the app shows a live progress bar without any API calls.
what i built
- nestjs backend with modular architecture: download, library, stream, queue, gateway modules
- spotify/youtube → mp3 pipeline with spotdl, id3 tagging, and album art extraction
- bull + redis job queue with live websocket progress updates
- audio streaming with http range request support (seeking, partial downloads)
- library scanner with metadata indexing, search, and artist grouping
- flutter mobile app with spotify-inspired design, provider state management
- raspberry pi deployment with tailscale for remote access
timeline
monorepo setup. flutter + nestjs, database schema, download module with spotdl
queue system (bull + redis), spotify metadata + id3 tagging
library management, audio streaming with http range requests
websocket gateway for live updates, flutter app with spotify-inspired design