Portfolio

Infrastructure I built and run. Each entry is written up with enough detail that a sceptical reader can check it, and the ones that failed are written up too.

Case studies

Hover or focus any row for the short version.

terse 58% fewer tokens open

A proxy in front of MCP tool servers that losslessly compresses what they return. If a payload cannot be proven to reconstruct exactly, the original is forwarded untouched — lossless is the default, not a mode. Public, MIT, with a benchmark harness in the repo so you can measure the saving on your own tools.

terse2bf2951 · 106 files
src/terse/            the codec, proxy and policy
scripts/bench/        the TOON comparison in this page
tests/                32 test files
corpus/               pinned benchmark payloads
BENCHMARKS.md         every figure, dated
VERIFY.md             how to check the claims

Generated from the repository, not drawn. Browse it.

Lodestone 5 of 10 at real scale open

Local retrieval over years of my own notes. Semantic search beat keyword search at 1,271 documents and lost to it at 57,500; the write-up leads with that. Includes a pre-registered kill gate, negative controls, and pooled blind judging.

Frostline 50,083 well records open

Spatial models over the public Michigan well record. Depth is predictable from location — Moran's I 0.393 — and yield is not, at 0.089. A promising target was cut once it proved to be ~96% a restatement of depth.

frostline6f30ca6 · 113 files
template/scripts/     the Track B pipeline — export, backtest,
                      calibration audit, brief generation
template/src/         the estimator surface itself
plans/                14 planning documents, including the
                      negative results that closed a line of work
docs/                 architecture
site/                 the public build

Generated from the repository. Two directories are withheld: the lead and outreach trees are live business data, not engineering.

RunEcho Go · tree-sitter open

A guard layer for coding-agent sessions: symbol lookup, edit-scope contracts, pre-commit checks. Its parser engine is chosen per language by one test — whether a cheap shortcut would guess wrong, because a wrong guess fails silently.

RunEchoec138df · 238 files
cmd/                  runecho-guard, -ir, -mcp
internal/guard/       the pre-commit dimension
internal/contract/    edit-scope contracts
internal/claims/      claim verification
bench/                token-cost measurements
testdata/             101 Go test files across the tree

Generated from the repository, not drawn. Browse it.

Origin Sentinel staged self-heal open

Origin-health detection for tunnelled services — the failure a healthy edge hides. It shipped without write access and earned remediation only once its classifications held up in the field.

Multi-provider LLM gateway spend measured open

Routes one coding agent across several model providers by task, with secrets kept out of the environment and cost tracked against a budget rather than estimated after the fact.

Live sites

ericminish.com self-hosted open

This site. Static files, no build step, no third-party requests, rsynced into a container on my own hardware and served by Caddy behind a tunnel.

nmwelldrilling.com reference build open

A contractor-facing reference build, end to end. It is labelled a sample on the page itself — a demo that pretends to be a client is a lie with a deploy pipeline.

thefrostlineco.com business surface open

The business surface for managed intake work, deliberately kept off this site. Separate identity, separate stack, separate promises.

ttrpg.ericminish.com campaign workspace open

The Campaign Table — a tabletop RPG workspace built on extracted rulebook PDFs. FastAPI and a React SPA in one container on its own LXC, deployed by CI with a canary step and a rollback path, and two staging containers behind it so changes land somewhere else first.

Also running

Knowledge graph 442 MB image private

Durable memory my agents write into by proposal only, every fact reviewed before it lands. Moving embeddings to a sidecar took the production image from 2.14 GB to 442 MB; trimming the tool surface cut one response from 271 KB to 26 KB.

Competitive intelligence private client private

A weekly market-intelligence pipeline. The model may never author a source — every citation is backfilled from the collector that actually fetched it, and a test fails the build if a client name is ever hard-coded into the repository.

NFLsignal auction board private

Projection and auction-price engine for fantasy football. Players with no honest baseline to compare against return null rather than a fabricated number that looks authoritative.

miwine news ingestion private

Links winery news to a known entity list. A deterministic matcher proposes candidates and the language model may only confirm or reject them — it is never allowed to invent one.

Honeyslate task scheduler private

A small scheduling app — FastAPI, a Svelte front end and Postgres — running in its own container behind a tunnel. Built to be used rather than demonstrated.

Homelab 10 nodes open

Ten machines under Proxmox carrying real routing, monitoring and backups — where a claim about how something fails is something I have watched rather than read.

Browser terminal SSO · no open ports private

A persistent multiplexed shell published through an identity-proxied tunnel. Same live session from any device, nothing listening on the public internet, and no session survives without single sign-on. It is also why the agent work on this page is routine rather than theoretical — a long job keeps running when the laptop closes, and I can look in on it from anywhere without leaving anything listening.

Workflow state systems private work private

Internal operations work turning messy handoffs into explicit states and next actions. Most automation failures I have cleaned up were not automation failures — they were ambiguous state with a scheduler on top.

The terminal

My whole working environment is a browser tab. A terminal multiplexer runs on a machine at home, fronted by a small web terminal, published through an identity-proxied tunnel — no port is open to the internet and no session starts without single sign-on. Opening the same address from a phone, a laptop or a borrowed machine attaches to the same live session, so work does not have a device attached to it.

Below is a model of that console on an ordinary day — a rail of agent sessions beside the one that is open. Hover it, or give it focus, to watch it fill in.

A model of the console, not a capture of a real session. The sessions, their output and the usage figures are illustrative; no host name, address, path or session content from the actual environment appears here. The surface is worth describing, its location is not.

Email is the best way to reach me — [email protected].