✦ Portfolio
Individual projects and the work behind them.
✦ AureusMC
✦ Featured
Technical lead · Ongoing
A datapack that adds custom Cobblemon functions to AureusMC.
- Wrote custom species files, species additions and Mega and move-set fixes.
- Set up species features and their assignments, including a Halloween set and the negative-variant set that…
- Defined the world spawn pools and the NPC definitions.

✦ Featured
Technical lead · Ongoing
The Cobblemon resource pack for AureusMC: custom models and textures for Pokemon and items.
- Maintained the client assets in the synx namespace the pack's README requires for custom models.
- Added prismatic variants for Primal Groudon, Primal Kyogre and Mega Rayquaza.
- Expanded the negative-variant pack from 19 to 50 species, with coloured glow layers.

✦ Featured
Technical and events lead · Ongoing
Keeping the AureusMC Cobblemon network running, including its website and wiki and the client modpack.
- Built and maintained aureus-site, a Nuxt 4 website with a news blog of 24 posts, from the 2025 development…
- Wrote and maintained the wiki's 57 pages, covering getting started, rules and server features such as crates…
- Published seasonal store and event posts for the Autumn and Spooky Season updates.
- Minecraft
- Server management
Event Director · Ongoing
Running AureusMC's regular and seasonal events, directing both the technical work and the building.
- Plan each seasonal event end to end, from the quest and hunt design to the build of the warp area and the…
- The Autumn Warp is a good example: three story questlines, two statue hunts, present hunts, a seasonal…
- The Halloween, Winter and Spring warps followed the same pattern, each with hunts, quests, parkour or mazes…
- Plugin configs
- WorldPainter
- WorldEdit
- Axiom
Senior Admin · Ongoing
A combined role covering server management and event direction on AureusMC.
- See Server Management and Event Director for the detail on each side of the role.
- Plugin configs
- WorldPainter
- WorldEdit
- Axiom
✦ My Day Job

🔒 Confidential
Sole developer · Ongoing
A desktop app with six role-specific AI assistants (quality, facilities, customer insight, customer service, forecasting and technical management) working from live business data.
- Built six assistants, each focused on one part of the business and reading live data.
- Anything an assistant drafts waits for a person to approve it before it goes anywhere.
- Results can be exported to Word, Excel and PowerPoint.
- Python
- FastAPI
- Next.js
- Electron
- Claude API
🔒 Confidential
Developer · Ongoing
Schedules checks that quotes have been followed up, so nobody has to chase them by hand.
- Schedules checks that each quote has been followed up.
- Removes the manual chasing for customer success.
🔒 Confidential
Sole developer · Ongoing
Excel macros that cut the time to sign off each calibration sheet by up to 80%.
- Wrote a sign-off macro that does most of the checking and sign-off work for each sheet.
- Turned bulky legacy sheet formulas, including the uncertainty budgets, into dynamic macros.
- Can now support colleagues who use Excel and macros.
🔒 Confidential
Sole developer · Ongoing
Copies operational records from a lab database into a CRM, checking data quality first and skipping anything unchanged.
- Maps nine record types from the lab database into the CRM.
- Checks data quality first, and skips anything that has not changed.
- Keeps an audit log and a small desktop window to run a sync.
🔒 Confidential
Sole developer · Ongoing
Small desktop utilities for controlling data acquisition hardware and clearing stuck hardware resources.
- Small tools to control acquisition hardware.
- A utility that clears stuck hardware resources.
🔒 Confidential
Sole developer · Ongoing
Finds a connected temperature and humidity instrument automatically, logs its readings to CSV and shows them on a live dashboard.
- Detects a connected instrument automatically.
- Logs readings continuously to CSV.
- Shows six data channels on a live dashboard.
🔒 Confidential
Developer · Ongoing
An index of the equipment range with a unit converter, so non-technical colleagues can answer technical questions themselves.
- Built an index of the equipment range.
- Added a unit converter alongside it.
- Lets non-technical staff answer technical questions without going to an engineer.
🔒 Confidential
Developer · Ongoing
A tool that turns plans written in Excel into Gantt charts for project planning.
- Turns plans written in Excel into Gantt charts.
- Used it to plan projects, including IT infrastructure work.

🔒 Confidential
Sole developer · Ongoing
A dashboard that connects to a mass flow controller over serial or Ethernet to show readings, trends and setup guidance, packaged as a single portable program.
- Shows live readings and trends, with five views: Overview, Trends, Device, Settings and Setup.
- Connects over serial or Ethernet.
- Includes a step-by-step setup guide for connecting the device.
- TypeScript
- Next.js
- Electron
- Web Serial
🔒 Confidential
Sole developer · Ongoing
Uses a camera and OCR to read numbers from an instrument's display and log them to a spreadsheet file.
- Reads the numbers off an instrument display with a camera and OCR.
- Logs them to a spreadsheet file.
- Lets the user pick which part of the picture to read.
🔒 Confidential
IT support and policy author · Ongoing
Policies and set-up that keep the lab's data and equipment secure and in line with Cyber Essentials.
- Wrote the lab laptop and USB policy, which keeps the lab in line with Cyber Essentials and protects the…
- Wrote the AI policy, which secures company data and reduces the risk of rogue AI use.
- Installed and set up security cameras for the calibration lab.

