Work — App & Software Dev

Private

Crate

Stage
Private
Role
Design, build, maintain
Field
DJing · Set preparation · Self-hosted
Stack
Fastify · React · SQLite · FFmpeg · Docker · Cloudflare Tunnel

A private, self-hosted streaming server for a DJ library — lossless playback anywhere, with BPM, key and energy detection, a set builder and Rekordbox export.

01 — What it does

10 parts

The records you own should play wherever you are

Everything it measures is measured once, from the audio, and every number it produces can be overruled by ear.

  • Lossless, in a browserMost browsers refuse AIFF, and streaming it raw wastes bandwidth for nothing. Crate transcodes to FLAC, which decodes bit-for-bit identical to the source at roughly half the size — checked by a test rather than assumed. AAC tiers at 256 and 128 kbps cover cellular and poor signal, switching tier mid-track keeps your place, and each file is encoded once and cached by content hash. It is lossless delivery, and says so: the browser still resamples to the output device, so this is for auditioning, not a replacement for a native player.
  • Tempo and key, detectedTags rarely carry either, so both are measured on ingest, with onset detection and Krumhansl–Schmuckler key profiles written from scratch rather than pulled from a DSP library. Keys are shown in Camelot notation and coloured by position on the wheel, so harmonic neighbours look alike. A BPM corrected in Rekordbox always wins, and one typed by hand survives every rescan.
  • Mixes with thisEvery track in a compatible key, nearest tempo first, labelled by the move it makes — energy up, to minor, energy boost — with the BPM difference beside it. Filter the library by key and tempo range, or select every key compatible with the current track in one click.
  • Energy from 1 to 10Measured from the body of the track, weighted towards loudness and the weight of the kick and sub rather than brightness, because dark, heavy techno is often the hardest thing in the folder. Ranked across the whole library, so 1 is the calmest track and 10 the hardest. A value set by ear is left alone by every later re-rank.
  • A set builder that reads like a running orderOpen a playlist and every transition is spelled out: the move round the wheel, the pitch change, the energy step. Key clashes, pitch moves over 5% and energy jumps over two are flagged, and the energy arc is drawn against a target shape. Drag to reorder, or auto-arrange into a journey that peaks two-thirds of the way in. Undo is always there.
  • Crates in, Rekordbox outCrates mirror the folder structure, playlists sit on top, and any filtered slice of up to 500 tracks becomes a playlist in one click. .m3u files anywhere in the library are offered for import in their original order, and any playlist exports as Rekordbox XML carrying BPM, key and energy — but no beatgrid, because Crate detects tempo rather than downbeats, and a wrong grid is worse than none.
  • Auditioning that does not lieLoudness is matched to EBU R128, so playing tracks back to back is not a lesson in whose master was hotter. The waveform scrubber is drawn from precomputed minimum and maximum peaks, so transients stay visible instead of averaging into a smear.
  • Sounds like thisConnected to Techno Curator, Crate pushes a fingerprint of the library — artist, title, BPM, key and play count, never audio or file paths — so Curator's feed can mark the records already owned. A track's detail panel then offers similar records, split into owned and not, beside the harmonic matches. One finds a transition; the other finds a record.
  • Made for a phone in a dark roomInstallable, dark only, and laid out for one hand down to 320px, with the player pinned to the bottom. It opens on the set you had open last, with its energy arc and warnings, beside the newest arrivals and how far analysis has got.
  • Private by constructionThe library is mounted read-only. Crate listens on localhost only and is reached through a Cloudflare Tunnel behind Cloudflare Access, whose signed assertion it verifies itself rather than trusting a header, with its own password as a second gate. Deleting a file marks it missing rather than removing it, so playlists survive an unplugged drive.

02 — Why it exists

A DJ's library is a folder of AIFF files on a drive at home, and much of what is in it exists on no streaming service. Crate is a private server that sits next to those files, indexes them without ever writing to them, and streams them losslessly to a laptop or a phone — doing the set preparation along the way. One user, one Docker container, and no port opened on the router.

The library lives on one machine, and the listening does not. Checking a promo on the way somewhere, or working out what mixes out of a track, meant being at the laptop — and even there, the files are a format most browsers will not play at all.

Tags help less than they should. Most files arrive without a reliable BPM or key, and none arrive with any sense of how hard a track hits. So Crate measures them, once per file, and puts the numbers to the use they are for: working out what can follow what, and whether a set rises and falls the way it was meant to.

It is deliberately one person's tool — no accounts, no catalogue, no attempt to be a service for anyone else. It is also the other half of Techno Curator. Curator finds the music; Crate is where the music, once bought, lives and gets prepared. Each knows just enough about the other to be more useful: Curator knows what is already in the crate, and never reaches back into the machine the files are on.

03 — Next

AI ConsultancyCreate HubAn AI video platform for kitchen, bedroom and bathroom retailers — turn showroom photos into branded, music-backed social videos in minutes, with voiceovers, hashtags and scheduled publishing.