Skip to content

Repository files navigation

Crate

Community-curated music playlists. Every song opens on YouTube, SoundCloud and Spotify — take whichever one you already pay for.

Static site. No framework, no build step, zero dependencies. Anyone can add a song or propose a playlist by pull request.

🎧 Browse it · 📋 Contribute · 🗺️ Roadmap


What's in it

Playlist Songs The house rule
The Hundred 100 One song per artist. No exceptions.
Small Hours 25 Nothing that would wake someone in the next room.
Full Tilt 25 If it doesn't raise your pulse in thirty seconds, it's out.
No Vocals 25 No lead vocal. Wordless voice as texture is allowed.

175 songs · 165 artists · 14 genres · 1954–2024 · 525 platform links

Every entry carries a one-line note about the recording — an arrangement detail, a production fact, a piece of history. That note is the reason this exists rather than being a link dump.

"Not a bass guitar — a semi-acoustic through an octave pedal, and now a chant in every stadium on earth." — Seven Nation Army

"The orchestra was recorded, then the tape was bent out of tune — the strings slide because the machine did." — How to Disappear Completely

Search by title, artist, album or year; filter by genre and decade; sort any column. Filter state lives in the URL, so any view is a shareable link.

It's keyboard-first. Press ? for the full list:

/ search
j k move between songs
g G first / last
↵ show the note
1 2 3 open on YouTube / SoundCloud / Spotify
[ ] previous / next playlist
s cycle sort column

Every one of them also works by mouse, touch and Tab — the keys are a shortcut, never the only way in.

Run it

git clone https://github.com/THEROCKSSS/crate
cd crate
npm start          # http://localhost:4173

No install step — the project has no dependencies. You need Node 18+.

You do need the server: the page fetches its JSON, and browsers block fetch() on file://. Opening index.html directly shows a load-failure message rather than a blank page, but the catalogue won't load. (A single-file build you can double-click is Phase 4a of the roadmap.)

Contribute

Adding a song is one line in one JSON file. Proposing a playlist is one file. Full guide in CONTRIBUTING.md.

npm run new-playlist -- --id rainy-day --title "Rainy Day" --moods rainy-day,melancholy
npm run normalise     # fixes punctuation for you
npm run verify        # must end with "Catalogue is sound."

Prefer not to touch git? Open an issue instead — suggest a song · propose a playlist · report a wrong entry.

The review is about accuracy, not taste. Nobody's song gets rejected for being uncool. Entries get rejected for being wrong — and for inventing a "fact" in a note, which is the one hard line.

How the links work

Entries store facts, not platform IDs. Each platform URL is built at render time from the artist and title using that service's own search endpoint.

This is deliberate. Hard-coding hundreds of track IDs would mean writing IDs that were never verified against the real APIs, and a wrong Spotify ID doesn't 404 — it plays a different song, silently. A search link is always correct, survives regional catalogue differences, and keeps working when a track is re-released.

Verified IDs are welcome and the renderer already prefers them:

{"rank":1,"title":"Dreams","artist":"Fleetwood Mac","…":"…",
 "ids":{"spotify":"0ofHAoxe9vBkTCp2UQIavz"}}

Full reasoning: ADR 0001. Resolving IDs at scale is Phase 1 of the roadmap — it unlocks in-page playback and one-click export to your own Spotify.

Commands

npm start              # static server
npm run verify         # catalogue + link integrity (what CI runs)
npm run lint:css       # CSS token discipline
npm run normalise      # smart-punctuation pass
npm run new-playlist   # scaffold a new playlist
npm run changelog      # regenerate CHANGELOG.md from git log
npm run check          # syntax + verify + lint

Docs

File What it owns
CONTRIBUTING.md How to add a song or a playlist, and what gets merged
ROADMAP.md Where this is going — Spotify export, in-page playback, offline builds
ARCHITECTURE.md Data flow, file map, named pitfalls
AGENTS.md Conventions, schema, verification checklist
design.md The locked visual system and its design gates
CLAUDE.md Local commands and machine-specific gotchas
docs/adr/ Architecture decisions and why they were made
CHANGELOG.md Generated from git history — do not hand-edit

Verification

Checked, not assumed:

  • 74/74 catalogue checks — per playlist: contiguous ranks, one song per artist, genres drawn from the shared vocabulary, no leftover scaffold placeholders, typographic punctuation, valid https links
  • 2/2 CSS token gates — every spacing value on the 4px scale, every colour and font through a token
  • 95/95 headless-browser checks — every keyboard shortcut, roving tabindex, aria-sort on sorted columns, note disclosure via aria-expanded, playlist switching, scoped filters, deep links, unknown-id fallback, keyboard-driven focus rings, WCAG AA contrast on every text element, table-vs-card mode, and no horizontal scroll at seven viewport widths

CI runs the first two on every pull request and refuses to deploy a failing catalogue.

Licence

MIT — see LICENSE. The catalogue is a list of facts about commercially released recordings. This project hosts no audio, embeds no files, and distributes no copyrighted recordings.

About

Community-curated music playlists. Every song opens on YouTube, SoundCloud and Spotify. Add a song by pull request.

Topics

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages