I work across Go, WebAssembly, local AI, distributed systems, and product engineering. Currently building agentic systems at UKG. This site is the proof — rendered by a UI framework I wrote, over a gRPC bridge I built.
Five products under one name — a budgeting app, a feed reader, an offline photo search, a coding agent and a typed LLM library. Each card opens a case study: what it does, what it is built on, what was hard, and how finished it honestly is. The framework and the transport underneath them are in Labs.
Local-first budgeting suite — 50 routes, live charts, a rules engine, an AI layer. All Go/WASM, no JS framework.
A full personal-finance app built entirely in Go compiled to WebAssembly on my own framework — transactions, budgets, goals, reports, household ownership, a financial to-do system and an on-device assistant. Offline-first, 221 internal packages behind 2,998 tests, with a motion system and i18n. Runs live at budget.earlcameron.com — try `budget`.
A self-hosted feed reader that is Go all the way down — the server, the client, and the CSS. Real gRPC in the browser; the only JavaScript that ships is a boot shim.
Google Reader's key map over a virtualised list at firehose scale — 151 subscriptions, 3,621 items — with SQLite FTS5 search, tags, notes, per-source hues and text-to-speech. Multi-tenant and deduplicated: a popular feed is polled once no matter how many people subscribe. The live demo is the shipping client with only the transport swapped.
Search your photographs by what is in them, on a laptop, with nothing leaving the machine.
A vision model describes every photograph, a segmenter outlines it, a detector finds the faces, and all of it folds into one searchable vector — offline, on a Snapdragon X2. Blending the caption's text embedding with the image embedding took "red car" from 0.80 to 1.00 precision-at-five; fixing JPEG decode, not the model, took the face stage from 82 s to 25 s.
A coding agent that assembles programs out of separately verified atoms instead of writing them in one pass.
An atom has a typed signature, a contract, declared effects and the evidence that it works; atoms compose into molecules and molecules into programs, each layer naming what discharges its guarantees. Authority comes from what an action is rather than what the model claims it needs, so a poisoned file can propose but never authorize. Written as an explicit bet, with a kill criterion.
Typed LLM operations for Go — fluent builders that return the Go type you asked for, not a wall of text.
One public API over one execution path, with retries, structured-output contracts, logging, metrics and cost tracking centralized instead of re-implemented per call site. The result envelope keeps model claims separate from measured facts, and a snapshot test over the public API surface fails the build if it drifts.
CashFlux went from first commit to a working local-first financial platform in six weeks — transactions, budgets, goals, reports, household ownership, a to-do system and an on-device assistant. These are counted from the repository, not estimated.
Infrastructure, experiments, and language research. Smaller bets — still built, still running.
Two feeds, open to anyone. Copy either address and paste it into your feed reader.
Email me at cam@earlcameron.com. The terminal has a live contact form over gRPC.
Best fit: senior systems or AI-tooling roles — Go, WebAssembly, on-device ML, agent infrastructure.