About
I’m an infrastructure engineer in the UK. I work at Alleviate IT Solutions, a managed service provider, looking after cloud and on-premises infrastructure for its clients. Before that I was a Cloud Infrastructure Engineer at StepChange Debt Charity.
Outside work I build software for my own use first and put it here in case it’s useful to anyone else. I prefer tools that run locally, keep your data where it is, and don’t need an account. Lately that has meant a chess trainer that runs entirely in the browser, an F1 tyre tracker, and an operations platform for the kind of work I do all day. Most of it is built with Claude.
Projects
-
ChessReader
Free, open-source chess analysis and training that runs entirely in your browser. Paste a PGN or pull in your Chess.com or Lichess games and it reads them back to you the way a coach would: what you got wrong, what you keep getting wrong, and what to do about it. Stockfish runs in the page, every blunder becomes a flashcard on a spaced-repetition schedule, and there’s opening prep for the people you’re about to play. Nothing is uploaded.
-
Rubber
An F1 tyre tracker. For every driver it reconstructs the tyre sets used across a race weekend — which compound, how many laps are on each set, and how many new sets of each are left — alongside a stint and strategy chart for every session. OpenF1 publishes stints but not Pirelli’s allocation or which physical set is which, so the sets are rebuilt by matching ages and laps and reconciling against the weekend’s allocation. Cached at the edge so the whole audience costs one upstream call a window.
-
The Canon private, in development
An operations platform for a managed service provider, built out of what the day job keeps asking for: incidents, change requests, ITIL-aligned problem management, daily and backup checks, a kanban board, a customer portal, a knowledge base and cloud cost reporting, all behind role-based access with a full audit trail.
Scripts
Small utilities I actually use. Nothing hard-coded, free to take.
Criterion × Radarr toolkit
Finds which Criterion Collection films are missing from a Radarr library, works out which of them are worth caring about, and gets Radarr to fetch them. Standard-library Python, configured by environment variables; the README has the run order.
- criterion_crossref.py Cross-references your Radarr library against the full Criterion list on Letterboxd, matching on TMDB ID with a fuzzy title fallback.
- fetch_ratings.py Ranks the films you’re missing by their Letterboxd rating.
- add_to_radarr.py Adds every missing film to Radarr as monitored, without kicking off a search.
- search_radarr.py Triggers searches for a priority list in paced batches so your indexers aren’t hammered.
Microsoft 365
PowerShell, for anyone else who looks after other people’s tenants.
- M365Leaver.ps1 Walks you through offboarding a leaver in any tenant: mailbox converted to shared, access or forwarding for whoever is picking it up, renamed and hidden from the address list, licences removed, sign-in blocked, out of every group. Asks before each step, and ends with a ticket-ready summary that includes the commands to undo it.