$ currently: rewinding a task board, indexing a decade of Ableton sessions, building an audio analysis plugin

I build systems that show their work.

Most of my projects start with a question I can't let go. Lately that's led me to event sourcing, reverse-engineering an old synthesizer, and building developer tools for my own music workflow. Every project here includes working software, source code, or a write-up of how it works.

Before that I did full-stack growth engineering at Gusto: nine A/B tests in six months, one of which moved visit-to-lead conversion by 15.5%.

WEB · EVENT SOURCING · workingmemory.onrender.com

Working Memory

The phone app's Now screen — today's tasks as single-tap rows, with a bottom tab bar.The phone app's Lists screen with a card sheet open, showing that card's sub-cards as full rows.

The phone version is its own layout: rows you can tick in one tap, sub-cards as full rows inside a card.

I wanted to know what a task app would look like if history wasn't an afterthought. Instead of updating rows in place, every edit becomes an event, so the board can be replayed from the beginning or inspected at any moment in its past. It runs on free hosting where every deploy doubles as a backup-and-recovery drill.

RUST · SYSTEMS · local-first · no cloud, no SDK

Ableton Library

After years of making music I'd accumulated hundreds of Ableton projects that were effectively unsearchable. This tool indexes them straight from disk — no SDK, no cloud — so I can search by tempo, plugin, sample, or artist without opening Live, preview sets as waveforms, and explore related projects through a 3D similarity visualization.

AUDIO · C++ · Audio Unit · VST3 · standalone macOS

Spectroscope

The Spectroscope console with all six instruments lit, Nostromo livery — waveform, spectrogram, spectrum, stereo field, loudness chart, and oscilloscope.The same six-instrument console in the TVA livery, an aged-paper chassis with a burnt-orange wordmark.

Four film-grade liveries share the same console — every colour and detail changes, none is a tint of another.

An audio analysis console — waveform, spectrogram, spectrum, stereo field, loudness chart, oscilloscope — that runs as an Audio Unit or VST3 inside Ableton, or as a standalone macOS app listening to an input device. It measures and never changes the audio, so it can sit anywhere in a chain.

WEB · REACT · repo only — no hosted demo

Algo Tracker

Today's session view on an iPad, showing the session budget and the ranked list of techniques waiting on a rep.A rep in progress on a phone, with the technique still hidden until the rep is logged.

Today's session on an iPad, and a rep in progress on a phone.

A practice log for algorithm interviews. Each rep starts blind — the technique stays hidden until you log it, so the record reflects what you actually did rather than what you meant to practice. Sessions are budgeted in minutes rather than a problem count, and techniques are ranked by how long they have gone without a rep, so the ones going stale surface first.

Other projects

OP-1 Lab

Blackfin assembly, Python, GNU bfin toolchain, op1repacker

Mapping the closed Blackfin firmware of the original OP-1 synthesizer to see how it works, then writing an oscillator in assembly that runs on the hardware itself — every modification byte-verified before flashing, so the stock firmware can always be restored. The firmware work stays in a private repo; the write-up is the public artifact.

armak.tech

Vite, EJS, Vanilla JS, HTML Canvas

Live production website for a Southern California low-voltage & networking firm. A static Vite + EJS build with hand-written Canvas animations — a mouse-reactive particle network and an animated SVG service-area map — lazy-loaded per viewport, a backend-less contact form, and WebP hero images that load early.

Incighder

Next.js, TypeScript, Python, MySQL, Gemini 2.5 Flash

Artist-scouting tool built around one question that turned out to be the hard part: are these accounts actually the same artist? Search-backed discovery finds candidate profiles, Gemini verifies the ambiguous ones, and patient scraping (24-hour caches, jittered backoff) turns six platforms’ metrics into growth history and one traction score.

Beatpack

Electron, React, Node.js, ffmpeg

Started as scripts for my own music workflow, grew into a desktop app that automates the release grind for beat producers: stem zipping, MP3 encoding, cover-art overlay, and ffmpeg-driven video assembly. Dropping in a folder does the export work I used to do by hand.

Expert

React, Node.js, Express, JSON store (MySQL optional), WASM OCR

Personal-knowledge tool that makes everything you’ve read searchable by content: image-only scans are detected and run through a background WASM OCR pipeline, so even text-less PDFs join one searchable collection. Searching across sources is the next piece.

Ezzy Shop

AWS EC2, Nginx, Redis, PostgreSQL, Node.js, Express, React, Docker

200 → 800 req/s

230 → 70 ms

Chased bottlenecks through the whole stack of an e-commerce product service — application, database schema, and infrastructure — with every change measured under load (K6, Loader.io).

write-up on request

Portboard

Node.js (zero dependencies)

A single-file dashboard that lists a Mac’s listening ports as tappable links, so a phone on the same network or tailnet can jump straight into a local dev server. LAN-only, no hosted demo.

Delegate

Shell, Python

A shell wrapper that hands a task to another model and keeps one readable transcript per run, with a terminal and web viewer for browsing runs and watching them live.

Termdeck

Python, iTerm2 Python API

Mirrors iTerm2 sessions to a phone over Tailscale: read scrollback, type into a session, and share one read-only with a link.

Deckhand

Node.js

Read-only collectors snapshot a Mac into files, with a small web UI and a local-model question box over the snapshot.