Skip to content
Selected work

Real clients, real code in production.

Everything here is live and inspectable — the actual deliverables, not mockups. Where the code is public, the repository is linked. Where it is paid client work and stays private, the running system is. Four projects are written up in full; the rest are summarized below with their sources.

Every project

The full list.

Each card states the problem, the approach, how it was tested, and what came of it.

AI AutomationLive

IFTA Agent — Quarterly Filing Service

Trucking carriers spend hours every quarter reconciling fuel and mileage data, hand-typing per-state lines into the gov portal, and second-guessing whether the math matches what the state will recompute.

What I built

An end-to-end pipeline that ingests raw mileage and fuel files, computes a state-portal-ready return with exact CDTFA math, and runs an AI agent over it to flag missing surcharges, MPG anomalies, and audit-bait patterns before filing.

Built with

Python, pandas, openpyxl, pdfplumber, Anthropic Claude, multi-tenant client registry, per-truck Excel deliverables

Tested

562 automated tests, including a real-data backtest that matches a Kentucky carrier's official CDTFA filing to the penny.

Result

A real client (DM Express, KY) files quarterly through the pipeline, with an AI review note and concrete next steps before each filing.

Pythonbacktestexact matchtests562 passingclientfiling quarterly
AI AutomationIn progress

Sales Agent — Multi-Marketplace Resale Automation

A resale business sells the same inventory across many marketplaces at once. Listing each item by hand on every platform — and keeping prices and 'is it still listed?' in sync — is slow, repetitive, and error-prone.

What I built

A cross-posting engine that describes an item once in a normalized model and publishes it to every marketplace through one uniform adapter interface — with bounded retries, fast-fail on rejections, and idempotency so a scheduled re-run never double-posts. Anything irreversible, like repricing a live listing, stops for a human approval first.

Built with

Python, adapter-pattern marketplace clients, deterministic listing generation, SQLite listing ledger, retry/backoff orchestration, contextvar-scoped execution grants for human-gated actions; the production system spans eight marketplaces behind private adapters

Tested

The public clean-room showcase ships 30 tests over the retry state machine, permanent-vs-transient handling, idempotent skips, partial-failure reporting, the deterministic listing rules, and the approval gate.

Result

Running for a live, revenue-generating client (anonymized). A sanitized showcase of the architecture is public and runs end-to-end on synthetic data; the production code and integrations stay private.

Pythonstatusin productionclientlive · anonymizedshowcasepublic · 30 tests
AI / QALive

Verdict — A Skeptical QA Agent With Memory

Most AI 'QA agents' re-audit the whole repo every run, re-report the same findings until you stop reading, call flaky and stale tests alike 'failures', and sign off with an LGTM. And once an agent is writing the code, a loop where it also tests its own work has no independent gate left in it.

What I built

A QA agent with a stored baseline, so a repeat run is a delta — NEW, REGRESSED, STILL_OPEN, RESOLVED — with regressions ranked first and every open finding carrying its age. It has no Edit tool by design, quarantines flaky tests only with an expiry date attached, requires a citation before it will write a failure off as a stale expectation, and closes on one of four verdicts where 'blocked' is a legitimate answer.

Built with

Zero-dependency Claude Code plugin, 10 slash commands behind one front door (/verdict:run picks baseline, delta, or a scoped review itself), a Python MCP server exposing 9 read-only tools, a fact harness that measures counts and diffs so the model contributes judgment only, an exit-code release gate for CI, a 24-technique test-design catalog, 5 report templates, and six hooks — write-scope, Bash-scope, and a Stop hook that blocks a run which tried to hand-write its own state. MIT.

Tested

Ships with its own eval: six scored fixtures — seeded defects, a TypeScript twin, root-cause with a decoy, a spec review with no code, AI-generated slop, and an adversarial repo whose suite prints ALL TESTS PASSED while exiting 1. Published results include the misses: measured at n=3, one honesty trap is caught 1 run in 3, and the repo says so next to the 8/8s. 419 tests and a scorer-regression corpus run in plain CI with no model.

Result

Public and MIT, 43 releases. Runs unattended nightly against a production codebase — its first fully unattended run refused to execute the suite because a live .env sat in the checkout, said so, and still delivered a delta report, then found a leaked API token untracked in the repo. Turned on itself, it filed the defect that made its own anti-fabrication check imitation-proof: every run now signs the run history with a hash chain a copied state cannot reproduce.

Pythonmcp tools9 · read-onlyeval fixtures6 · misses publishedlicenseMIT
WebsiteLive

Greek-Scythian Society CIC — Heritage Nonprofit Site

A UK Community Interest Company researching ancient Eurasian steppe heritage needed a public face serious enough for museums, universities, and grant panels — and needed to maintain it themselves, without a developer on retainer. A CMS answered the brief; a five-service stack on a small VM, patched and paid for by volunteers to serve content that changes a few times a month, did not.

What I built

Delivered in two phases. First a bespoke WordPress build — content types in a custom plugin, design in a custom theme, the whole environment provisioned by one idempotent script. Then a static rebuild that kept everything visible and discarded everything else: content exported from the REST API to JSON, the theme's CSS carried across, original URLs preserved down to the trailing slash, and retired pages redirected rather than broken.

Built with

WordPress with custom gss-core plugin and gss-journal theme, Docker Compose, Caddy; rebuilt on Next.js 15.5 static generation with three runtime dependencies, JSON content, self-hosted Latin and Cyrillic typography, HMAC-signed contact tokens, Resend, Vercel

Tested

