About

I am the person who asks what happens when it is wrong

I build LLM systems wrapped in deterministic, verifiable workflows: multi-model routing, non-LLM scoring layers, evals against real labelled data, human review gates, and safety that fails closed. 38 systems since July 2023, 25 of them in production, 2 in the care sector. Based in Oakland, California.

The part I am actually good at is not getting a model to produce something impressive. That is the easy half now. It is building the apparatus around it that can tell you, honestly and repeatedly, whether the impressive thing is also correct — and that stops the line when it is not.

Method

Five things I do on every build

These are not aspirations. Each one has cost me something, which is the only way I know they are real.

Deterministic first

Model output gets wrapped in rules, scoring and gates so the system behaves predictably even when the model does not. The interesting engineering is almost never the prompt.

Verifiable by design

Evals run against real labelled data and the pass/fail is visible where the work happens, not buried in a notebook nobody opens twice.

Fail closed

Any uncaught edge halts the pipeline. No silent fallback to probably-fine. It costs throughput and I keep paying it.

Human in the loop, as a component

Operator review gates are a first-class part of the design, not an apology bolted on after a bad week.

No real data in anything demonstrable

Every demo runs on fictional sample data. Real products operate on separate, isolated data paths. This is enforced by a scanner on every build, not by me remembering.

Selected work

Six of the thirty-eight

Picked because each one shows a different part of the job, not because they went best. The full set, with running demos, is in the portfolio.

See the work in detail

TradeTEST.TRAINING

Live

A tutored exam-prep product with Stripe billing, spaced-repetition scheduling, and bilingual English/Spanish content. The localisation pipeline moves ~3,400 items through a five-stage QA gate; it is resumable and cost-capped, so a bad run is cheap to abandon rather than something I have to babysit to the end.

Groq · Next.js · Supabase · TypeScript · Stripe · SM-2

Find Your Vote

Live

Type an address, get ranked candidate matches drawn from 25+ public-record sources, with a per-issue score breakdown a voter can read and argue with. Determinism-audited: the same inputs produce the same ranking every run. For anything touching an election, an unexplainable ranking is not a feature.

Next.js · TypeScript · determinism audit · 25+ record sources

Sea Star publish automation

Live

One blog topic fans out to a Facebook caption, an Instagram caption with hashtags, and an email subject and body, from a single model call on a nightly cron. It runs as an admin tool in production, which means it fails in front of someone who will tell me.

Groq · Next.js · publish API · nightly cron

Multi-Model QA Cascade

Internal

One item routed to Ollama, Groq and Codex in parallel. A non-LLM scoring layer picks the winner, then a person approves before anything is written to SQL. Runs at zero marginal cost locally, which is the reason it actually gets used.

Ollama · Groq · Codex · deterministic scoring · human-in-loop

agent-gate

Open source

A portable safety fence for AI coding agents: it blocks the dangerous actions — leaking secrets, deleting things, claiming done without proof, rewriting history — and lets the safe ones through. Stdlib-only Python, no dependencies, 53 tests. Off by default and on purpose; it only enforces once you explicitly activate it.

Python · deterministic rules · fail-closed · 53 tests

Vision consensus pipeline

Internal

One model generates assets, a second verifies them, and the run fails closed if centroid drift crosses a fixed threshold. It exists because a single model generating a large asset run will drift confidently and quietly, and nobody notices until the whole set is wrong.

GPT-4o · Gemini vision · consensus gate · spec-driven pipeline

The honest shape of it

Where this came from

I started building with AI in July 2023. Everything on this site postdates that. I am not going to dress it up as a decade in machine learning, because it is not one, and the people I want to work with can tell the difference in about four minutes.

What the last stretch actually bought me is volume under real conditions: 38 systems, 25 of them carrying real users, built end to end rather than handed off at the interesting part. I have written the model routing, the eval harness, the review gate, the billing, and the thing that pages me when it breaks. That range is why I care about governance in the specific way I do — every control I argue for is one I have also had to live with at two in the morning.

The gap in that story is scale of organisation, not scale of system. I have built the controls; I have not yet run them across a large team with independent sign-off. That is precisely the next thing I want.

What I am looking for

The work I want next

Next step

Worth a conversation?

The resume has the compressed version and opens without an email wall. The governance page has the machinery and the case where my own gates were wrong. If any of it fits what you are hiring for, the form comes straight to me.