Work · 17 projects

Everything I have built.

The systems work first, then the products that came out of needing them, then the client sites that are live.

AI finance controller

Matches invoices to bank payments, and is honest about the ones it cannot. The model never does the arithmetic and never has the last word: it recommends, and hard-coded rules decide what that recommendation is allowed to become. Zero wrong approvals across the held-out set.

PythonFastAPIPostgreSQLReact+2
Read the write-up

Agentic personalisation pipeline

Four agents run in order inside an isolated microVM: check consent, pull the facts out, find matches, then one last agent checks the answer against the real data before it ships. Old facts fade with time, and ones that contradict each other get caught.

PythonFastAPIStrandsBedrock+5
Read the write-up

In-memory data store in Rust

Built from scratch in Rust instead of pulling one off the shelf. The hard part sits underneath: how memory is laid out, and how many readers can share one keyspace at once.

Rust
Read the write-up

Multi-channel notification service

One queue per channel, so if SMS goes down email keeps moving. Every job is written to the log before it is queued, duplicates are turned away, and a bad address fails on the first try instead of retrying five times.

TypeScriptExpressPostgreSQLDrizzle+4
Read the write-up

Adaptive rate limiter for Node

Mix any algorithm with any store. When the event loop starts lagging it drops from Redis to memory on its own, so a busy server sheds load instead of dying.

TypeScriptNode.jsRedisLua+1
Read the write-up

Cache that checks for safety, not wording

A cache sits in front of the safety filter, because checking it after would cost the saving. So it can hand back an answer the filter already blocked. Ten rewordings of one attack: all ten blocked, five served anyway.

PythonPyTorchTransformersDocker
Read the write-up
The rest is on GitHub