A fan-built archive browser for hetarchief.deschoolamsterdam.nl — ~891 DJ sets recorded at De School Amsterdam, 2016–2024, searchable + listenable in one place.
Live: plnech.github.io/le_archive
De School's own archive is beautiful but hard to navigate: no search, no genre tags, no way to filter by mood or energy. This project scrapes the archive, enriches each set with metadata (Mixcloud stats, artist genres via Discogs + Last.fm, LLM-derived mood, librosa-derived tempo/brightness/energy), and serves it through a fast Algolia-backed SPA designed for one use case: listening through the archive while working.
No peak-time intrusions. Ambient and dub and atmospheric gems surfaced.
scraper/ Python (Poetry) — scrape, Mixcloud/Discogs/Last.fm enrichment,
LLM mood tagging, librosa audio analysis, Algolia push
site/ Vite + React 19 + TS + react-instantsearch + Zustand
- Search: Algolia (
archive_sets+ per-artist dossier indexarchive_artists) - Audio: Mixcloud iframes — streamed in-browser, never re-hosted
- Audio analysis: librosa on
yt-dlpstreams, only derived numerical features stored (bpm, spectral centroid, energy envelope, viz fingerprint) - Mood tagging: small LLM over artist + event + tags + audio features; closed 20-label vocabulary
- Discovery: cosine similarity over pooled mel fingerprints → hand-rolled "kin by sound"
cp .env.example .env # paste Algolia creds
cd scraper && poetry install
poetry run python -m le_archive.scrape # (or skip + use existing index)
poetry run python -m le_archive.index
cd ../site && npm install && npm run dev # http://localhost:5173See CLAUDE.md for project conventions (lint gates, hook rules, P6 sharding, Mixcloud rate-limit gotchas).
The archive itself is curated by De School Amsterdam at hetarchief.deschoolamsterdam.nl. Audio streams from Mixcloud. This project stores only derived numerical features (tempo, brightness, mood labels) — never the audio. Non-commercial fan tribute, unaffiliated with De School.
If De School or any featured artist objects, the derived features come down and we retreat to pure metadata. Just ask.