Verified the paths that had been failing silently: the contact form now renders only when delivery is configured and surfaces real errors instead of a false success, the spam gate rejects without telling a spammer why, and the hero is correct with JavaScript disabled and honours reduced-motion preferences.

Result

Live at greek-scythian.org — 23 fully prerendered pages, no database and no server to maintain. The WordPress phase is public under GPL-2.0. Every original URL still resolves, and the largest image on the page ships at 120 kB instead of 361 kB.

TypeScriptpages23 staticstackWordPress → Next.jslcp image361 → 120 kB
AI / RAGLive demo

Second Brain — A Cited RAG Agent You Can Talk To

Every AI portfolio claims agents; almost none lets a visitor talk to one. A public demo of a personal RAG system is also a security exercise — the corpus, the port, and the inference budget are all attack surface, which is why most demos are either locked behind a form or open and leaky.

What I built

A public slice of my personal RAG assistant, live on this site at /lab/brain. It answers questions about my services with citations to the documents it retrieved, and declines what its curated corpus does not cover — including its own infrastructure, by design. Inference runs on local models in my home lab at $0 per request, behind a Vercel zone, a service-token proxy, and a Cloudflare Tunnel.

Built with

Python, FastAPI, Qdrant / Chroma hybrid retrieval, an OpenAI-compatible gateway to a local model, an MCP server (stdio + token-gated HTTP), Next.js 16 multi-zone on Vercel, Cloudflare Tunnel, Turnstile, per-visitor rate limiting at the origin

Tested

141 automated tests plus an eval harness over a synthetic regression corpus — retrieval hit-rate, grounded-answer checks and abstention cases — and a live regression test that asks the deployed agent about its own infrastructure and requires the refusal.

Result

Open source and in daily use, exposed over MCP so Claude Desktop and Claude Code query and teach it directly — and public at /lab/brain, where a visitor gets cited answers from a local model, a labelled recorded-answers fallback when the lab sleeps, and a kill switch that is one environment variable.

Pythoninferencelocal · $0/requestanswerscitedinterfaceCLI + MCP + web
E-CommerceLive

Liora Studio — E-Commerce Storefront

A jewelry brand needed a real online store — catalog, reviews, promotions, and self-service management — without a monthly platform fee or a dashboard to learn.

What I built

A full Next.js storefront with a product catalog, image galleries, reviews, stock, a Buy-Now flow, and token-based personal offer links — plus a secured admin where the owner manages everything themselves.

Built with

Next.js, React, TypeScript, Prisma + libSQL (Turso), Vercel Blob uploads, Tailwind CSS, TOTP two-factor admin

Tested

Admin gated behind two-factor auth, validated image uploads, and cached queries for fast product pages; storefront and admin flows tested end to end.

Result

A live store the owner runs themselves — add products, publish reviews, send personal offers — with no recurring platform cost.

TypeScriptstoreliveadmin2FA CMSplatform fee$0/mo
LivePrivate
WebsiteShipped

DM Express — Trucking Company Website

A small trucking company needed a credible, fast, phone-friendly site to help recruit drivers.

What I built

A one-page React/Vite site with light and dark themes, animated sections, and a structured driver application flow.

Built with

React, TypeScript, Vite, Vitest, mailto application flow, Vercel

Tested

29 tests using equivalence partitioning, boundary value analysis, decision tables, and state transition testing.

Result

A real client site tuned for iPhone, accessibility, and a sub-500KB first load — now their front door for recruiting drivers.

TypeScripttests29 passingpayload<500KBmobileiPhone tuned
AI InfrastructureLive

lab-control — MCP Control Plane

Operating a multi-machine AI lab from anywhere usually means SSH and a raw shell — powerful, but reckless to hand to an autonomous agent.

What I built

An MCP server that gives any agent safe “hands” on the lab: health checks, model management, free local inference, and a deliberately gated remote shell — allowlist only, no shell metacharacters, hard timeouts.

Built with

Python, MCP (stdio + token-gated HTTP), httpx, subprocess argv (no shell=True), launchd, Tailscale

Tested

A pytest suite covering the command-gating safety logic, runnable offline.

Result

Open source and running around the clock; an agent can operate the lab from an iPad while the dangerous operations stay locked behind validated tools.

Pythonshellgatedtools7sourcepublic
AI AutomationLive

Self-Hosted AI Email Agent

Daily inbox review was noisy and manual, with important messages mixed into low-priority mail.

What I built

A local agent that pulls mail over IMAP, uses a local model to triage and summarize, then sends a Telegram digest.

Built with

TypeScript, Node, imapflow, mailparser, Ollama, SQLite, Telegram Bot API, launchd

Tested

Test-connection and dry-run paths, SQLite dedupe for idempotency, and cost reporting per run.

Result

A self-hosted morning digest that runs on schedule, entirely on local models at $0 API cost.

TypeScriptruntimescheduledcost$0 APIpipelineimap → AI → telegram
Document AIIn progress

BOL Extractor

Bills of lading are still often reviewed and keyed by hand, which slows operations and creates avoidable data-entry risk.

What I built

An in-progress extractor that turns BOL documents into structured shipment data with validation and review-ready output.

Built with

OCR / document parsing, LLM structured extraction, JSON schema validation, field checks, export workflow

Tested

Planned around sample BOL fixtures, required-field checks, edge-case documents, and regression tests for extraction quality.

Result

In progress: designed to cut manual BOL entry and make shipment data easier to review, reuse, and automate.

Document AIstatusin progresssourcegithubdomainlogistics