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.