work

404 RAVE

exclusive party for broken pages

shipped
November 2025
stack
React 18 · Vite · Web Audio API · Tailwind v4
live
404rave.somedaystudios.xyz

What it is

A Y2K/Windows 95 step-sequencer beat maker. Twelve instruments across sixteen steps, chromatic basslines, swing, per-track volume, and a WAV export. The whole thing runs in the browser with no account and no server.

Everything is client-side, on purpose

There is no backend for the music. Patterns are sequenced with the Web Audio API, rendered to WAV through an OfflineAudioContext, and saved to localStorage.

Sharing works by encoding the entire pattern — steps, tempo, swing, bass sound — into the URL hash. A shared link is the beat. Nothing is stored, nothing expires, and there is no share endpoint that can go down.

That decision aged well. The Supabase project this app used for download analytics was deleted at some point, and the app never noticed, because saving and sharing never depended on it.

What was hard

Scheduling. Web Audio keeps its own clock, separate from the browser's timers, and a sequencer that fires steps when a timer says so inherits the timer's jitter. The playback engine runs a lookahead scheduler instead: an interval tick wakes up, looks a fraction of a second into the future, and queues every step falling inside that window against AudioContext.currentTime. Timing comes from the audio clock; the timer only decides how often to top up the queue.

Mobile. Sixteen step cells across a portrait phone screen wanted to overflow. They flex-grow now so all sixteen stay reachable without horizontal scroll.

Browser audio policy. Audio can't start without a user gesture, and the rules differ across iOS and desktop. The context unlocks inside the first tap.