<portfolio />

AI Systems & Engineering

Production AI systems first, then the infrastructure and backend work behind them. The numbers here trace to the source and runtime config behind them.

<case-studies />

AI systems, in production

Not demos. Three systems where LLMs do real work behind guardrails — running unattended, with the numbers below tracing to the source and runtime config behind them.

Production multi-agent system

A self-improving fleet of LLM agents that runs a sales pipeline

An autonomous lead-generation system of ~15 LLM agents (plus a few supporting Lambdas) on AWS Lambda + Bedrock that discovers prospects, drafts grounded outreach, and rewrites its own strategy every week.

~15

LLM agents (plus supporting Lambdas)

$100→$50

Monthly Bedrock cap cut (spend roughly halved)

Weekly

Self-rewritten strategy brief

Problem

A one-person company cannot afford to spend hours each week prospecting, and naive LLM outreach is worse than none: it hallucinates criticism of a prospect’s website and burns money re-drafting the same held leads on every run. The system had to be cheap, self-correcting, and safe to send unattended.

AI architecture

  • Structured as three layers — Sensors (discovery, analytics, event-enrichment) collect from Brave Search, Google Maps, and GA4; Synthesizers (the weekly strategy optimizer, daily pulse, weekly report) read the history and write a strategy brief; Dispatchers (outreach, content, demo-dispatcher) act on leads.
  • A grounding gate sits in front of every send: a Claude Haiku evidence-auditor classifies each draft against the research it was built from, surgically repairs the one offending clause once, and HOLDS the draft rather than sending an unsupported claim — four blocking checks (unsupported-defect, premise-contradiction, diagnostic-subject, unsolicited-criticism).
  • The strategy optimizer reads ~90 days of conversion history and uses Bedrock tool-use to emit a fresh strategy brief every Sunday; discovery and outreach read that brief at startup, so scoring multipliers, email experiments, and volume self-adjust to what actually converted.
  • Two model tiers keep cost down — Haiku for scoring and validation, Sonnet only for the writing that matters. Concurrency is held by an S3 compare-and-set run-lock (the account is below the Lambda reserved-concurrency floor). Ships via GitHub Actions OIDC to a leadgen/prod branch.

Measured result

The pipeline runs fully unattended Monday–Friday; the founder only touches warm replies. Diagnosing a self-contradicting drafter prompt (it rewarded confident specificity with no gate to the evidence) and replacing the blind regenerate-cascade with a single surgical repair fixed the dominant cause of held drafts. Cutting the monthly Bedrock cap from $100 to $50 (in config), plus a 72-hour re-draft dedup window, roughly halved observed outreach spend.

Multi-agent orchestration + LLM safety gating·AWS BedrockClaude Sonnet + HaikuAWS LambdaDynamoDBSESTerraformGitHub Actions

Production agent + context engineering

A 135-tool operations agent with one source of truth for its rules

A Bedrock Claude agent that runs a whole operation — bookkeeping across three entities, real-estate underwriting, CRM, calendar and domain workflows — through 135 tools, with a "doctrine" system that single-sources its domain rules across the agent prompt, the Claude Code skills, and the code itself.

135

Agent tools in one registry

~76%

Per-turn tool-token cut via on-demand discovery

1

Source of truth for domain rules

180s

Async worker beats the 30s gateway cap

Problem

The same domain rules (how to route an expense, when a receipt links to a transaction, which calendar an event belongs to) lived in three places at once — the agent’s system prompt, a dozen Claude Code SKILL.md files, and the code — and silently drifted apart. And a conversational agent that calls real tools cannot fit inside an API Gateway’s 30-second response window.

AI architecture

  • A doctrine module defines each domain contract exactly once as a structured fragment. renderDoctrine([...]) composes the agent’s system prompt from those fragments at load time; a generator stamps the same fragments into the Claude Code skill docs between markers — so editing one file updates every surface that consumes the rule.
  • The agent’s entire tool surface (135 read/write tools) is declared once in a shared tool-registry: read tools auto-execute and feed results back to the model; write tools are surfaced with full schemas but intercepted and staged as reviewable plan-ops that only commit after the human approves.
  • Loading all 135 tool schemas every turn would cost ~27K tokens; instead the agent loads only a curated hot set and discovers the long tail on demand via a search_tools meta-tool (ranked over the registry, with a per-conversation activated set) — a ~76% per-turn cut. Anthropic’s native tool-search defer-loading is InvokeModel-only on Bedrock and this agent runs on the Converse API, so it’s a hand-rolled equivalent of their tool-search guidance.
  • To beat the 30s gateway cap, /chat/send writes a "thinking" status row and self-invokes the Lambda asynchronously (InvocationType: Event); the real agent loop runs off the request path with a 180s timeout while the UI polls status. Up to 20 model turns per conversation.
  • A receipt-to-transaction matcher runs daily: it links a paid receipt to its ledger transaction on an exact-amount, ±7-day, unique match (vendor keyword as tie-breaker), and the link is enqueued by the canonical writer itself — the contract is code-enforced, not documented and hoped for.

