I build backend systems that are correct before they're fast, and fast before they're clever.
8+ years designing distributed systems, multi-tenant architectures, and workflow engines across fintech, nonprofit tech, and B2B SaaS — in Java, Kotlin, TypeScript, and PostgreSQL.
Good data models, clear service boundaries, and systems that are correct before they're fast. I reach for boring technology until the problem forces otherwise — Postgres, Redis, and monoliths solve most things. When they don't, I've built distributed task queues, multi-tenant RLS isolation, and event-driven pipelines. I design for failure modes before happy paths, and I write code that respects the next person who reads it.
GoFundMe — NPO Claim Pipeline
Replaced a manual, ticket-driven NPO claim process (3-4 week avg. turnaround) with an automated, auditable pipeline serving 1.4M+ organizations. Led frontend implementation, contributed to backend architecture including GraphQL API layer. ~97% reduction in Care Team tickets.
GoFundMe — Data Edit Layer
Built backend infrastructure to layer mutable edits on top of an immutable data architecture. Edits captured as separate records resolved against original data, preserving full audit history. Worked within legacy constraints that couldn't be refactored.
GÜENO — Financial Reporting Engine
Built a queue-based reporting pipeline for generating financial, compliance, and usage reports as PDFs at scale (100k–1M+ rows). Async job dispatch, data aggregation, PDF generation, delivery. Solo build, end-to-end.
GoFundMe — Giving Cards (Hackathon → Production)
Led design and frontend implementation of a gift-card-style donation product at GoFundMe's 2025 hackathon. Complete flow — purchase, balance allocation, local NPO recommendations, redemption. Won hackathon; shipped to production.
Konduit
Workflow orchestration engine with distributed workers, SKIP LOCKED queues, virtual threads, and fan-in coordination.
nest-tenant
Multi-tenant library for NestJS — RLS and schema-per-tenant isolation, AsyncLocalStorage context, ORM adapters, CLI.
ForgeStack
Full-stack SaaS starter with multi-tenancy, RBAC, and Stripe billing. Engineering reference implementation, not a product.
Schema-per-Tenant vs RLS: When to Use Which
A practical comparison of PostgreSQL multi-tenant isolation strategies — row-level security vs separate schemas, from someone who built both.
SKIP LOCKED Is Not Enough
Closing the race window in PostgreSQL task queues — why SELECT then UPDATE fails under concurrency, and how atomic CTEs fix it.
Why SET LOCAL, not SET
Connection pool safety in multi-tenant PostgreSQL — and why session-scoped SET poisons shared pools.