Work

Eight systems I built and run, from a live medical SaaS to a paper-only trading experiment. Each one says what it does, a decision I'd defend, and where the claim stops. The private ones are described without their source.

01

Next.js · Firebase · Stripe

Live product

Civil Surgeon

A multi-tenant product I built and operate for civil-surgeon practices: bilingual patient intake, an authenticated case dashboard, exam workflows, subscription billing, and completed USCIS I-693 PDFs.

Decision
Firebase Auth identifies practice users, signed Stripe webhooks drive subscription state, and server routes verify record ownership before any case or PDF operation.
Proof
The product is live and used by real practices. Each practice gets a shareable intake link; staff review submissions, complete conditional vaccine and TB workflows, and generate the final PDF from one dashboard.
Boundary
No customer data, customer count, revenue, medical-outcome claim, or compliance certification is disclosed here.
Visit civilsurgeon.app ↗

02

Rust · static analysis

Private project

Site Mapper

A browserless Rust library and CLI that analyzes authorized website artifacts (HTML, CSS, JavaScript, source maps, metadata, WebAssembly) and lowers them into provenance-bound API candidates and typed request recipes.

Decision
Unresolved behavior stays visible as a typed blocker instead of becoming a completeness claim. Acquisition and analysis stay separate from request replay.
Proof
Across 19 production Rust crates, a controlled eight-artifact oracle recovered all 13 expected destinations and signatures with no extra results.
Boundary
The repository stays private while its release gate, documentation, licensing, CI, and synthetic demo are prepared for a clean public release.

03

Local AI · evaluation

Repository not public

Speak to Me

A local-first multi-voice audiobook system that keeps exact source spans, persistent character identities, model evidence, and checksum-bound human review connected from attribution through rendering.

Decision
The renderer abstains when a speaker is unresolved instead of silently assigning the wrong character. Long-book jobs are restartable, and identity state persists in SQLite.
Proof
Exact-span provenance, checksum-bound review, and fail-closed rendering persist across restartable jobs; both source and wheel builds pass release-archive verification.
Boundary
A public release still needs a rights-clean history, fixtures, and demo before the source is linked here.

04

TypeScript · agent workflows

Public workflow available

Creator Production System

A private TypeScript system connecting research, recording, transcription, rendering, publishing, and analytics. Each stage carries its source and release evidence forward instead of relying on a final visual check.

Decision
Copy-on-write intake preserves source media, digest-bound checks invalidate stale releases, and explicit state gates decide what can move forward.
Proof
The private workspace holds 108 project manifests; resumable jobs and digest-bound invalidation keep interrupted or stale work from being released.
Boundary
The public HyperFrames repository documents a related transcript-locked workflow, rendered-frame QA, and live seekable examples. It is not the full private system.
See the public workflow ↗

05

Browser tooling · CLI

Private project

Google Flow Browser Bridge

A personal-use Node.js CLI and localhost bridge, built by mapping browser-visible request shapes, that turns an already-authenticated Google Flow tab into project listing, project creation, and batch image generation, while short-lived session material stays inside the page.

Decision
The page makes requests with its existing session; the CLI never receives Google cookies or access tokens. A per-run localhost token gates bridge jobs, and returned data is limited to nonsensitive generation metadata.
Proof
Live June 2026 verification created new projects and produced 1024×1024 results in both new and existing projects; typecheck plus bridge, server, and CDP checks pass.
Boundary
A personal research prototype against a browser workflow — not an authentication bypass, public API, official Google integration, or supported production system. Source and credentials are not published.

06

Python · reproducible research

Repository not public

Weather markets, tested without inventing an edge

A paper-only evaluation pipeline combining exact-vintage NOAA forecasts, settlement stations, executable order-book depth, latency, fees, missingness, and capacity.

Decision
Settlement, data vintage, and executable liquidity are first-class inputs. The one-time holdout cannot be reopened to tune a better-looking result.
Proof
The archive covers 8,216 market events and a 9,636-row provenance manifest with zero verifier errors, including exact-vintage NOAA forecasts and executable order-book data.
Boundary
The 132-event holdout had insufficient executable history for a valid strategy conclusion, so the system selected no strategy. No edge is claimed.

07

macOS · local-first

Open source

Local Flow

A macOS dictation app that records speech, transcribes it locally with whisper.cpp, cleans the transcript through a local Ollama model, and types the result at the active cursor.

Decision
No cloud transcription service is required. Audio and transcripts stay on the machine during the documented workflow.
Proof
The MIT-licensed repository includes the Electron app, native cursor-paste helper, packaging setup, and an end-to-end audio test.
Boundary
A public prototype — not a production-readiness or adoption claim.
View on GitHub ↗

08

Three.js · Web Audio

Playable game

DUST — After Hours

A browser game about one little cleaning robot and a very messy studio. Play three shifts, race the fleet, or turn 64 workers loose in free play, with keyboard or touch controls and an original score.

Decision
The room and robots use procedural Three.js geometry. Saved clips capture only the rendered game and its own sound, without access to the desktop, camera, or microphone.
Proof
Recorded browser playthroughs completed all three shifts, checked every required area in Last Call, and watched all 64 workers return to their docks. Separate checks covered touch controls and saved scores.
Boundary
A single-player browser game. Progress stays in this browser; there is no account or online multiplayer.
Play DUST →

What I think about building with agents

From a year of taking these systems apart on camera.

  1. 01Don't build your own agent framework

    Let the lab maintain the loop, tool execution, and context management. Your leverage is teaching the agent your systems, not rebuilding the harness.

  2. 02Skills beat custom tools

    A markdown skill that composes existing tools is shorter, more reliable, and editable without a deploy. Only hand-code a tool when you need execution the model can't be trusted to do.

  3. 03Clean file structure is the real interface

    Repo layout and docs are how an agent understands your system. Architecture and naming are prompt engineering now.

  4. 04Codify your workflows into skills

    Anything you do twice should be written down once, so the agent runs it the same way every time.

  5. 05Check agents' work with agents

    Build verification loops instead of eyeballing output. Make the check a step in the system, not a thing you remember to do.

  6. 06Orchestrate, don't build one mega-agent

    An orchestrator dispatching focused subagents beats one agent trying to hold every job in context.

  7. 07Most SaaS is a UI over an API

    An agent can drive the API itself. Teach agents your systems instead of renting an interface.

  8. 08Build for agents, not just humans

    If you ship software, expose an API or MCP an agent can call, not just a UI a human clicks.

  9. 09The standards are still being written

    Pick opinionated conventions for building agent systems and set them before someone else does.