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
the desk — p&l, bankroll, and the twelve scanners, live right now.
the arb graph: 2,295 market nodes, 7,313 edges, ranked partition-violation opportunities.
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
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
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