I wanted a clean music app with no ads, no subscription walls, and the ability to actually download songs. JioSaavn doesn’t use DRM on its audio files, which made it the right target. So I built the full stack - scraping layer, API middleware, and a proper web client on top.
Features
- Search songs, albums, and playlists
- Stream directly in the browser
- Download tracks for offline use, cached in IndexedDB
- Playlist management with drag-and-drop reordering
- Login to save your library across devices
- Server-side data fetching with TanStack Query
TODO
- Export and import playlists
- Recommendation system based on listening history
What I learnt
- The application → middleware → data source architecture pattern
- Offline storage with IndexedDB
- State management with Zustand across a music player
- How to layer server state (TanStack Query) and client state (Zustand) without them fighting each other
Built with
- Next.js
- Drizzle ORM + Neon - PostgreSQL
- Better Auth - authentication
- Zustand - client state
- TanStack Query - server state
- tailwindcss
- Deployed on Vercel
- JioSaavn API that shall not be discussed 🤫