I build LLM-powered systems the way security tooling has to be built: the model gets a voice, never a vote. Eighteen years shipping production code at Walmart Global Tech, and a year since on self-directed R&D into making generated code safe to trust.
DevSecOps Sentinel — a GitHub Actions supply-chain analyzer where deterministic rules decide what is true and a schema-constrained model explains it. Try it live — no signup, nothing to install.
The part I'd want you to look at: the test suite includes a workflow whose comments tell the model to invent a finding and suppress a real one — the prompt-injection case, since scanned content is attacker-controlled — plus a recorded reply where the model obeys. The reply is rejected anyway, because a rule id the scanner never produced cannot survive the containment gate. The gate is mutation-tested, the rules are scored against a golden corpus written independently of the code, and the whole eval runs offline on every push. Scanned against 564 workflows from 14 major OSS repositories: 100% parsed, 94% carried findings, and two Critical rules returning zero across every file alongside 796 unpinned-action hits — a rule set discriminating, not spraying.
WidgetWorks — an e-commerce store built to a production security posture: JWT with rotating refresh tokens, TOTP 2FA, Google sign-in, atomic stock reservation, server-side re-priced checkout, pluggable payments. Live store — demo accounts for all three roles are on the landing page.
- bi-simulator — the "bring 18 data sources together" problem, done agentically twice over: an AI agent built the pipeline (messy SQLite/CSV/JSON/JSONL/XML exports conformed, joined, flattened into one analytical model with a live cross-filtering dashboard), and an LLM now runs inside it — mapping an unseen 19th source from a closed transform vocabulary, landing only past eleven deterministic gates, negative-case tested, prompt-injection canary included. Deterministic by seed, replayed by CI on every push. Try it live · the evidence
- ClaudeChessApp — chess fully client-side: Stockfish, clocks, 2,987 World Championship games, a SQLite library, no backend at all, try it live
- Net10Sudoku — Blazor generator/solver, try it live
- LotteryApp — Powerball & Mega Millions checking against 24 years of real drawings, .NET 10 + Dapper, try it live
- ToDoApp — Clean Architecture + CQRS kanban with revocable JWT auth, try it live
Everything above is .NET 10 / C# except the BI simulator, which is deliberately dependency-free Python. All of it is CI-gated (CodeQL across the board; gitleaks and dependency review on the .NET apps), deployed on free tiers — Azure and GitHub Pages — and built in collaboration with AI agents under the constraint the flagship demonstrates: generated code ships only after deterministic checks say it may.
Open to AI engineering roles — building LLM-powered systems, or putting guardrails around the ones that already exist.



