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.
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
- The backend holds no dataset in memory: DuckDB queries Parquet artifacts directly out of Cloudflare R2 and streams results, with FastAPI in front.
- 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.
- The frontend is React and Vite, with motion and d3 handling the moving parts.
- Similarity search runs over the most-playlisted tracks, so an obscure query returns an honest empty result instead of a confident fabrication.
- 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
- Every view ships an evidence contract: the exact metric, its source, its coverage, and what it does not mean. Artist ancestry states outright that it infers nothing about influence; ubiquity states that playlist reach is not listener count.
- Coverage limits are disclosed rather than papered over. Views served from precomputed snapshots say so, and any page that could be misread as popularity says as much on its face.
- Data vintage is stated instead of implied. The playlist corpus covers titles written between 2010 and 2017 and cannot be extended, so the language features are a record of how people named playlists then, not now; the editorial archive runs to 2026 and does keep moving.
- The corpus measures placement, not listening. Only the "Your Listening" room measures listening, because only there does the data come from the person using it.
Scope and limits
- The playlist corpus is fixed to 2010–2017 and cannot be extended — nothing open replaces a million user-written playlist names.
- Playlist placement is not the same as listening, and reach is not a judgment of taste.
- Only about a fifth of tracks carry a resolved ISRC or MusicBrainz ID.
- Similarity coverage is limited to the most-playlisted tracks.