Built, shipped, and running.

For ten years I ran support for enterprise software companies and kept a list of things I wished I could build. I never learned to code, so the list sat there. AI changed that. This past year I built more than in the ten years before it, and the projects on this page are what came off that list.

Customer Support

Throughscan

Claude · Cloudflare Worker · live at throughscan.com

An independent support-ops audit, built as its own product and business, now live and taking real payments. A support leader exports their tickets, uploads one file, and gets the read most dashboards hide: a plain-language diagnosis of what is working and where they leak, their true median and p90 response and resolution times, the average-vs-tail gap that quietly breaks their SLAs, what customers actually contact them about by volume, their re-contact rate, and starter macros, a knowledge base, and SLA targets drafted from their own history. It's delivered as a board-ready PDF, with a free placement that shows what the file can prove before they pay. No integration, no login, just an export.

Ticket export
Measured numbers
Contact drivers
Sequenced roadmap

The operator judgment is the product. Every output is labeled measured (computed over the full file), generated (a draft to confirm), or strategy (a judgment to weigh), so a guess is never dressed up as a measurement. The hard metrics are computed deterministically over the whole export, not estimated, so an analyst can open the file and get the same result. The model key stays server-side only, behind rate limits and a spend ceiling, never in the browser.

The Throughscan landing page: a support-maturity scorecard reading 42 of 100 in foundation mode, with median and p90 response-time numbers and a build-the-foundation then audit-the-leaks framing Visit Throughscan → See a sample →
Customer Support

The Institutional-Knowledge Assistant

Claude · enterprise internal deployment

An internal AI assistant I built at my enterprise B2B SaaS day job. I loaded in a decade of product knowledge and the judgment patterns that usually take years to absorb, so instead of answering the same questions over and over, I answered each one once and the assistant generates the response from then on. As the person who onboards every new hire, it became an evergreen, on-demand source of that institutional knowledge: a new agent can get the senior answer at any hour without waiting for me.

Customer question
Grounded draft
Agent review
Reply sent

First I systematized that two-person team's knowledge and workflows, and with no added headcount we absorbed roughly 30% ticket growth over two years, driven by client and product expansion, at a 72% single-reply resolution rate. The assistant came later, to capture that judgment so the senior answer isn't trapped in my head. It follows the rule I write about: ground every answer in real documentation, keep a person between the draft and the send, and measure the customer's outcome instead of the deflection.

I rebuilt this idea from scratch in the open, as a small app that loads a help center once, drafts cited answers a human reviews, and learns from the ones you approve. A working preview of it, running against a live help center, is linked below.

Try the preview →
Consumer AI

Work the Steps

Claude Sonnet 4.6 · React Native · live on the App Store

A paid iOS app with a Claude-powered conversational guide, built for the 12-step recovery community. Daily check-ins become saved reflections, reflections surface recurring themes, and themes feed structured step work, so the hardest part of the program never starts from a blank page.

Daily check-in
Reflection
Recurring themes
Step work

Operator decisions baked in: a controlled voice and prompt architecture; per-user cost guardrails (prompt caching, daily fair-use caps, hard spend limits); a crisis path kept entirely off the model; on-device encryption at rest, with the key held in the iOS keychain; subscriptions, trials, and App Store compliance.

See how the conversation system is built →
Data Product

Cleanplate

Claude · Cloudflare Worker + D1 · live at cleanplate.app

A restaurant health-inspection product covering all of LA County. About 95% of graded restaurants carry an A, so the letter in the window can't tell you much. Cleanplate surfaces the actual 0-100 inspection score behind the grade, translates every violation code into plain English, and makes the county searchable by name, address, or ZIP, with a map view, the restaurants the county has closed right now, recent grade drops, and a weekly email of who lost a grade or got shut down.

County inspection data
Real score + plain English
Search, map, alerts
Weekly auto-refresh

The pipeline runs itself: the county's full dataset lands in a D1 database, Claude turns the violation codes into plain English, and a scheduled GitHub Action refreshes everything weekly with no hands on it. The same data-honesty rules as the support work apply. Chain restaurants are matched against a verified brand list instead of trusting name collisions, and the data-journalism pages (grade drift, repeat offenders, the riskiest month to eat out) are computed in code from the same snapshot the search runs on.

The Cleanplate search page: an explainer noting about 95% of LA County restaurants carry an A, quick filters for closures and grade drops, and restaurants listed with their real 0-100 inspection scores Visit Cleanplate → See the data pages →
Consumer AI

Reinstara

Claude · Cloudflare Worker + D1 · Stripe · live at reinstara.com

A deactivated gig driver pastes their notice, picks the platform and reason, and describes what happened. The tool writes a platform-formatted reinstatement appeal built entirely from their own facts, across six platforms (Uber, Lyft, DoorDash, Instacart, Spark, Amazon Flex). A free readiness check shows the strongest version of their case before anyone pays; the full letter is a one-time charge.

