Software engineer · AI systems
Software that holds up when nobody is watching.
I am a software engineer who builds AI into production systems: LangGraph agents, retrieval pipelines, multi-provider LLM routing, and the full-stack product around them. Most of what I get called for is the same problem. A team bought or built an AI feature, it demoed beautifully, and it does not survive contact with real users.
Below are three systems I designed and shipped, written the way I would walk an engineering team through them: the problem, what I built, what I rejected and why, and what happened.
PythonFastAPILangGraphAnthropic ClaudeJavaScriptReactPostgresSupabaseRailwayNetlifypytestnode --test
Three case studies
Most of the source is private because these are commercial products. The reasoning is written so it can be checked even where the code cannot. Longer versions are on GitHub.
01
A safety check that runs before the model speaks
HumxnMed · patient health-briefing assistant · LangGraph, FastAPI, Claude, Railway, Capacitor
The problem
A patient who types something frightening should never get a cheerful symptom explainer back.
What I built
A LangGraph StateGraph of five narrow nodes over a shared patient state. The first node is a guardrail that routes rather than scores: emergency, crisis, off-topic and invalid inputs exit the graph before the briefing model is ever called. The patient then confirms what is about to be looked up through a real LangGraph interrupt. The graph halts, persists, and resumes after confirmation. Retrieval and the briefing come after that.
What I rejected
A careful system prompt. A prompt asking a model to be careful is a request, and a node that ends the graph is a guarantee. Confirming after retrieval. That is cheaper to build, but the patient would be confirming a lookup that had already happened. One capable agent with tools. It needs less code, but I could no longer say which paths can reach generation.
What happened
The system is deployed and shipped as a mobile app. The four terminating classes are tested and asserted never to reach generation, the property that matters most. The evaluation set is still hand-built and small. I say that plainly and do not publish a precision figure I wrote the test set for.
02
A score you can argue with, not a confident number
The problem
Nonprofits, small businesses, researchers, cities and tribal organizations do not need more grants to look at. They need to know which ones they can actually win.
What I built
Scoring as retrieval over public records, not as the model’s judgment. Federal opportunities from Grants.gov are cross-referenced against USASpending award history for that exact program: who actually won it, how often and at what size. Private foundations come from IRS 990-PF filings, about 130,000 filings and 488,000 grants, re-indexed when a new filing year lands. The applicant is compared against the real winners. Every score breaks down into factors that trace back to a source row.
What I rejected
Letting the LLM produce the score. It would be fluent and plausible, and there would be no way to tell a grounded 70 from an invented one. So retrieval decides and the model only explains. Scoring on generic eligibility. Eligibility says who may apply, and award history says who does win. The product is the gap between the two.
What happened
The engine is live in production with Stripe checkout. A $250k nonprofit looking at an NIH R01 whose past winners are research universities gets 11 out of 100, “Long shot”, not a polite 70. The scores are grounded but not yet calibrated against outcomes, and I do not claim the second.
03
Privacy as an architectural fact, not a policy
The problem
Most compliance tools ask you to upload the exact data the law says you have to protect.
What I built
A compliance cockpit with no backend. The suppression-list matching engine runs entirely in the browser, and the content security policy blocks outbound connections, so there is nowhere for the data to go. Each jurisdiction is a profile, not a fork. The matching engine underneath is jurisdiction-neutral, and adding a regime means adding data rather than branching the app. Every date, fee and penalty carries a citation field.
What I rejected
A conventional SaaS backend. It would bring scale and sync, and it would create a second copy of the customer’s liability and a breach target. Filling gaps with plausible numbers. Where a figure could not be verified to a primary source, the product says so. In a tool whose value is that its numbers are checkable, one invented figure discredits all the honest ones.
What happened
It is live and covers 11 regimes, from US state registries to GDPR, UK GDPR, LGPD, PIPEDA and Québec Law 25. 304 tests across 55 suites pass, with the engine tested independently of the profiles so a new regime cannot silently change an old one. Tests check the rules as encoded. Whether the encoded rules still match current law is a research job, and the citations exist so a person can audit it.
Work with me
Prices are listed so you can decide before we talk. The first 30-minute call is free and is only to find out whether I am the right person.
$350
Power hour
60 minutes, recorded, notes after. An architecture review, a stuck build, model and provider selection, or an honest answer on whether to build it at all.
Book & pay →
$2,500
AI readiness audit
One week and a written report: what your team does by hand, what to automate and what to leave alone, a cost comparison on real numbers, and a 90-day sequence.
Book with 50% deposit →
$8,500+
Build
Scoped per project. RAG and retrieval systems, multi-agent LangGraph workflows, multi-provider routing and fallback, with handover documentation your team can run.
Fractional engineer. 20 hours a month, ongoing. $8,000 a month, 3-month minimum.
Code and prompt review. $350 an hour.
Say It So It Ships. AI for leaders who do not write code. 90 minutes, hands-on, up to 25 people. $3,500 in person, $2,000 online.
You get a written scope and a fixed price within 2 business days. Payment is 50% to start and the balance on delivery, net 15, with no retainer except on fractional work. If the audit concludes you should not build the thing you called me about, the report will say so.
I am also open to senior and staff software engineering roles where the work includes AI systems.