Work

Context

The Korg monologue has a great voice architecture, but it is monophonic and lives in hardware.

Tension

Playing chords on that sound means buying more hardware or settling for an approximation.

Decision

Built a polyphonic software synth on the monologue's architecture: two oscillators with sync and ring mod, a drive filter, two envelopes, and an LFO, with original branding and sounds.

Outcome

A JUCE 8 / C++20 plugin (VST3, AU, standalone) with PLAY macros, a full EDIT panel, and MIDI learn on every control.

Context

Surge XT has hundreds of parameters across oscillators, filters, FX, and modulation—impossible to keep in working memory during a session.

Tension

Asking an AI for help with sound design means the model is guessing from training data, not reading the actual parameter documentation.

Decision

Built an MCP server that ingests and chunks the official Surge XT docs, exposing search, section fetch, and parameter lookup as tools AI models can call directly.

Outcome

AI assistants can now look up exact knob behaviour and guide patch recreation with authoritative documentation.

Context

Stacking vocal harmonies means recording take after take, or renting a harmonizer that turns the singer into a chipmunk.

Tension

Pitch shifting that ignores the voice's formants destroys the character of the singer.

Decision

Built an open-source C++ vocal harmonizer plugin that uses time-domain PSOLA to turn one mono line into eight harmonies.

Outcome

VST3, AU, and standalone on macOS, Windows, and Linux, with diatonic stacks, pedal drones, MIDI chords, and doubling.

Context

Document extraction is often brittle, lossy with images, or prohibitively expensive at scale.

Tension

Generic OCR ignores structure; most "AI study tools" quietly fail on diagrams, equations, and screenshot-heavy slides.

Decision

Built an opinionated document intelligence CLI that uses vision LLMs and config-driven RAG to turn arbitrary slides, papers, and textbooks into clean, full-context markdown.

Outcome

Static PDFs become queryable, refinable knowledge—ready for RAG, notes, flashcards, and assessment pipelines.

Context

Writing Rust extensions for Python means maintaining a C FFI layer, a Python wrapper, and keeping both in sync with the Rust API.

Tension

Every type change requires updates in three places. The binding layer is always a commit behind the implementation.

Decision

Built a compiler that reads Rust source, reflects the public type surface, and emits the FFI layer, native extension, and .pyi stubs automatically.

Outcome

Bindings become a compiler output. Change the Rust signature, run ferryx, done.

Context

LLM pipelines stitch together inference servers, vector stores, and orchestration layers across multiple process boundaries.

Tension

The model is fast; the glue is slow. Every HTTP hop and subprocess call adds latency the user feels but the benchmark doesn't capture.

Decision

Built a C++ execution runtime that compiles LLM and ML pipelines into static graphs—embed, retrieve, and generate as typed first-class operations with no interpreter overhead.

Outcome

Single binary, no orchestration daemons. Pipelines run as compiled programs.

Context

Adding semantic search to a small project means standing up Pinecone, Weaviate, or a Postgres extension—infra for something that should be trivial.

Tension

Hosted vector databases are overkill for local tools; rolling your own HNSW index is a week of work that has nothing to do with the actual project.

Decision

Built an embedded Rust vector store with a single-file persistence model—same mental model as SQLite, but for approximate nearest-neighbour search.

Outcome

Drop-in semantic search with no server, no daemon, no connection pool.

Context

Note-taking tools optimise for writing, not retrieval. Months later, the note you need is buried and keyword search returns 40 results.

Tension

Semantic search requires a vector store and embedding pipeline; RAG synthesis requires an LLM—both are heavy to wire up just for personal notes.

Decision

Built a Rust CLI and TUI that embeds notes locally, retrieves by meaning, and synthesises answers from your own knowledge base—nothing leaves your machine.

Outcome

Ask questions in plain English. Get answers drawn from your own notes.

Context

ADHD attention doesn't follow timers—it fluctuates. Productivity tools that ping on a schedule create alarm fatigue and break focus.

Tension

Most assistants are either voice-only chatbots or rigid schedulers. Neither understands what's on your screen or whether you're actually focused.

Decision

Built a macOS desktop companion that uses on-device vision to detect when you drift, then nudges you with shame-free, adaptive voice — all local-first.

Outcome

A floating orb that watches your screen, talks to you, and remembers things — with neurodivergence-aware nudging that respects hyperfocus and quiet hours.