everything else · 2019 → now

i build the whole thing.
pipeline, model, agent, ui.

some run in production with other people depending on them. some run only for me. ordered by how hard the problem was, newest sections at the bottom. where something is private i've said so instead of linking a repo you can't open.

01production real usersplex

bott weston

a multi-agent "detective team" that answers data questions — over our metrics docs, looker, bigquery and the audience service.
the interesting problem wasn't retrieval. it was staying the same thing on four surfaces. people ask it from slack, from linear, from an mcp client, and from the docs site. each one has different affordances — threading, mentions, streaming, message length, auth, who's allowed to see what. the easy version is four bots that drift apart in a month.
so the agent is one core with surface adapters, and the hard questions live in the core. two mcp endpoints — one that walks a structured detective workflow, one that exposes raw tools — behind plex.tv token auth with role gating, so the same question from slack and from an ide gets the same answer and the same permissions. the piece i'm proudest of is the extension contract: a CONTRIBUTING.md plus a claude code skill that walks another engineer through adding a capability, so it grows without me.
169files 16,961lines 4surfaces 2mcp endpoints role-gatedauth
python · fastapi · mcp · bigquery · looker · pgvector · slack bolt · linear oauth
02production has commit rightsplex

john code

an autonomous coding agent on the claude agent sdk. it's registered as a linear agent app and as a real github user, so you assign it a pr review the way you'd assign a person.
same problem as bott weston, one surface further. a coding agent has to be a first-class citizen of github — not a bot that comments, but an identity you can request review from, that shows up in the reviewers list, that linear can track as an assignee. keeping one agent coherent across "a linear issue", "a github pr" and "an mcp call" is most of the work.
and it has a write token, so the threat model is the design. it drops webhook events it authored itself — otherwise it reviews its own review and never stops. it only acts on same-repo prs from org members, never forks, because the reviewer runs with elevated permissions. webhooks are hmac-sha256 verified. the loop is plan → approve → implement → pr, with the human at the one step where being wrong is expensive.
59files 6,660lines 28/39commits mine k8sdeployed hmacverified
python · claude agent sdk · mcp · kubernetes · github app · linear agent app
03live · real money personal

joesley

a self-hosted autonomous trading system for polymarket prediction markets. five months live.
this is the one about knowing when not to use a model. six deterministic scanners — sports, insurance, weather, crypto, macro, cross-market arb — feed a fractional-kelly sizer behind a four-check risk gate: minimum 5% edge, exposure capped at 30% of bankroll, daily var under 5%, and an 8% drawdown circuit breaker. there is no llm anywhere in the execution path. it's quarantined to a six-hourly overseer that tunes scanner parameters through a guardrailed config api.
every decision is in the event log, including the 6,022 bets the risk gate refused. the shadow book is down. i'd rather show you that than not.
462,891events 4,510markets 4,295bets 6,022blocked 566commits
python · fastapi · postgres + pgvector · agno · react · shapley attribution · brier score · monte carlo
joesley trading desk
the desk — p&l, bankroll, and the twelve scanners, live right now.
joesley arbitrage graph
the arb graph: 2,295 market nodes, 7,313 edges, ranked partition-violation opportunities.
joesley decision flow
every scanner decision as it happens — pitched, skipped, blocked, with the market and the reason.
04deployed publicpersonal

cadcode

ai-native cad where the canvas is a build123d python script. me, the agent and the 3d viewport all edit the same file.
one source of truth for three editors. two decisions carry it. the agent dry-runs its edits in a sandbox and self-corrects before you see anything, then proposes a geometry diff you accept or reject — added green, removed red. and parts declare require(cond, msg) specs the agent must satisfy and cannot weaken. that constraint is my best answer so far to "how do you keep an agent honest": give it a test suite it isn't allowed to edit.
the print planner searches ~48 orientations with removability-weighted support cost, then ground-truths the finalists against a real slicer — parsing exact tree-support grams out of the g-code — and packs as few bed-sized plates as it can.
29,231lines in 6 weeks 121commits 9projects modelled ~48orientations searched
react · typescript · monaco · three.js · fastapi · build123d · pydanticai · rapier · orcaslicer
parts i actually printed — rendered live by cadcode's own kernel
dishrack base
dishrack / base
cutlery cup
dishrack / cutlery cup
plate module
dishrack / plate module
funnel nozzle
funnel / nozzle
soapbox top
soapbox / top
modbox tray
modbox / tray
medbox sleeve
medbox / sleeve
every one of these is a python function. change TOWER_WIDTH and the whole family re-derives.
05agenticpersonal

banana