Paste the notice
Platform + reason
Facts + evidence
Formatted appeal

The rails are the product. The letter is written only from the user's stated facts, never fabricated; it never promises reactivation, only a stronger case; and it reads the way the worker would actually put it, plain and human. A per-platform knowledge base of the real appeal channels, deadlines, and winning angles drives every draft, and the model key stays server-side behind rate limits and a spend ceiling.

The Reinstara appeal tool: a browser-framed walkthrough on the 'Why were you deactivated?' step with DoorDash picked, reason options tagged recoverable or hard, and a six-step progress bar from platform to finished letter Visit Reinstara →
Consumer AI

TrueTotal

Claude · Cloudflare Worker + D1 · Stripe · live at gettruetotal.com

When an insurer totals a car, the payout is often lowballed. The owner enters the claim details and the settlement offer, and the tool builds a documented dispute from their own numbers: the comparable-vehicle argument, the specific line items worth challenging, and a formatted letter to the adjuster. A free gap-check flags whether an offer looks low before anyone pays.

Claim + offer
Comparable read
Line items to contest
Dispute letter

Same discipline as the rest of the work: the letter argues only from the owner's stated figures, never invents a valuation, and it's framed as self-help with a clear line that it isn't legal advice. The mechanism is grounded in how total-loss valuations actually get contested, and the key stays server-side behind rate limits and a spend cap.

The TrueTotal landing page: the software that valued your car made mistakes, we find them in its own report, with a sample CCC valuation report flagging condition and negotiation deductions and 773 dollars recovered, plus an upload-your-report dropzone Visit TrueTotal →
Real Estate

Virtual TC

Claude · Make.com · Airtable · pilot in motion

An 11-module pipeline. An executed purchase agreement goes in; a structured deal record, a client timeline email, and calendar deadline events come out, in minutes.

Contract PDF
AI extraction
Deal record
Timeline email
Deadline events

Built for messy reality: extraction against scanned, inconsistent PDFs; deadline logic derived from the contract's own terms; framed AI-assisted and human-verified, because liability lives in the gaps.

Virtual TC output: the generated deal timeline email with deal summary, key dates and deadlines, and next steps
Voice AI

OfferLetter

Claude · browser voice capture · Cloudflare Pages · retired

A web form covering every field of the California purchase agreement, driven by voice. The agent speaks the deal in plain language, the fields populate across the form, the address geocodes itself, and the finished data maps into the official CAR PDF, routed to the buyer for review and then to the listing agent. Thirty to forty-five minutes of form entry became about five minutes of talking.

OfferLetter voice intake: a spoken deal transcript and 18 form fields populated from a single voice input, with the street address geocoded

Built for how agents actually work: profile auto-fill, support for up to three buyers, contingency math, close-of-escrow as days or a date, and voice input that never makes you narrate field names.

Status: built and demonstrated. Stack: Cloudflare Pages, browser voice capture, Claude API via Make.com, Google Maps geocoding.

Measurement

Two Lead-Generation Properties

GA4 · Google Tag Manager · Search Console · live

Two local lead-generation sites, live and in production: about 40 pages of data-backed content between them, built on state licensing datasets rather than scraped filler. GA4 and Google Tag Manager are wired end to end, Search Console runs on both, conversion events fire on real form submissions, and AI crawlers are deliberately allowed so the sites are citable by answer engines.

Public dataset
Data-backed pages
Search + AI visibility
Measured leads

Status: live, with partner agreements in negotiation. Deliberately unnamed here; they compete in their own markets. They're where I pressure-test how to instrument funnels and prove outcomes before claiming them.

In Progress

Recovery Navigator

Static web app · local storage only · no accounts by design · in progress

A step-by-step recovery roadmap built with a close friend who lost his home in the Eaton fire: the deadlines, agencies, and paperwork that arrive after the news trucks leave, sequenced so the right thing surfaces at the right time. Contacts live in a shared resources directory, so every agency gets verified once instead of once per step it appears on.

Where are you?
Phased roadmap
Verified contacts
Progress, kept locally

The defining decision: no accounts and no server. Fire survivors are prime scam targets, so recovery data never leaves their device (local storage plus a manual export file). The intake never assumes, either: it asks where you are in the process and only marks done what you confirm you've actually handled.

Recovery Navigator: the focused next step, securing temporary housing, with verified contacts for 211 LA, the Red Cross, and FEMA inside a phased recovery path of 37 steps

Status: in progress. Every step gets verified with the survivor it was built for before it goes live.

Building or leading support AI? Let's compare notes.

If you're working on AI that has to hold up in a real support queue, I'm always glad to talk it through.