Sheet 02 — Detail drawings

Selected work

Personal builds, open where I can open them. My employer work is described on the résumé sheet; this is the code you can actually read.

DWG 001 — Sheet 01 of 07 Live

Clip Portal

A clip search where every result opens on the frame it matched

A search over 300 public-domain films from the Prelinger collection, 66 hours, where each result is a frame at a second and clicking it seeks the player there. Pick clips into a set and an Evaluate page says what you would be licensing: runtime, decades, narrated or silent, near-duplicate pairs, a stratified sample, a manifest. The same search answers agents through three MCP tools, and a retrieval eval over 100 hand-written queries scores every path the site serves.

The index is 264,626 frames turned into vectors by an image model, kept in Postgres with pgvector and written a second time as a Lance dataset on object storage. The same route answers out of either store, within two rows of a hundred on recall, so the store is a latency and cost choice and the eval says which.

A sampling thesis was tested and turned down. Scene cuts plus the frame where a narrator points took a tenth of the frames of one a second, and recall at ten fell from 0.39 to 0.20. The default search runs over every sampled frame and the write-up says why.

Built through Claude Code in a four-step loop, one implementer subagent per issue and an adversarial review before every PR, with every step and its model on the project log. A $25 monthly ceiling is enforced by an hourly Worker because neither provider sells a hard cap.

frames embedded, 300 films
264,626 frames embedded, 300 films
recall at 10, 100 queries
0.39 recall at 10, 100 queries
scrub to seek, median
224 ms scrub to seek, median
  • Next.js
  • TypeScript
  • Cloudflare Workers
  • Postgres + pgvector
  • Lance
  • SigLIP
  • MCP
  • OpenTelemetry
  • Python
DWG 002 — Sheet 02 of 07 Open source

Receipts

An investigation agent that has to show its receipts

An investigation agent for Honeycomb that works a scripted incident in a real Honeycomb environment over the hosted MCP and has to cite the query and rows behind every claim. An eval harness with injected faults and known ground truth grades it on whether the answer was right, not on which tools it called.

Three minutes: a scripted incident emitted, the heatmap that finds it, one investigation ending on the filed report, and the graded run in Agent Timeline.

Two rules carry the project. A hypothesis is reportable only with a query that actually ran and a negation query that ran too, and the report has to list what was in scope and never checked. Both are validated in code against the run’s own tool log, not by a model.

The other half is the grader. A wrong top hypothesis at high confidence costs more than a wrong one hedged low, and a right answer hedged low costs a little too, so the ordering holds: confident-wrong scores below hedged-wrong, which scores below hedged-right, which scores below confident-right. A unit test pins that order.

Thirty of thirty Sonnet runs named the right cause or, on a control, said there was no incident, mean total 0.92. A second model, Nemotron, passes Honeycomb’s own process evaluator on all 30 runs and scores under 0.50 here on 25 of them, which is the case for grading outcomes instead of process.

top hypothesis right, Sonnet
30 of 30 top hypothesis right, Sonnet
mean total score, -1 to 1
0.92 mean total score, -1 to 1
thirty investigations, Sonnet
$16.09 thirty investigations, Sonnet
  • Python
  • Claude API
  • Honeycomb MCP
  • OpenTelemetry GenAI
  • pydantic
  • pytest
DWG 003 — Sheet 03 of 07 Client work

Agent Blue

An operations agent that has to prove what it says

An operations platform I built alone. A conservation nonprofit in Alaska runs their day to day on it, along with a handful of other client orgs. Chat agent on one side, a drafting API on the other, and a fact checker between the output and the person reading it.

The agent lives in Slack, Discord, and WhatsApp with thread memory, a SQLite fact store, and ChromaDB retrieval over each org’s own documents. It runs on a local model through Ollama, so the documents stay on their infrastructure.

A Cloudflare Workers API drafts briefings, reports, and replies with Claude. A grounded prompt refuses to invent, then a Haiku claim extractor reads back every generated statement and marks it grounded, partial, or unsupported. The document is held until a person clears the flagged ones.

That second pass is the piece I care about. A generated briefing reads exactly as well when it is wrong, so the check cannot be a person reading it. The same idea is what I would bring to an agent that troubleshoots production: make it cite the rows behind the claim, and make it say what it did not look at.

