"Eliminate toil. Standardise workflows. Build durable abstractions."
Replace manual, fragile processes with pipelines and services.
Tooling and infrastructure that scales teams and workflows.
Convert recurring patterns into repeatable systems.
Measure, log, and make invisible complexity visible.
Take ownership of the stack from concept to production.
Problem: Legacy TypeScript document generation service was poorly written, unmaintainable, and difficult to extend for new document types.
Solution: Rewrote the service in Python (FastAPI, Jinja2, WeasyPrint) with Pydantic-validated models, modular templating via Jinja2 extends/includes, and custom brand CSS. Deployed as a Docker container on AWS Lambda via CDK.
Problem: Sales team had no scalable way to identify and qualify leads; prospecting was manual and time-consuming, many phone numbers were disconnected.
Solution: Automated web scraping pipeline to extract, normalise and enrich lead data, feeding structured prospect information directly to the sales team.
Problem: Off-the-shelf e-commerce SaaS (Shopify) cost £25+/month — unjustifiable for a small handmade goods shop.
Solution: Built a fully custom e-commerce platform on AWS: static GitHub Pages frontend with Jinja2 templating, FastAPI backend on Lambda, DynamoDB for orders, S3 for assets, Stripe for payments, Resend for transactional email. Infrastructure managed with AWS CDK.
Problem: Wanted intentional, low-noise access to Reddit without the engagement-maximising web UI.
Solution: Read-only terminal dashboard built with Textual. Parses Reddit's JSON Feeds and renders a navigable TUI with feeds, post browsing and comment threads.
Problem: Manual job search and triage was slow and unscalable.
Solution: Scraping, normalisation, NLP scoring, LLM summarisation and automated ranking pipeline.
Problem: Wanted a personal API to experiment and demonstrate working knowledge of Java.
Solution: Built a Spring Boot API with Infrastructure as Code (Pulumi), CI/CD pipelines, and cloud-native deployment on Google Cloud.
Problem: Juggling progress hard to quantify; avoided difficult patterns; wanted structured practice and progress tracking.
Solution: Weighted random practice generator, archival system and analytics.
Full Stack Developer — Remote / Sunderland (February 2026 – Present)
Data Ops Engineer — Nottingham, United Kingdom (January 2024 – December 2025)
Teaching Assistant — Remote (January 2024 – July 2025)
Development Team Lead — Remote (April 2021 – May 2023)
Indie Game Developer / Head Brewer — Remote / Matlock, United Kingdom (March 2015 – January 2024)