A selection of my professional work and engineering experiments, focused on distributed systems, high-throughput pipelines, and robust backend architectures.
Most rate limiters keep their counters in process memory, which quietly multiplies your limit by the number of servers you run. Gatekeeper keeps the counter in Redis and does the check-and-increment inside a Lua script, so it stays atomic when several requests land at once. Three algorithms — fixed window, sliding window, token bucket. If Redis becomes unreachable it falls back to in-memory counting rather than rejecting traffic, on the argument that a rate limiter taking your API down is worse than a briefly imprecise limit.
Scaffolds a Node and TypeScript API with the tedious parts already wired: structured logging, centralised error handling, Zod validation, Swagger docs and a Dockerfile. Came out of setting the same things up one too many times. The CI does a real end-to-end run — it scaffolds a project, installs it, boots it and curls the health endpoint.
The Web Audio API is imperative and React is declarative, so the real problem here was keeping them apart. The audio engine lives entirely outside React and is driven by a Redux middleware that translates actions into engine calls. Waveforms render to canvas rather than the DOM, because drawing a few thousand peaks as elements does not go well.
A written architecture for solving the dual-write problem with an orchestration-based Saga rather than choreography: a central coordinator owns the state machine, drives each step over Kafka, and issues compensating commands when a step fails. The design covers the hexagonal split between domain logic and adapters, the dead-letter strategy, and a local-first Docker setup. This is a design document, not a shipped service — the write-up is the artefact.
Architecture write-up — not a shipped service.
I specialize in high-stakes backend architecture and distributed systems. Let's talk about your next project.
Get in Touch