Spotify Wrapped, But Everyday
personal Spotify library intelligence from playlists, liked songs, and artist-level curation patterns
The spotify data for my profile is fetched using the Spotify Web API through the scripts in this spotify repository of mine. Jump to the technical report for the implementation details behind the dashboard and recommendation logic.
For the past 6 years, Spotify and I have been good friends. Every december when Spotify Wrapped drops, it is such a warm thing. I always put on stories on instagram of it. And by a long shot, the amount of minutes listened to is more than 50,000, always.
How well do my playlists represent the songs I have saved? One particular useful aspect I noticed out of the flamboyant display of css and javascript is the data analysis that recommends new songs to be added to each one my Spotify playlists from the songs that I have liked but not present in any playlist. Who has the time to curate a new song instantaneously as one comes across a new banger, too busy enjoying the euphoria. These mapping of recommended songs to be added to specific playlists comes from simple jaccard similarity heuristics.
A song brings back so many memories associated with the phase when I first discovered it. This project turns that my music learning history with spotify archive to unravel the suppressed nostalgia, which brings back so many good and bad memories. Every playlist I made was during a certain phase of my life, these playlists hold a part of those memories of those phases and the places of those phases intact, and thus making it very special sort of horcrux to me.
I don’t know why I am putting it my personal stuff in the public, I guess I am an open book. A less romantic reason would be that it is convenient hah for me to see what’s going on over at my spotify. Another serious reason is that I want to discover new music, so much more music, I know this music stuff sometimes takes up a lot of my attention, which could otherwise have gone over to studying maths and stuff, but it’s what keeps me sane brr. With so many of these dashboards down below, it would definitely become easier to discover new art, and save the bits of those art that I like. I don’t like every song I come across sheesh, but when I do find a new one that I instantly love, I obviously have the urgency to capture and save that moment. I like a ton of music, but if I don’t add it to any my playlists, it is buried down amongst the ton of memory in the head. Old tracks that sometimes disappear from memory until they…
What is it good for?
Absolutely nothing. Good song in Rush hour. Also, My love’s in Jeopardy, baby.
This is placeholder text for the recommendations section. You can replace this with your own explanation of why the missing liked songs matter, how the suggested playlists are chosen, and what a reader should notice before opening the recommendation table.
Technical report
This project is built as a static data product over an exported Spotify library snapshot. The data artifact stores playlist tracks, liked songs, artist metadata, playlist-level summaries, overlap statistics, and Spotify’s own long-term affinity rankings. The page itself does not require a live Spotify login: the browser loads a JSON file, and the JavaScript modules render each section from that artifact. That separation keeps the portfolio page simple while still showing the data engineering and analysis choices behind the dashboard.
The first layer is coverage analysis. Tracks saved in liked songs are compared against tracks that already appear in named playlists, which gives a direct estimate of how much of the saved library has been curated into playlists. The dashboard reports playlist count, liked song count, playlist coverage, missing liked songs, and the number of unique artists represented in playlists versus liked songs. Artist rankings are computed from unique track counts and playlist appearances, so the same artist can be compared across the curated playlist library and the saved-song library.
The recommendation section uses the missing liked songs as candidate additions. For each saved song that is not already present in a playlist, the exported data records suggested playlists based on artist overlap with existing playlist contents. In practice, this is a lightweight content-based recommender: a song is represented by its artist set, playlists are represented by the artists already present in them, and the best suggested playlist is surfaced with a short overlap reason. It is intentionally simple for this first version, but it creates a useful baseline before adding heavier recommendation methods such as embeddings, collaborative filtering, or sequence-aware listening behavior.
The playlist analysis section adds two compact statistical views. Playlist diversity is measured with artist-distribution entropy: playlists where songs are spread across many artists score higher, while playlists dominated by a small number of artists score lower. The normalized entropy value makes playlists easier to compare even when their sizes differ. Playlist overlap is measured with set similarity, including shared tracks and artist-level Jaccard similarity. Jaccard similarity is a good fit here because it is lightweight, interpretable, and directly answers the question: how much do two playlists share relative to their combined contents?
Finally, the Spotify affinity section is kept separate from the playlist-derived statistics. These rankings come from Spotify’s calculated long-term top artists and tracks, so they act as a sanity check against the curation-based views. If the playlist rankings, liked-song rankings, and Spotify affinity rankings disagree, that disagreement is itself useful: it can show the difference between songs I repeatedly listen to, songs I save, and songs I actually organize into playlists.