Work

Projects

Backends and agents I’ve built, strongest first. Every card follows the same order: problem, what I built, stack, links.

Main projects

FinOps Agent

Hackathon

Autonomous accounts-receivable agent with a three-tier autonomy gate.

Built at Cursor Hack London · 30 Apr 2026

Problem
Small UK businesses lose time and cash chasing late invoices, and letting an LLM act freely on financial decisions isn’t safe.
Built
  • A FastAPI agent that chases overdue invoices, screens counterparties for AML risk and applies UK Late Payment Act interest.
  • Every action passes a three-tier autonomy gate (AUTO / ESCALATE / HARD_BLOCK).
  • Claude drafts the emails; the activity feed streams live over WebSockets behind JWT + bcrypt auth.
Stack
  • FastAPI
  • Claude API
  • JWT
  • bcrypt
  • WebSockets
  • SQLite
  • React

PR Assistant API

In progress

Async code-review API: submit a GitHub PR or raw diff, get back structured findings (line, severity, issue, fix).

Problem
An AI first-pass review only helps if its output is structured and the API never blocks while the model runs.
Built
  • FastAPI service with a typed Pydantic contract, the 202-Accepted async job pattern, input validation and a 7-test pytest suite.
  • Claude review worker and Redis queue in progress.
Stack
  • FastAPI
  • Pydantic
  • pytest
  • Claude APIin progress
  • Redisin progress

FitFlow

Deployed

AI fitness-coaching bot on Telegram, grounded in your Strava data.

Problem
Generic training advice ignores the workouts you’ve actually done, and that data sits scattered across fitness apps.
Built
  • A Telegram bot that syncs Strava activities through OAuth2 into Supabase.
  • Free-text questions go to Claude with recent training as context, so coaching is grounded in real data.
  • Dockerised and deployed on Render.
Stack
  • Claude API
  • Supabase
  • Strava OAuth2
  • TypeScript
  • Docker
  • Render

London Blue Plaques Explorer

In progress

A REST API for exploring London’s blue plaques, built on Open Plaques data.

Problem
Open Plaques data is one flat list, so questions like ‘which London areas have the most plaques for scientists?’ are hard to answer.
Built
  • A Flask + MongoDB REST API over the Open Plaques dataset, modelling each plaque as a nested document (subjects, location, categories).
  • In progress: search and filter endpoints, and aggregation endpoints that compute counts and averages per area and category with MongoDB’s aggregation pipeline.
Stack
  • Python
  • Flask
  • MongoDB
  • Aggregation pipeline
  • Open Plaques data

Earlier data work

Analysis projects

From before I focused on backend engineering; where my SQL and data-modelling habits come from.

Apple global sales

Schema to stored procedures: 11,500 transactions, 30 business questions, reusable views and five parameterised procedures.

MySQL

London bike journeys

Santander Cycles, August 2023: trip duration, station demand, and weekday double peaks vs weekend leisure curves.

R · R Markdown · ggplot2

Premier League performance

Three seasons merged into a league table built from scratch, home advantage, and a 15+ chart library.

Python · Pandas · Jupyter

Let’s talk

Hiring for a backend role?

Graduate & junior roles from June 2027, part-time roles now.

Get in touch