Measured result

Domain rules stopped drifting because there is now structurally one copy. The agent runs long, multi-tool reasoning turns without hitting the gateway timeout, and proposes writes that a human approves before they ever touch live records — the assistant operates the system without being trusted to act unsupervised.

Context engineering + human-in-the-loop tool agents·AWS BedrockClaude Sonnet 4.6AWS LambdaDynamoDBTypeScriptZod tool schemas

Automated evaluation engine

An evaluation engine that grades any website against a fixed standard

The Full Score™ — a quality-grading engine that audits a live site across six weighted pillars, runs real browser-rendered checks, and turns the gaps into a prioritized plan.

6

Weighted quality pillars

7

Automated checks, static + rendered

A–F

Grade on a 0–100 score

Problem

Most website audits grade one dimension (speed, or SEO) and stop. Worse, static accessibility checkers are blind to the real failure modes — they can only compare text against a solid CSS background color, so light text laid over a busy hero image passes a static check and fails a human. Selling a website rebuild needs a defensible, repeatable standard, not a vibe.

AI architecture

  • Six weighted pillars (Brand & Design, Message & Persuasion, Technical Foundation, Integrations & Workflow, Maintainability & Ownership, Conversion & Growth) are codified as the single source of truth; seven automated checks (accessibility, SEO, links, content, structured-data, performance, mobile) map onto them and roll up to a 0–100 score and an A–F grade.
  • A rendered (real-browser) mode adds what static tools cannot see: it screenshots the page with and without text to measure true text-over-media WCAG contrast, click-tests CTAs to catch buttons that do nothing, renders at a 390px phone width to find overflow and sub-44px tap targets, and measures per-image weight against explicit standards.
  • The output that matters is not the letter grade — it is the prioritized list of gaps. The grade is the diagnostic lens; the gap vocabulary is the deliverable.
  • Wired into the sales motion: the same engine grades a prospect’s legacy site and the proposed rebuild side by side, so the pitch is a before/after scorecard rather than an opinion.

Measured result

A repeatable, code-enforced website standard that produces a client-facing scorecard on demand — catching the exact text-over-image contrast failures that pass every static checker, and converting an audit into a numbered to-do list a prospect can act on whether or not they ever hire.

Automated evaluation + rubric design·TypeScriptPlaywright (rendered)axe-corejsdomNode CLI

Re:Build Manufacturing

AI Chatbot Infrastructure

Re:Build Manufacturing

Built the infrastructure for an AI-powered chatbot from scratch: Terraform for multi-environment deployment, observability for product and engineering, and CI/CD for automated deployments. Improved embedding speed by 20X and reduced team size from 6 to 2 developers.

Terraform · AWS ECS · AWS Bedrock · LiteLLM · Open WebUI · CloudWatch · CI/CD · Python

Manufacturing Scheduler

Re:Build Manufacturing

A finite capacity scheduling application built through daily customer collaboration. Simple design (spreadsheet in, spreadsheet out) delivered in 1 month—outperforming a vendor solution that took months and cost $30k/year.

.NET · Spreadsheet I/O · Finite Scheduling Algorithms

Virtual Shop API & Tool Modeling SDK

Re:Build Manufacturing

Backend services for a manufacturing intelligence platform that models CNC machining operations and predicts programming and machining time.

.NET 8 · AWS Lambda · Step Functions · GraphQL (Hot Chocolate) · DynamoDB · XUnit · FluentValidation · AutoMapper · NuGet SDKs

Financial Reporting API & Consolidation Service

Re:Build Manufacturing

A unified API layer for aggregating financial data from disparate ERP systems across Re:Build subsidiaries. Enabled consistent reporting, dashboards, and executive visibility.

.NET · AWS Lambda · Service Workers · REST APIs · QuickBooks API · Deltek · JobBOSS

CNC Parameter Version Control

Re:Build Manufacturing

An on-premise Next.js app for managing and versioning machine configurations on the manufacturing floor. It captures real-time operator changes and supports engineering approval workflows.

Next.js · NextAuth · OPC UA · TailwindCSS · TypeScript · Node.js · Polling · Custom Diffing Engine

Fugue Lab

Freelance software work for musicians and performing arts professionals. Built under my creative studio, Fugue Lab.

Website for a new international music festival launching in Hungary, featuring programs for piano and strings. Built for early credibility, participant info, and long-term growth.

Next.js · Tailwind CSS · ShadCN UI · Vercel · Terraform

A blog-style digital publication dedicated to classical music thought leadership. Built for long-term SEO, writer-friendly content workflows, and clean, reader-focused design.

Squarespace

Professional portfolio for a violist and music educator. Includes CV, media clips, teaching philosophy, and student testimonials.

Next.js · ShadCN UI · Vimeo · Custom Forms

A photography competition platform for Sierra Canyon School. Students submit photos, teachers moderate submissions, and students vote anonymously to select winners.

React · TypeScript · Tailwind CSS · AWS Lambda · DynamoDB · S3 · Cognito · SES