A music streaming webapp that uses YouTube to get the audio and video. The artist and album data is provided by Last.fm and TheAudioDB APIs.
-
Search for artists (Ctrl+K)
-
View artist details and discography
-
Play albums and tracks
-
Autoplay artist's tracks
-
Add tracks to queue
-
View lyrics
-
Randomize the queue
-
Manage playlists with drag and drop reordering
-
Import playlists from Spotify, YouTube and SoundCloud
-
Drag and drop Spotify songs directly into playlists
-
Simple account creation with username-based auth
-
Fully responsive design
Add songs to your playlists by dragging and dropping: Reorder tracks in your playlists: 

Clone the repository and run pnpm install to install the dependencies. Then run pnpm run db:migrate to create the database, on development it will create a local SQLite database file, on production it receives a Turso connection URL and auth token as environment variables.
Finally pnpm run dev to start the development server.
LASTFM_API_KEY- Last.fm API keyAUDIODB_API_KEY- TheAudioDB API keyGENIUS_ACCESS_TOKEN- Genius API access token for lyricsNEXT_PUBLIC_INVIDIOUS_URLS- Invidious instances to get YouTube video embedsNEXT_PUBLIC_SITE_URL- Site URL for CORSTURSO_CONNECTION_URLandTURSO_AUTH_TOKEN- Turso variablesUPSTASH_REDIS_URLandUPSTASH_REDIS_TOKEN- Upstash Redis variables for sessions
BETTER_AUTH_SECRET- Secret key for Better AuthBETTER_AUTH_URL- Base URL for authentication
pnpm run build- Build the app for productionpnpm run db:push- Push database schema changespnpm run db:studio- Open Drizzle Studio for database managementpnpm run db:generate- Generate database migrations
Many songs I like were not available on Spotify and some never got lyrics, some were only available on SoundCloud or YouTube, and I don't like Youtube Music interface and ads. Also I didn't want to bother with managing or self-hosting my own music library. So I decided to make my own music streaming platform.