scrapes jobs, scores them with hybrid rule + semantic ranking, then researches, decides and applies.
pointed at a genuinely adversarial, unstructured task. the part i'd defend in review is the "unresolved profile gaps" concept — the agent tracks what it doesn't know about me and asks, instead of hallucinating a cover letter. it auto-skipped 47,554 of the 90,288 postings it found. total model spend across 29,565 calls: $24.39.
90,288jobs 10,671companies 29,565llm calls $24.39total spend 387commits
python · fastapi · htmx · plotly · sqlalchemy · postgres
06not aipersonal

pew-pew-party-pop

a 2d team-deathmatch shooter in godot with ggpo-style rollback netcode, built in a six-day sprint.
rollback netcode is where most hobby multiplayer dies. every synced object has to be frame-perfectly deterministic across two machines resimulating the same frame — which means no randf(), no wall-clock reads, no call_deferred(), and every float in saved state snapped to fixed precision. get one wrong and the desync shows up three seconds later as two players seeing different worlds.
the progression is a roguelike inversion: dying grants stacking upgrades, so losing is the comeback mechanic.
6,807lines gdscript 99commits in 6 days 19-section design doc 18upgrades
godot 4.5 · gdscript · godot-rollback-netcode
07adopted at workpublicpersonal → plex

worlds

deploy a folder of static files, get a subdomain — with database, ai, uploads, realtime and identity behind one <script> tag.
the api is the whole product. worlds.db.collection(), worlds.ai.complete(), worlds.uploads.put() — no keys, no config, identity resolved at the edge. i built it for myself and it got picked up at work.
its readme also carries a warning i'd write again: "fully vibe-coded, nobody has deeply audited the internals, don't put anything you'd cry over behind it." knowing which of your own things to trust is part of the job.
222commits on the work fork sqlite+ s3 snapshot durability 1script tag
typescript · sqlite · websockets · gemini · google oauth
08shippedpersonal

agentkit → hot wheels ios

a zero-dependency swift agent runtime, and the app built on it whose assistant tool-calls against on-device sqlite.
writing the loop yourself is the only way to actually understand one. tool registry, typed dependency injection, an AsyncStream of agent events, and a memory window that will never split a tool call from its result — that last one is the bug everybody hits and nobody writes down.
then i consumed it in a swift 6 strict-concurrency app: point the camera at a car's packaging, vision reads the barcode, it's in your collection.
18,602lines ios 61swift files grdb + fts5on device swift 6strict concurrency
swift 6 · swiftui · grdb · vision · bun · hono · drizzle
09app storepersonal

neon game of life

conway's game of life on a metal compute kernel, with a procedural neon shader and an interactive home-screen widget.
started in 2019 as a spritekit toy, rewritten end-to-end on metal + swiftui in 2026. grids to 300×300 stepping on the gpu, 12 rulesets plus a custom b/s builder, and full round-trip rle so it interoperates with the lifewiki pattern ecosystem. it's here as the counterweight — the rest of this page is python and agents, and i'd rather show you i can also write a compute shader.
2019 → 2026seven years 206commits 102swift files gpucompute
swift · metal · swiftui · widgetkit
neon game of life running
neon pattern library
neon discover
actual app store screenshots. the neon is a procedural fragment shader, the stepping is a metal compute kernel.

and the rest of it

smaller, older, or supporting. listed because the volume is the point.

the unified recommender

one embedding space over long-form titles, live channels and free text. beat the incumbent by +39–49% at every cutoff. the better story: i found the production space had collapsed — nearly every sampled pair above 0.95 cosine — while a live experiment could still route users to it. neighbour-quality evals looked fine and would have passed every collapsed run.

relative figures only — the absolutes are my employer's

the homelab

81 containers, ~30 self-hosted stacks, one cloudflare tunnel, a gpu. media, photos, books, dashboards, agents, game servers. this page is served from it.

it is also the reason i know what an ivfflat probe does

datatown

internal data-tools spa. deep links are designed so agents can cite a doc down to a single property path.

215 commits · #1 author · react 19 at max ts strictness

pinky

the ml platform behind the recommenders — training, evaluation, serving.

908 commits · #1 author

squash rat

league tracker with elo ratings and round-robin matchmaking, for a game i actually play.

go (chi) · solidjs · cloudflare access

word-mutation

a word-mutation graph, written in python then deliberately rewritten in rust to find out what the rewrite actually bought.

rust · rayon · dashmap

phototag

ai photo pipeline for immich: dedup by content hash at intake, openai vision for tags and ratings written into exif, then upload. videos skip the model. resumable from a state db.

python · openai vision · exiftool · sqlite
enzo maruffa
data / agents
back
ask the
agent anything
totals
projects here18
in production4
languages7
oldest2019
every number on this page
came from the repo or the db.