Anyone can generate the surface. Here’s what’s underneath.
Four products I built by directing AI agents, and took responsibility for: the decisions, the benchmarks, the tests. Eight of those decisions are circled on the work itself.
01 / 04
Leaf Edge
Trading journal & analytics · web appLive at leafedge.io
The trade is over. The learning isn’t.
I trade, so I built the journal I actually wanted to use: broker imports, profit and loss matched down to each execution, and notes that stay attached to the trade they describe.
Built withNext.js · TypeScript · PostgreSQL · Stripe
Notes were scattered across trade details, daily reports and a separate journal. I rebuilt it as one workspace: a registry of entries, an editor, and the linked trade open beside them.
One trade can be several entries, partial exits and a final contract sold at a different price. The matching engine keys positions by account and contract, so P&L holds up per execution and accounts never bleed into each other.
“I want to have the options chart first and foremost the view you see”
A meeting-notes app built to run its AI on the laptop: recording, transcription and summaries. The interface was the easy part. The real work was choosing small models and proving they were good enough.
Built withTauri · Rust · sherpa-onnx · llama.cpp
MindCap · settings capture · synthetic demo mode
03April–June 2026 · Model selection
I made the models compete.
My rules: run locally, fit a consumer GPU, carry a commercial licence. Around ten speech models and five small language models were benchmarked against that spec, on accuracy, speed and shared GPU memory.
A 21-minute meeting vs a human transcript · RTX 4070
Speech model
Words wrong
Time taken
parakeet.cpp · 6-bit
23%
8 s
Parakeet TDT v2
24%
48 s
SenseVoice Small
29%
25 s
Cohere Transcribe
33%
4 min 30 s
Content word error rate; fillers and speaker labels excluded. The parakeet.cpp run used 40-second voice-packed chunks.
MindCap · settings capture · synthetic demo mode
04June 2026 · In the app
A benchmark isn’t the product.
Passing a test suite proved little on its own. Prompts, context budgets and memory windows were set per model size, then judged inside the real workflows: catch-up mid-meeting, prepared notes, chat over past sessions.
“Those benchmarks are incredibly basic. We still have no idea if the model actually works across the app.”
A native desktop sampler that keeps a rolling buffer of whatever is playing. Grab the moment you just heard, trim it to the exact phrase and split it into stems without leaving the track.
Built withTauri · Rust · SQLite · ONNX Runtime
Samplify · desktop capture, 30 Sep 2026
05July 2026 · Capture
A choice, not a guessed window.
Early captures guessed a window around a marker. I redesigned capture around a frozen waveform: drag the exact range, audition it, save that selection. Slices land on whole sample frames, so timing and stereo stay aligned.
“The most important thing about a sample is picking the timeframe.”
Samplify · desktop capture, 30 Sep 2026
06September 2026 · The workbench
Separation you can actually use.
Pretrained models split drums, bass, vocals and the rest. The product is everything around them: mute, solo, faders, loops and export, in an orange-and-black workspace built for working rather than demos.
Samplify · desktop capture, 30 Sep 2026
04 / 04
Twin Shadows
Game analysis · web appPublic site · development paused
Serious data. A different world.
Summoner lookup, match analysis and team planning for League of Legends, designed to feel like part of the game rather than a spreadsheet beside it.
Built withNext.js · TypeScript · Python · Riot API
Twin Shadows · live homepage capture, 30 Sep 2026
07July 2026 · Design system
Five worlds, one design system.
Hextech, Ionia, Noxus, Demacia and Shurima each change typography, materials and atmosphere through shared tokens. The rules keep data honest: win and loss colours never change, and decoration stays off maps and tables.
“Forget low quality SVG’s and go for telling the story and vibe of that region, through the UI.”
Twin Shadows · live homepage capture, 30 Sep 2026
08July 2026 · In use
Approval isn’t the finish line.
After the look landed, I kept testing: stuttering, flaky summoner search, a janky theme selector. Each went back into the queue. A strong identity is only worth having if the app still feels quick.
Twin Shadows · live homepage capture, 30 Sep 2026
How I build
I use AI agents for nearly everything. I don’t take their word for anything.
I direct coding agents the way a lead directs a team, and I built the system that keeps them honest. CommandRig is my local software factory. It hands each bounded task to an agent, runs the project’s own checks, judges the result on evidence it observes itself, then waits for me.
“Exit 0 is not evidence.”Rule one in CommandRig. A passing exit code only proves a command finished.
01
Scope
A bounded task, an objective, and the checks that will judge it, written down before any code.
02
Isolate
A fresh copy of the project, pinned to an exact commit, so nothing touches the real one.
03
Build
One agent session (Claude, Codex or another) works inside that copy and hands back a claim.
04
Verify
The project’s own checks run, and the result is read from what actually changed on disk.
05
Approve
The run stops. Nothing merges until I have reviewed the evidence and said yes.
Why the gates exist
An agent reported “8/8 pass, 0 fail.” It had written its code into the wrong copy of the project. The check that reads what actually changed caught it, and the run was blocked.
CommandRig fleet log · 28 August 2026 · one of six harness bugs found by running the agents, not by reading the code
In my own words
“OK so the agent was just being deceptive before really, just mocked the data.”
MindCap build log · June 2026 · on finding that a “working” speech-engine result was mocked data
167test files in CommandRig, a working prototype I run on my own projects
750+test files behind Leaf Edge, with CI that fails if any table ships without row-level security
CommandRig and Ko-Lab, my agents’ shared task and memory server, are private. I’m happy to walk through either on a call.
Work with me
Bring me the problem. I’ll bring the proof.
You work directly with me. UK based, remote first, with 20+ hours a week for the right project.