Aron Greenspan
I build with coding agents at production scale — and the tooling that makes it hold up. 95,000 lines of TypeScript, almost none of it typed by hand, coherent because the conventions and the codebase map came before the code. Underneath: a rules AST that compiles to three execution targets, and a permissions engine that walks relationships instead of checking role strings.
What I'm looking for
Staff / principal IC
Systems design across boundaries — the work where the leverage is in how the pieces compose, not in any one service.
Founding engineer
Full-stack breadth with production discipline: auth, tenancy, jobs, infrastructure and frontend, shipped and tested.
Agent infrastructure
The tooling layer for coding agents — sessions, orchestration, evaluation, and codebase representations that don't drift.
Advisory / contract
Architecture review, authorization and multi-tenancy design, or standing up the security-critical foundation once, properly.
Selected work
template
A production SaaS foundation where the security-critical subsystems are built, tested and composed rather than stubbed. ReBAC authorization over the real data graph, multi-tenancy carried through the query and permission layers, field-level encryption with a scheduled key-rotation job, an app-events bus, webhooks, and 111 route modules that auto-register, emit OpenAPI 3.1, and regenerate a typed SDK.
17 subsystems benchmarked against Auth0, Clerk, Permit.io, Hasura and Temporal →
json-rules · permissions · transitions
One serializable Condition AST with 38 operators and three backends: evaluate in
memory, compile to a Prisma query, or compile to a PostgreSQL WHERE clause.
Authorization, workflow guards, form logic and query filtering then become the
same primitive pointed at different questions — so a rule authored once is
enforceable at whichever layer it has to run.
foundry · agent-session · atlas
Coding agents as a first-class part of the toolchain, and the tooling that makes that reliable: persistent streaming agent sessions instead of one-shot invocations, orchestration with context layers and capability gating, and a codebase map that only ever asserts what is mechanically true so it cannot drift.
bench — an agentic-engineering benchmark scored on cruft vs. elegance →
How I work
- Find the primitive. Most systems re-solve the same problem badly in five places. The win is usually one small, enforceable model that all five become consumers of.
- Purpose before mechanism. Working a mechanism without holding what it is for produces category errors that feel like progress — stripping the load-bearing part, calling a dead snapshot fine.
- Guards live in the primitive. Once, at the boundary — not replicated at every call site, and not re-checking a contract a library already guarantees.
- Documentation that cannot lie. Comments rot. Generated maps constrained to mechanical truth don't. Prefer the second.
- Composition over accumulation. Twelve repositories that form one system are worth more than twelve that merely coexist.
Stack
TypeScript · Bun · Hono · PostgreSQL · Prisma 7 · React · TanStack · Vite · Tailwind v4 · Redis · BullMQ · Turborepo · Docker · GitHub Actions
Also
I write about governance and institutional design — treating the cost of coordination as an engineering problem rather than a political one. Designs for cooperation at scale →