Ten years, one graph
Everything I built, and what it led to.
Every node is something I built, contributed, or wrote. Edges say what led to what. Pick an area to follow one thread, drag the timeline to watch the graph and the experience underneath it grow, or press play.
Drag to pan. Pinch or hold Ctrl and scroll to zoom. Swipe sideways on a trackpad to move through the years.
Cumulative experience by area
Frontend, live
State modules doing complex things.
Reactive logic lives in a machine, never in useEffect. These two pages are built that way with Tailwind and the state-modules package below.
The journey graph
The graph at the top of this page: a time-axis layout with area lanes, a scrubber that grows the graph and the experience chart together, keyboard chapter stepping, and playback. One machine, two callback actors, no useEffect.
- layout as a pure function
- playback and keyboard as actors
- selection and hover in context
A board that survives a bad network
Kanban with pointer-driven drag and drop, optimistic writes queued to a fake server you can make flaky or offline, retry with backoff, rollback, undo and redo as a command stack, and full keyboard control. The machine's state is printed live.
- parallel Interaction and Sync regions
- optimistic queue with rollback
- undo and redo history
Work, as patterns
Most of it is private. These are the patterns, rebuilt from scratch.
Each package re-implements one pattern from that work, small enough to read in a sitting, with its tests and a README that says what it leaves out.
cascading-modules
An ESLint plugin that turns a module discipline into lint errors.
- domain, core, machine, hooks, component layering
- star-only barrels
- options-object signatures
- ALL CAPS abbreviations
state-modules
XState providers that are a component, a higher-order component, and a hook namespace at once.
- createStateProvider with a compile-time prop collision guard
- actors derived from a typed map
- a debounced batching loader as a state module
next-typed-routes
Route handlers whose types flow to the browser call with no duplicated request or response types.
- zod at the boundary
- typeof import as the contract
- one HTTP envelope
copytext
User-facing copy as typed values, so a missing translation is a compile error.
- CopyText values with JSX
- templated copy
- a provider family bound to injected persistence
service-contract
One contract across the stack: Result, envelope, an error-formatter chain, and correlated logging.
- Result at the seam, exceptions inside
- formatter chains with local prepend
- environment by sub-path export
spec-gateway
A programmable API gateway where policies are functions and every spec error is thrown at load time.
- OpenAPI extension routing
- inbound and outbound policy order proven by trace
- services as interfaces
hexagonal-store
A typed storage kernel that owns no storage vocabulary; adapters plug in at runtime.
- phantom owner types on columns
- composition throws, operations return
- one contract suite over two adapters
kube
A cluster you can rebuild from git: Flux, kustomize overlays, sops with age, ordered migrations.
- git as the source of truth
- secrets committed encrypted
- validated in CI with no cluster
devcontainer
The container is the workspace; the machine is just where it runs, locally or over ssh.
- pinned toolchain with a doctor
- persistent caches
- remote docker context and devcontainer up
pg-extension-kit
A complete Postgres extension toolchain around a small audit-log extension.
- numbered module tree as build order
- template-database test schedules
- annotated bench queries with ratio gates
- a remote runner
fsjobs
A jobs framework where the filesystem is the source of truth and workers outlive the notebook.
- proxy-launched detached processes
- uuid imposter detection
- partitioned outputs read as one sequence
license-catalogue
A reviewed inventory with machine verdicts, where the set logic lives in Postgres and evaluation cannot repeat itself.
- Repo, Object, Available triple
- idempotent evaluation by construction
- retry as a transparent proxy
trainkit
The orchestration around a PyTorch training loop: striding, exact resume, live learning-rate control.
- shape-bucketed batches with DDP striding
- config re-broadcast every step
- checkpoint hygiene and fault injection
Open source
Upstream, merged or not.
2026 · alita-moore/deno-lsp-performance
Six defects in deno lsp found by counting directory opens instead of wall-clock time; five patched and measured on a 53-project workspace, go-to-definition from 32 s to 131 ms, every result with a reproduction scriptThe maintainers offered to upstream the patches.
2021 · ethereum/EIPs, ethereum/EIP-Bot
EIP Linting Bot and the review, auto-merge, and stagnation automation for the EIPs repositoryMerged. Maintained for a year with direct commit rights; later succeeded by eip-review-bot.
2021 · ethereum/execution-specs
EIP-1559 JSON-RPC diff (baseFeePerGas)Merged.
2021 · ethereum/execution-apis
First multi-file OpenRPC specification for the execution JSON-RPCClosed in favour of the maintainers' layout; the per-method issue set stayed.
2025 · supabase/auth, auth-js, auth-py
Admin endpoint to mint a PKCE auth code for a user id, enabling one project to act as auth authority for othersNot merged. Shipped locally as a workaround.
2025 · skypilot-org/skypilot
SSH tunnels instead of plaintext HTTP between the serve load balancer and replicasNot merged. Two smaller fixes (uvicorn 0.36, Vast.ai docker config) alongside.
Writing
Measured before believed.
Aug 2026
Why deno lsp takes a hundred seconds to answer the first requestSix defects found by counting directory opens instead of wall-clock time, five with patches measured on a real 53-project workspace: go-to-definition from 32 seconds to 131 milliseconds. Every result has a reproduction script.
Aug 2026
Two XState patterns: state providers and stateful actorsA proposal to the XState maintainers for making one rule enforceable: effects live in the machine, never in useEffect. The patterns are the ones in the state-modules package here.