Backend Architecture
Domain-driven services, event pipelines, and data models that survive the third rewrite. REST and GraphQL APIs designed for consumers, not for the ORM.
Full-stack developer architecting resilient backends and interfaces people actually enjoy using. From schema to shader — I own the whole stack.
I build software the way infrastructure should be built — quietly reliable, ruthlessly fast, and simple enough that the next engineer says thank you.

Six years in, I've learned that the hard part was never the framework. It's the boundaries — where a service ends, where a transaction commits, where a user's patience runs out. That's the work I care about.
I take products from a whiteboard scribble to a deployed system with observability, tests, and a CI pipeline that doesn't wake anyone at 3am. Backend is where I go deepest: domain modelling, event-driven architecture, query plans, and the unglamorous discipline of making things idempotent.
On the front, I build interfaces with the same rigour — typed end to end, accessible by default, and animated only where motion carries meaning.
One person, the full pipeline. No handoff gaps, no "that's a backend problem".
Domain-driven services, event pipelines, and data models that survive the third rewrite. REST and GraphQL APIs designed for consumers, not for the ORM.
Typed React and Next.js apps — server components, streaming, and interfaces that feel instant on a mid-range phone.
Stripe, payment rails, third-party webhooks and the retry logic nobody writes until it breaks. Idempotent by design.
Containerised deploys, infrastructure as code, blue-green releases and dashboards that answer questions before you ask.
Query plans, N+1 hunts, caching layers and cold-start surgery. Measured before, measured after — no vibes.
RAG pipelines, embeddings, streaming LLM endpoints and internal tooling that quietly removes hours of manual work each week.
A slice of recent builds. Numbers are from production, not from a pitch deck.
Headless commerce platform for a multi-region retailer. Rebuilt the catalogue service, cut checkout latency by 68%, and moved 1.2M SKUs without a minute of downtime.
Payments and ledger core for a fintech. Double-entry accounting, idempotent webhooks, and a reconciliation engine that closes the books in seconds instead of hours.
Real-time analytics surface streaming millions of events a day. WebSocket fan-out, pre-aggregated rollups, and a dashboard that renders under 90ms on cold load.
RAG assistant over 40k internal documents. Hybrid retrieval, streaming responses, citation grounding, and an eval harness so quality regressions get caught in CI.
Multi-tenant SaaS with row-level isolation, granular RBAC, and a plugin system that lets customers extend the data model without a deploy.
Partnering directly with product teams on payment infrastructure, real-time analytics and AI-assisted tooling. Owning architecture, delivery and the on-call rotation.
Broke a monolith into services without a rewrite freeze. Introduced contract testing, structured logging and a deployment pipeline that dropped release time from hours to eight minutes.
Formal certification covering distributed system design, security, data modelling and production operations — the theory behind what production had already taught me.
Shipped twenty-plus client products across commerce, logistics and health. Learned to scope honestly, ship weekly, and write code the next developer can read.
Constraints, users, and the failure modes that actually matter. I ask the uncomfortable questions early.
A diagram, a schema and a written trade-off list before a single endpoint exists.
Thin vertical slices behind flags. Something real in staging within the first week.
Load tests, dashboards, runbooks. The part most people skip, and the reason mine stay up.