About 1,400 commits since January 2026 and 142 test files. The Python core traces into Honeycomb over OpenTelemetry.

chat platforms, one agent
3 chat platforms, one agent
test files
142 test files
commits since Jan 2026
1,400 commits since Jan 2026
  • Python
  • TypeScript
  • Claude API
  • Cloudflare Workers
  • ChromaDB
  • Ollama
  • OpenTelemetry
DWG 004 — Sheet 04 of 07 Open source

Earshot

On-device speech-to-text SDK

One Kotlin core drives speech recognition on both iOS and Android. Whisper through WhisperKit on iOS, ONNX Runtime on Android. No audio leaves the phone.

Built to answer a question I kept hitting at work: can you get real transcription quality without shipping a user’s voice to somebody’s cloud. You can.

The hard part was memory. Whisper models plus an audio ring buffer plus the app itself will get you killed by the Android low-memory killer on mid-tier hardware. Rework of the buffering and model loading path took peak memory from 367MB to 230MB.

Accuracy is measured, not claimed: 8.38% word error rate against 14.97% for the platform recognizer on the same device and the same audio.

peak memory cut
37% peak memory cut
WER vs 14.97% platform
8.38% WER vs 14.97% platform
platforms, one core
2 platforms, one core
  • Kotlin
  • Swift
  • WhisperKit
  • ONNX Runtime
  • KMP
DWG 005 — Sheet 05 of 07 Open source

Pencil Count

Local vision pipeline over 406,769 ballots

A six-stage funnel that reads handwritten write-in votes off scanned ballot images using a 12B vision model running locally, and reconciles the tally against the official count.

Public ballot scans, a local model, and no third party in the loop. Every stage of the funnel is inspectable, which is the whole point when the output is an election number.

The result landed within 1.4% of the official county totals. The gap is the interesting part, and the pipeline reports where it came from rather than hiding it in an aggregate.

It runs on one workstation over a few days. The cost of that is throughput, and for a job that has to be auditable afterward it is the right trade.

ballots processed
406,769 ballots processed
variance vs official
1.4% variance vs official
pipeline stages
6 pipeline stages
  • Python
  • Local 12B VLM
  • OCR
  • Batch pipeline
DWG 006 — Sheet 06 of 07 Personal build

Sitewinder

Multimodal retrieval over your own video

An Android app that composes Whisper ASR, MiniLM embeddings, and Gemma 3 1B entirely on device, so you can ask questions about your own video library with the radio off.

Transcribe, embed, retrieve, answer. Video and speech become one searchable index, so a plain question returns the passage that answers it instead of a filename.

Three models in one process on a phone, which makes the retrieval design the whole problem: what can stay resident, what has to be paged, what can be precomputed while charging. Getting good answers out of a small model means putting the right context in front of it, and there is no room to be sloppy about which rows those are.

models, one device
3 models, one device
network calls
0 network calls
  • Kotlin
  • Whisper
  • MiniLM
  • Gemma 3 1B
  • Vector search
DWG 007 — Sheet 07 of 07 Open source

SigPocket

Mobile observability client for SigNoz

Ten years of observability work compressed into the screen you actually have on you when something pages. A mobile client for SigNoz, built because I wanted it.

Traces, metrics, and logs shaped for a phone rather than a dashboard shrunk to fit one. Different information hierarchy, different defaults, same data.

  • TypeScript
  • React Native
  • OpenTelemetry
  • SigNoz

Appendix A — Also on the bench

Smaller sheets

  • A01

    Notch

    Greasing-the-groove watch apps, shipped to the App Store and Google Play.

  • A02

    potato-mesh

    Federated Meshtastic and Meshcore node dashboard for a local community. No MQTT clutter.

    View →
  • A03

    RF Observatory

    Software-defined radio on a Raspberry Pi 5. ADS-B aircraft, AIS vessels, spectrum anomaly baselining.

  • A04

    redux-devtools-bubbles-monitor

    An unobtrusive monitor for Redux DevTools. Still in use years later.

    View →
  • A05

    Code to Muscle LLC

    The entity behind the watch apps, registered for federal SBIR/STTR work.

    View →

Appendix B — Field notes

Sampling frames where the narrator points

A regex over pointing language picked the frames for a briefing. What happened when I ported it to 300 public-domain films, and why the sampler decides more than the search box does.

Read sheet 05.1 →
github.com/eknuth All field notes