About
I'm a full-stack engineer with 6 years shipping developer tools and creator platforms. Currently focused on the boundary between AI and everyday product surfaces — I like small teams, real feedback loops, and code that ships.
Selected projects
type-safe-forms
4,200A tiny form library that infers a Zod schema from your JSX and gives you zero-runtime type safety at submit. 4.2k stars, used by 300+ teams.
creator-analytics
1,800Self-hosted analytics for indie creators — funnel, cohort, and revenue attribution in one Postgres box. Built the query engine and the dashboards.
sqlite-brain
970Embedded semantic memory for SQLite — vector search + BM25 hybrid in a single file, ships as a CGO extension.
Writing
How I run a 45-minute technical screen
The exercise I've used to hire 12 engineers over the last three years — and the two signals I actually care about.
Shipping a real feature with only server actions
One month rewriting our booking flow to lean entirely on server actions — what stayed, what broke, and the four rules I would keep for next time.
Interview prep
System designHow would you design a URL shortener that handles 100k QPS?
Start with the read/write ratio (probably 100:1) — this pushes you toward a read-optimized layout. Store the mapping in a KV like DynamoDB partitioned on the short code; cache the hot working set in a regional Redis; generate codes via a counter service (Snowflake-style) instead of hashing to avoid collisions.
TypeScriptWhat's the difference between `unknown` and `any`?
`any` opts OUT of type checking — you can call anything on it. `unknown` is the type-safe top type: you have to narrow it with a type guard before you can use it. Prefer `unknown` in library boundaries — it forces the caller to do the safety work.
BehavioralTell me about a time you disagreed with your manager.
Frame it as: what was the disagreement, what data did you bring, how did you decide who owned the call, what was the outcome. Own the outcome — even when it went their way.
Resume tips
Lead every bullet with a shipped outcome, then the technique. `Cut p99 checkout latency 640ms → 210ms by moving image transforms to the edge.` beats `Worked on checkout performance.`
One page for < 8 years of experience. Two if you have real leadership scope. Never three.
Under each role, name the team size, the stack, and ONE metric that mattered to the business. Recruiters skim for these three fields.