Work

Systems I shipped and stayed on for

Each case study runs the same shape: the problem, the constraints I was under, the decisions I made, and — the part most portfolios skip — what each of those decisions cost.

5 case studies
5 projects

5 projects shown

  • Full-stack
  • Payments
Live

Ledgerline

Invoicing and payment chasing for freelancers who were running their business out of a spreadsheet and a bank app.

Next.js · TypeScript · Postgres · DrizzleCase study
  • Realtime
  • Backend
Live

Relaydesk

A shared support inbox where four agents can work the same queue without stepping on each other, colliding on replies, or refreshing to find out what changed.

TypeScript · Node · WebSocket · RedisCase study
  • Performance
  • Frontend
Live

Orchard Storefront

A storefront that took nine seconds to become interactive on the phones its customers actually owned. No rewrite — the existing app, made fast.

Next.js · React · Shopify Storefront API · CloudflareCase study
  • Data
  • Backend
Archived

Quarry

A reporting layer that replaced a nightly spreadsheet export, built entirely inside Postgres because the data was never big enough to justify anything else.

Postgres · TypeScript · Node · GrafanaCase study
  • Frontend
  • Design system
Live

This Site

The portfolio, lab, and teaching archive you are reading. Built to be added to weekly for years, which changed almost every decision.

Next.js · TypeScript · CSS Modules · ZodCase study