Interactive Experiments
These run entirely in your browser — no server, no install. Built with Canvas2D, WebGL, MediaPipe, and Web Audio. Source code linked from each experiment.
Mind
liveLocal-first second-brain notes app. Quick capture, a pinned TODO list, rich markdown editing, image attachments, search across everything — all stored in your browser, synced through your own Google Drive.
open →Setlist
liveLive-use and rehearsal setlist manager. Import from text or Spotify playlists, attach notes via text or voice, swipe through songs in performance mode. Built for pedal steel gigs.
open →Syzygy
liveRe-marry better audio to a video. Align at zero, by each file’s capture clock, by matching sound (transient correlation), or by hand; trim or pad the ends with still frames. Stream-copies the video untouched whenever possible — all in your browser via ffmpeg.wasm.
open →Qualia
liveThe full live-coding workstation — Strudel + Hydra, a guitar rig + looper, sequencer, vox, audience entanglement, and 22+ audio/pose-reactive visualizers. Audio + pose + crowd drive a shared QualiaField; new fx are one file.
open →Cymatics
liveAudio-reactive Chladni patterns. Particles drift to the nodal lines of a wave field driven by your mic — square plate, circular plate, multi-source interference, lissajous, ripples. Built for ambient / drone / experimental sets.
open →Spectrum Pose
liveLive audio spectrum visualizer layered with pose tracking. Skeletons modulate with bass, mids, highs; beats spawn sparks. Built for improvised ambient performance.
open →Pose Particles
liveMediaPipe body pose estimation drives a particle attractor field in real time. Requires camera access.
open →// about the lab
The lab is where I put things that are too interactive to be a video. Each experiment is a standalone page — full-screen canvas, keyboard/mouse/touch controls, and a link to the source code on GitHub.
The tech varies by experiment but stays close to the metal: vanilla JS, typed arrays, GLSL shaders. No React, no heavy frameworks — particle systems don't need a VDOM.
view GitHub →