Education
Experience
I ship ASP.NET Core microservices, Azure Functions, and containerised workers that handle tens of thousands of jobs a day without manual intervention. Earlier work on NVIDIA Jetson edge software taught me to respect memory budgets and latency ceilings.
Comfortable extending into cloud infrastructure (Azure, AWS), DevOps, and frontend when the problem requires it — TypeScript, React, Node.js, Terraform, Ansible.
Based in Birmingham, UK.
Notable projects
Redesigned a legacy processing pipeline into a serverless, encrypted routing system handling tens of thousands of submissions per day.
The legacy pipeline was an in-process monolith that held submissions on disk between stages — a throughput ceiling and a compliance risk. Re-architected onto Azure Functions with Queues as the only durable surface, Key Vault for rotation, and a small Blob Storage write-through for the large binary bodies. Every hop signs and encrypts with AES-256 using per-tenant keys.
An AI-powered platform for tailoring CVs, generating cover letters, discovering jobs, and tracking applications from a single interface.
9+ vertical-slice modules inside a single process — each owns its storage, its endpoints, its tests. A provider abstraction sits in front of every LLM so swapping provider is a config change; CV/cover-letter generation, ATS scoring and job-match search stream over SSE. A Manifest V3 extension captures jobs and autofills forms. Infra is all Terraform; deploys are boring.
A lightweight, self-hosted cloud storage app that runs on a Raspberry Pi — file management, per-user namespaces, and in-browser viewers with no external services.
A single Python process backs the whole thing — SQLite for metadata, local disk for blobs, bcrypt + HMAC-SHA256 signed bearer tokens for auth. In-app viewers cover images, PDFs, range-served video, ZIP browsing, syntax-highlighted code, hex view and markdown editing, with dual list/grid views and per-user storage quotas.
A statically-typed, manually-managed language inspired by C and Java. Compiles to C, self-hosting, with a small auditable runtime and no garbage collector.
The entire toolchain — lexer, parser, analyser, C emitter — is written in Glang itself. A pre-generated C seed (glangc.c) bootstraps the compiler with nothing but a C compiler. Generics are monomorphised at compile time; nullable types, exceptions, `using` disposal blocks and a small standard library (List, Map, Stack, Queue, Span, LINQ-style ops) round it out.
Cross-platform dev-environment provisioning — same machine every time, whether it's Ubuntu, Fedora/RHEL, or macOS.
CI runs the playbook inside a fresh Ubuntu 24.04 container on every PR; the resulting image is published to GHCR so anyone can pull the fully-provisioned environment without running the playbook themselves.