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.
- •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
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.
user: [email protected]
password: tree-bobcat1-hellion
A Blazor WebAssembly life-counter and timer app for multiplayer MTG, featuring active-player controls, flip-friendly player cards, and configurable settings. Integrated into MTGCardSorter as a standalone module.
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.