Product Engineer · Cloud & AI Systems
I build production AI systems end to end, from infrastructure and security architecture through to the product people actually touch. I don't stop at making things work; I make them explainable, auditable, and trustworthy by design. Right now I am building AI agents.
I am working through an agent engineering bootcamp, structured in four stages: build, scale, govern, optimise, with labs submitted weekly. Both agents below run on Google's Agent Development Kit with a CopilotKit front end.
The bootcamp's teaching agent. The instructor supplies the base build and we fork it, then extend it through the weekly lab sequence. Hand it a topic or a rough draft and it researches the subject, writes a post shaped for the platform you are targeting, and publishes it through Buffer or straight to the platform.
Credit where it is due: the foundation is the instructor's, not mine. My work is the extensions each lab asks for.
My own build for the back half of the bootcamp. You give it the constraints that actually decide a trip, how many of you are going, the budget, the vibe you are after, and it plans the whole itinerary around them rather than returning a list of attractions.
The next piece is an MCP server wrapping GetYourGuide and Booking.com, so the agent can price and book what it proposes instead of just suggesting it.
These are labs and works in progress, not finished products. A build series follows when there is something worth writing up.
MSc dissertation
Verified · Explainable · Responsible Assessment
Automated hiring tools are under growing legal and regulatory scrutiny, and for good reason. Most operate as black boxes: no audit trail, no explainability, no defence when a candidate challenges a decision. VERA was my attempt at the opposite.
It runs structured, conversational assessments with no video and no audio. A recruiter defines the role, VERA generates a competency framework that a human has to approve before any evaluation begins, and every score is anchored to that rubric and evidenced by the candidate's own words. No facial analysis, no biometric data, no opacity.
My dissertation is its integrity layer, which addresses the problem that moving to text creates: once an assessment is typed, the answers could have been written by a language model. Every obvious fix reintroduces the bias I was trying to escape, so the layer compares each candidate only against their own earlier baseline, using nine coarse per-turn aggregates that describe behaviour without identifying anyone.
I evaluated it against eight synthetic adversarial agents, each with its expected result committed to source before the run. All eight landed where predicted, including the two built specifically to defeat the system. They did defeat it, which is the finding I most wanted to report rather than quietly repair.
VERA is no longer in active development. It remains the deepest system I have built, and the build series is the full account of how it worked and where it broke.Read the build series
MSc capstone. A modular Python/FastAPI service on Cloud Run, built on the insight that financial decisions are emotion-driven. Debugged a cascading failure where horizontal autoscaling masked upstream API exhaustion, then fixed it with rate limiting and wrote it up as a post-incident review.
Lead architect, 4th place at the GDG London hackathon. Diagnoses plant health from a photo and generates an image of what the healthy plant should look like. Multi-model pipeline orchestrating Vertex AI and Imagen, shipped to Cloud Run in 36 hours with runtime secret retrieval.
Local LLM inference (Ollama) routed to isolated cloud VMs across a dual-VPC Terraform architecture with an HA VPN mesh and BGP dynamic routing. Sub-40s reconvergence validated by failure-injection testing on live tunnels. Written up in three posts.
I build things that should not exist yet but clearly should, and then I write about the infrastructure that makes them run.
I came into engineering through product design, three years of it, most recently at a payments company. That history is not behind me: it's the reason my systems have users at one end and infrastructure at the other, and I think about both at once.
I hold a BEng in Computer Engineering and two GCP certifications: Associate Cloud Engineer and Professional Cloud Network Engineer. My MSc in Applied Computer Science at the University of Lincoln was submitted in August 2026; I'm awaiting final results.
My dissertation is the integrity layer inside VERA, titled a non-biometric, self-referential integrity layer for AI-mediated hiring assessment. Moving an assessment from video to text removes an entire class of bias, but it creates a new problem: the answers could have been written by a language model. Every obvious fix reintroduces the bias I was trying to escape. AI-text detectors misclassify non-native English writers as machine-generated 48 to 76% of the time, keystroke dynamics are a biometric that identifies the person, and webcam proctoring penalises anyone who fidgets.
So the layer compares each candidate only to their own earlier baseline. Nine coarse per-turn aggregates, with no identity, no answer text and no competency scores: enough to tell composing from transcribing, not enough to identify anyone. It flags only candidates faster than their own baseline, reports ordinal evidence rather than a numeric verdict, and is a standalone Python package with no import path to the scoring code, so the separation is verifiable by reading the imports rather than trusting my description of them.
I evaluated it against eight synthetic adversarial agents, each with its expected result committed to source before the run. All eight landed where predicted: no false positives on the honest profiles, all three forms of assistance caught, and the two agents built to defeat the system defeated it, which is the result I most wanted to publish. A method that measures deviation from your own baseline cannot catch someone who was assisted from the very first turn, because their baseline is assisted too. No threshold fixes that. Naming the blind spot is more useful than pretending it closed.
I write about what I build. Not tutorials, but honest working notes from inside the architecture. What broke. What I traded away. What I'd do differently. If you're building something too, that's the stuff that's actually useful.