Every DJ set I've performed, as plain-text tracklists.
11 playlists · 566 tracks. Every track links to YouTube, Spotify and Apple Music, and every set is a live Spotify playlist you can hit play on.
| Playlist | Tracks | Spotify |
|---|---|---|
| 70s Party | 95 | ▶ |
| Y2K Party | 52 | ▶ |
| Gay Club Anthems | 60 | ▶ |
| Arab House | 63 | ▶ |
| Diwali Afterparty | 72 | ▶ |
| General Pop | 64 | ▶ |
| South Asian | 37 | ▶ |
| Stuff I Like | 27 | ▶ |
| DnB / Garage | 13 | ▶ |
| LVL | 35 | ▶ |
| Reda | 48 | ▶ |
The whole repo is generated. A stdlib-only Python pipeline reads my Apple Music m3u exports and playlist folders, pulls artist, title, BPM and year off the tags, and writes each set out as a JSON file plus a markdown page. A second script talks to the Spotify Web API to create the real playlists and write their URLs back in. No dependencies, no framework, no database.
- Markdown is the output, not the source. Re-run the builder and every page
and this README regenerate from the JSON in
data/. - Track links are search URLs built from artist and title, so they keep working even where I haven't matched an exact Spotify ID.
- BPMs come straight from the file tags where they exist (472 of 566 so far).
- The Spotify publisher is resumable: it skips sets already up and caps its retries, so re-running it never makes duplicates.
- No audio lives here. It's links, not files, so there's nothing to host and nothing to take down.
- The per-track links are searches, not exact tracks. Usually the top hit is right, sometimes it's a different version.
- BPMs aren't complete, and the sets are frozen exports, not playlists I keep updating.
MIT. Take what you want.