← Projects

live data product · cultural analytics at scale

Music Intelligence Atlas

A million public playlists read as cultural evidence — 66.3 million rows served straight from Parquet, where every view ships an explicit contract about what it does not mean.

PythonFastAPIDuckDBParquetCloudflare R2ReactD3
66.3Mplaylist-track rows queried from Parquet
203,345playlists containing Drake — one in every five
27 viewsacross seven rooms, each with an evidence contract

What it answers

Spotify will tell you a song is 122 BPM in A minor with high danceability. It will not tell you that people put it on gym playlists and heartbreak playlists, which is the more interesting fact. A playlist is someone deciding a song belongs somewhere — do that a million times and you get a map of how music is actually used rather than how it is catalogued.

What it runs on

One million playlists, 3.6 million distinct tracks and 66.3 million playlist-track rows, with the Spotify Million Playlist Dataset as the spine and MusicBrainz, ListenBrainz, Last.fm and Deezer filling in identity and enrichment. Roughly a fifth of tracks carry a resolved ISRC or MusicBrainz ID, which lets release years come from first-release dates rather than whichever reissue a metadata provider happened to hold.

How it is built

  1. The backend holds no dataset in memory: DuckDB queries Parquet artifacts directly out of Cloudflare R2 and streams results, with FastAPI in front.
  2. Vector similarity lives in Upstash; one feature is LLM-assisted through Groq and falls back to deterministic keyword logic the moment the model is unavailable.
  3. The frontend is React and Vite, with motion and d3 handling the moving parts.
  4. Similarity search runs over the most-playlisted tracks, so an obscure query returns an honest empty result instead of a confident fabrication.
  5. The "Your Listening" room parses a Spotify export entirely in the browser — nothing is uploaded, there is no account, and nothing is stored.

What makes it different

Scope and limits