I am a Senior Software Developer with a track record of growing into, and owning increasingly complex challenges. I enjoy implementing useful and scalable solutions for interesting problems. I thrive in environments that trust engineers to understand problems deeply, make architectural decisions, and deliver work that lasts.
BEng Engineering Geology and Geotechnics (Hons) 1:1
University of Portsmouth- •C# / .NET, ASP.NET Core, Blazor WebAssembly
- •Entity Framework Core,
- •Python / MicroPython, Flask
- •xUnit, bUnit, Req'n'Roll, NSubstitute
- •BDD / TDD,
- •Mentorship and structured code review focused on team growth
- •Debugging and fault isolation
- •Git version control and PR workflow management
- •Code reviews and pair programming
- •Microservices / domain decomposition
- •RESTful API design
- •Feature flags and incremental rollout
- •Continuous integration and deployment awareness
- •PostgreSQL, Redis
- •Docker / multi-stage Dockerfiles
- •Railway, Linux / systemd
- •Raspberry Pi / GPIO
- •Technical leadership without formal authority; earning trust through delivery and judgement
- •Translating technical constraints into roadmap-level decisions for stakeholders
- •Driving process change with measurable outcomes
- •Architectural decisions designed to outlast immediate ownership
- •Cross-functional collaboration via example mapping
- •Pragmatic delivery under time pressure, with clear scoping and trade-offs
C# / .NET 10 · ASP.NET Core · React / TypeScript · SignalR · Yjs CRDT · PostgreSQL · Docker · Claude.
A real-time collaborative document authoring platform as three independently deployable ASP.NET Core services, each owning its own PostgreSQL database and EF Core migrations, with cross-service references. Concurrent editing using Yjs CRDT (YDotNet) over a SignalR/MessagePack hub, with live presence and comment threads anchored to text ranges in a Lexical editor. Short-lived JWTs are validated locally by each service, with rotating refresh tokens and replay detection. OpenTelemetry traces and metrics throughout. Full testing suite run in GitHub Actions on every PR. Multi-stage Dockerfiles deploy to Railway from Github (access on request).
Built a full-stack multi-tenant ASP.NET Core and Blazor WebAssembly SaaS app to manage a physical MTG collection across multiple storage boxes. A .NET BackgroundService schedules Scryfall bulk data syncs (~126,000 card printings) into Redis on a 7-day cadence, with staleness checking to prevent redundant resyncs on redeploy. Core backend services are covered by xUnit unit tests. PostgreSQL persists collection data indexed on Scryfall ID, enabling efficient consolidation and search queries across the collection. JWT authentication enforces user-scoped data isolation with an admin-gated approval flow. Containerised via a multi-stage Dockerfile, with separate staging and production environments and feature flags for controlled rollouts, auto-deployed from Github (access on request) to Railway.
Built an automated irrigation system running on a Raspberry Pi Zero 2, using Open-Meteo ET₀ and rainfall data to calculate daily watering volumes. Hardware pump control is handled via GPIO and a relay module. Telemetry is posted to a Flask dashboard deployed on Railway, backed by Redis, displaying live charts of dispensed volume, soil moisture, and weather data. Auto-deploys via a systemd git-polling service. Github.