🔒 Confidential
Sole developer · Ongoing
A desktop console that reads many sensor channels at once, shows them live and records them to file.
- Brings voltage, current, temperature and frequency channels into one threaded application.
- Handles six input module types.
- Has a simulated mode, so it can be used without hardware.
🔒 Confidential
Sole developer · Ongoing
A desktop panel for timing and switching pumps through a PLC and a microcontroller, plus small controller programs for test rigs.
- A control panel with timers and visible status for six pumps.
- Microcontroller programs that drive a stepper motor and run a timed solenoid and pump sequence.

🔒 Confidential
Sole developer · Ongoing
A modern desktop front end for the lab's records database that lays out its screens from that system's own settings, so the old software can be retired without moving any data.
- Reads the lab's records database and builds its screens from that system's own configuration.
- Lets the old client be retired without migrating anything.
- Ships with a sample-data mode so it can be run and demonstrated safely.
- Python
- FastAPI
- Next.js
- Electron
- SQL Server
🔒 Confidential
Sole developer · Ongoing
A server that lets AI tools read a lab database and propose changes that a person approves, and that can be undone.
- Every change goes through three steps: propose, approve, apply.
- A reversal uses the same three steps, and every change is journalled.
- Built on the Model Context Protocol so any compatible AI tool can use it.
- Python
- MCP
- SQL Server
- SQLite
🔒 Confidential
Sole developer · Ongoing
Captures screenshots and instrument readings on a timed schedule and writes them to CSV, with saved presets and a reading stability check.
- Captures screenshots and readings on a schedule.
- Writes the readings to CSV.
- Saves presets and checks that a reading has settled.
🔒 Confidential
Sole developer · Ongoing
A desktop tool that generates selectable waveforms on analogue output hardware and plots what it is commanding.
- Generates a choice of waveforms on analogue output hardware.
- Plots the commanded signal as it runs.
- Grew through eight numbered versions.
✦ Independent

Developer · Last commit 1 Nov 2026
Anime-inspired powers for Minecraft: an addon for the Origins mod adding a set of anime-themed origins, built for Fabric and NeoForge (1.21.1).
- Built the 15 origins in Java. Each active power calls a /ao command that dispatches to one abilities class…
- Made spell projectiles as real entities with their own renderer and generated glow textures, plus summons…
- Added a client ability panel that lists every ability with its input, cooldown or READY state and toggle…
- Java
- Fabric
- NeoForge
- Minecraft 1.21.1

Creator · Last commit 2 Nov 2026
A Claude Code plugin that coordinates tiered agents: an Opus advisor, a Sonnet lead and low-cost Haiku workers.
- Built the three tiers: an askadvisor tool that answers OK, ADVICE or QUESTIONS, plus crew:scout and…
- Capped subagents at three running at once by default. Extra spawns are refused with a wait message, and the…
- Built the /crew pane in TSX: an advisor column, a lead box, a route share, fan-out to worker cards and a…
- TypeScript
- TSX
- Claude Code plugins

Modder · Last commit 15 Oct 2026
A personal Deadlock mod that replaces the hero Rem with Mem from Honkai: Star Rail, holding a book and quill.
- Wrote the fitting pipeline in Python and Blender: it strips the model-viewer-only bones and physics from Mem…
- Made Mem's expressions work in the game. Rem never animates face morphs, so I swapped body groups instead…
- Replaced the thrown pillow with a book projectile, recoloured the particles pink, and turned Rem's helpers…
- Python
- Blender
- Source 2 Viewer
- PowerShell
Creator · Last commit 27 Sep 2026
A themed local web interface for Claude Code, built on the Claude Agent SDK, with a companion Android app.
- Built the Node backend on Express 5 and ws, with one streaming Agent SDK session per browser tab, a…
- Added a server-side session hub so sessions survive page reloads, replay anything missed, and auto-resume…
- Rendered the SDK message stream in vanilla JS: streaming markdown, tool cards, Edit and Write diffs, todo…
- Node.js
- Express
- Claude Agent SDK
- Capacitor

Designer and developer · Last commit 28 Oct 2026
Site build (freelance / commission): a catalogue that gathers YouTube and Twitch media in one place, embedding it rather than hosting it.
- Built a Next.js site in a pnpm monorepo, split into a web app, a sync worker and shared config, database…
- Wrote a sync worker that pulls YouTube uploads every 15 minutes and Twitch VODs and clips every half hour…
- Made the database optional. On Vercel the site runs without one and reads YouTube through Next's data cache…
- Next.js
- TypeScript
- Postgres
Developer · Last commit 31 Oct 2026
A Hearts of Iron IV mod that starts the world in 2000 with modern borders, leaders and doctrines, plus a wiki generated largely from the mod's own files.
- Generated most of the mod's content with Python, about 180 scripts in tools/, including roughly 55…
- Wrote a rebuild chain that regenerates the trees, then runs a lint step that catches errors the game would…
- Built the state, leader, party, advisor and commander data, with state owners and cores set for 1 January…
- Hearts of Iron IV
- Python
- Nuxt
Builder · Ongoing
A self-hosted, open-source local AI suite for text, code and images, running on my own PC and GPU.
- Set up local llama models and ran them in Docker on my own PC.
- Put Open WebUI in front of them as the web interface.
- Set it up to use my GPU, so it can do text, code and image generation in one place.
✦ PokeSaga

✦ Featured
Hands-on project lead · May 2024
Hands-on project lead for PokeSaga, a Pixelmon Minecraft server: I built most of it myself and managed the build and development/event teams in coordination to bring the player experience, including the Space Wars warp, to life.
- Led the project hands-on and built a majority of it myself.
- Managed the build team and the development/event teams, and coordinated them so the server worked as a whole…
- Space Wars warp: I built most of the terrain and many of the assets myself, led a team making more assets…