Models orchestrated
- Claude
- OpenAI / Codex / GPT-4o
- Groq
- Gemini vision
- local Ollama
- Stable Diffusion
Selected work
Proof I can run AI governance, not just write policy about it. Seven systems in detail show how I evaluate model quality, catch drift, govern autonomous actions, protect sensitive data, and keep a person accountable. The full catalogue follows for anyone who wants it.
Every entry below links to something you can open: the running product, a demo on sample data, or the writeup explaining how it was built. Where no demo honestly demonstrates a system, you get the writeup instead of the nearest available demo — a link that misrepresents the work is worse than no link.
Paying customers study for a state licence exam in English or Spanish, and no translated question reaches them until five checks agree it kept its meaning. Billing, spaced-repetition scheduling and the content pipeline all shipped and running; the pipeline is resumable and cost-capped, so a bad run is cheap to abandon.
What I did: Built and shipped end to end — billing, scheduling algorithm, content pipeline, and the QA gate that decides whether a translation batch is allowed through.
Non-technical staff publish to four channels from one post, nightly, with no engineer in the loop. A single model call fans out to a Facebook caption, an Instagram caption with hashtags, and an email subject and body; it runs as an admin tool in production, which means it fails in front of someone who will tell me.
What I did: Designed the fan-out, wrote the publish integrations, and put it in the hands of non-technical staff who use it daily.
Every voter sees exactly why a candidate ranked where they did — and the same address always gets the same answer, audited run after run. Matches are drawn from 25+ public-record sources, with a per-issue score breakdown a voter can read and argue with.
What I did: Built the scoring engine and the determinism audit. For anything touching an election, a ranking nobody can explain is not a feature.
No model grades its own homework: three providers propose answers in parallel, a scoring layer containing no model ranks them, and a person approves before anything is written to the database. Runs at zero marginal cost locally, which is the reason it actually gets used.
What I did: Designed the routing and the scoring layer. The cost work is the governance work: controls that are expensive get quietly dropped in month nine.
Stops a coding agent from leaking secrets, deleting data, or claiming success without proof — and lets the safe actions through. Stdlib-only Python, no dependencies, 53 tests.
What I did: Wrote it as a standalone reusable layer. Off by default and on purpose; it only enforces once you explicitly activate it.
Stops an inconsistent asset run before it reaches production: one model generates, a second verifies placement, and the run halts when disagreement crosses a fixed threshold. A single model generating a large run drifts confidently and quietly — nobody notices until the whole set is wrong.
What I did: Built the consensus gate and the status board that makes a long run inspectable while it is still running.
Shows you how wrong it is, live, while you use it: every estimate is scored on screen against labelled ground truth, and the offline fallback says on its face that it is a fallback.
What I did: Built the measurement first and the feature second. The live product is not linked here by choice — it sits behind a login over personal data.
The full catalogue
Everything with a demo, a written case study, or a live domain. Each line leads with the outcome that matters for the job, not the technology — the technology is on the card underneath it.
Paying customers study for a licence exam in two languages — and no translated question ships until five checks agree it kept its meaning
Tutored exam-prep product with spaced-repetition scheduling and bilingual EN/ES content. The localisation pipeline is resumable and cost-capped, so a bad run is cheap to abandon.
Groq · Next.js · Supabase · TypeScript · Stripe · SM-2
Every voter sees exactly why a candidate ranked where they did — and the same address always gets the same answer
Address in, ranked candidate matches out, drawn from 25+ public-record sources. 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
One post becomes four channels overnight, and non-technical staff run it daily
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. Runs as an admin tool used daily by non-technical staff.
Groq · Next.js · publish API · nightly cron
The owner, the manager and the tech each see the one screen they need — and a slipping job surfaces before the customer calls
Role-aware field-service operations: portfolio KPIs and threshold alerts for the owner, a one-click assignment queue for the manager, today's jobs with photo-evidence capture for the tech.
Next.js · field ops · role-based UI · dashboards
A food vendor sees which menu item is losing money while there is still time to change it
Food-vendor cost and margin calculator: edit menu items inline and watch per-SKU margin move. Unit economics a vendor can actually operate, not a spreadsheet they abandon.
Next.js · unit economics · margin modelling
One login gives the owner the briefing, the estimate and the quote — instead of four tools and a lost afternoon
Gated owner toolset: AI business briefing, walk-site estimator, quote builder, and admin controls in one place.
Next.js · Groq · estimator · quote builder
Screens a housing deal in under a minute and says go or no — not a spreadsheet to interpret
NorCal affordable-housing underwriting suite: HCV rent-cap screen, RCFE calculator, and deal screens that return a verdict rather than a number to interpret.
Next.js · TypeScript · real-estate underwriting
Packaging copy and product imagery for pennies, on your own machine — nothing uploaded, no per-use bill
Local-AI packaging studio: brand positioning copy and Stable Diffusion image prompts, with an SSRF-safe image API. Runs on local Ollama, so the marginal cost is zero.
Ollama · Stable Diffusion · Next.js · cost engine
Both partners see the same exercise at the same moment — and the guidance comes from published sources, not the model's imagination
Guided communication exercises with both screens synced live. The content is source-grounded rather than model-improvised, which is the whole point in this domain.
Supabase Realtime · Next.js · TypeScript
Shipped, live, and serving users on its own domain
Shipped and serving users. It is the one live product with no writeup or demo in this repo, so it is listed as a domain rather than described from guesswork.
Next.js
Shows you how wrong it is, live, while you use it
A model call per dish returns a carb and calorie range, and an eval loop computes mean absolute percentage error (MAPE) against a 5,800-image nutrition dataset in real time. The measurement came first; the feature came second. The live app is not linked — it sits behind a login over personal data.
Groq · llama-3.3-70b · dataset-backed eval · MAPE
3,400 exam questions crossed a language without changing meaning — and any batch that cannot prove it stays behind
Translation at volume where the interesting problem is not the translation but knowing which batches are safe to ship. Every stage is a gate with a written pass condition.
multi-model · staged QA gates · resumable runs
Caught this portfolio's own demos overstating themselves — the audit tool turned on its owner
The tool I used to audit my own work — which is how several of the defects on this site were found, including demos that claimed to be live while making no model call.
Next.js · scoring rubric · audit harness
You can argue with the inputs instead of having to trust the output — every projection shows the assumptions it stands on
A model whose inputs you can argue with. Numbers you cannot interrogate are numbers nobody should act on.
TypeScript · scenario modelling
No model grades its own homework — three propose, plain rules rank them, and a person makes the final call
One item routed to Ollama, Groq and Codex at once. A deterministic scoring layer picks the winner, then a person approves before anything is written to SQL. The cost work is the governance work — controls that are expensive get quietly dropped in month nine.
Ollama · Groq · Codex · deterministic scoring · human-in-the-loop
Stops an inconsistent asset run before it reaches production — a second model checks the first and halts the line on disagreement
One model generates assets, a second verifies them, and the run halts if drift crosses a fixed threshold. It exists because a single model generating a large asset run drifts confidently and quietly, and nobody notices until the whole set is wrong.
GPT-4o · Gemini vision · consensus gate · spec-driven pipeline
The learner has to explain their answer before moving on — which is where the actual learning happens
A Socratic tutor for the CSLB contractor licence exam: the learner picks an answer and then has to explain why, which is where the actual teaching happens.
Groq · Socratic prompting · exam prep
Flashcards become a playable game only when the material actually suits one — it scores the fit instead of forcing all three modes
Turns flashcards into playable Match, Order or MCQ mini-games, and scores which mode actually suits the material rather than generating all three and hoping.
deterministic generation · suitability scoring · HITL playtest
You can see a long generation run going wrong while it is still cheap to stop
A status board that makes a long generation run auditable while it is still running, instead of after it has finished going wrong.
spec-driven pipeline · status board
Any image it made can be made again — the settings are recorded, so a result is reproducible instead of lucky
Image generation as a repeatable pipeline with recorded settings, so a result can be reproduced rather than re-improvised.
image generation · workflow capture
Stops a coding agent from leaking secrets, deleting data, or claiming success without proof — 53 tests, zero dependencies
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. Off by default and on purpose.
Python · deterministic rules · fail-closed · 53 tests
A reviewer's decision becomes data the pipeline obeys — not a comment somebody may read later
Human-in-the-loop review as a first-class component: the reviewer's decisions are structured output the pipeline consumes, not a comment thread someone has to interpret later.
typed JSON · review gates · human-in-the-loop
A new project deploys with its guardrails already installed — five minutes in, the checks are running
One command scaffolds a repo, a Vercel deploy and an agent-ready kit, with a router that sends each job to the cheapest model tier that succeeds. Governance that is expensive to run stops getting run.
Next.js · scaffolding · agent kit · model-tier routing
After an incident, you can replay exactly where everything was and when — instead of reconstructing it from memory
Real-time asset tracking on an SVG floor plan, with breach alerts and a scrubber to replay what happened and when. Built for the moment after the incident, when someone asks where things actually were.
SVG mapping · geofencing · realtime · history replay
One set of questions answers the two things people actually need together — the tax bill and the benefits they qualify for
A wizard that collects filing status, income, household and deductions, then returns an estimate alongside benefits eligibility (including CalFresh) — the two questions people actually need answered together.
Next.js · multi-step wizard · eligibility rules
Change the questions without rebuilding the form — and every submission arrives structured, ready to use
A JS object defines the sections, field types and conditional logic; the form and its typed output follow from it. Change the schema, not the form.
schema-driven · conditional fields · typed JSON export
A book gets written in one workspace instead of three tabs — progress visible, drafts assisted, reading alongside
A themed chapter reader alongside manuscript tracking and an LLM drafting assistant, in one workspace rather than three tabs.
Next.js · manuscript tracking · LLM assist
Mismatched money surfaces where someone will actually see it — exceptions raised, not buried in a spreadsheet
Transactions matched and exceptions raised where someone will see them, which is the only place a reconciliation tool earns its keep.
TypeScript · reconciliation · exception surfacing
A couple sees the same picture of the week — load, plans, check-ins — instead of arguing from two different ones
A shared relationship workspace: weekly focus and load tracking, structured check-ins, requests, agreements and repair flows. The demo runs on fictional data and ships no images; the live app is not linked, by a standing privacy decision.
Next.js · TypeScript · Supabase
Stack
Listed because a recruiter needs to match keywords, and pretending otherwise helps nobody.
The rest of it
The same demos with a capability-based filter over them, plus the older case studies. It is a different, older interface from this site — a working archive rather than a showcase, and I would rather tell you that than restyle it and call it new.
Next step
If any of this looks like the shape of the problem you are hiring for, the form comes straight to me. The resume has the compressed version and opens without an email wall.