JanitorHead

Medical student, generalist and licensed ham radio operator. I like taking on problems that look interesting and seeing them through, from game maps to GPU driver bugs.

About me

I'm not a professional developer, just stubborn about fixing things. I started programming to solve my own problems, and it grew from there: first the tools I needed, then the ones other people needed too.

Medicine is my real passion. I haven't finished the degree yet, and where medicine meets technology is where I'd most like to end up.

Away from the keyboard I like repairing and restoring things: retro consoles, computers, CRT TVs and ham radio gear. I also design and build electronics: right now a power supply for iontophoresis therapy, and before that a battery-powered DMR hotspot on a Raspberry Pi Zero 2 W. On the modding side, I've installed Tim Worthington's N64RGB mod. When a project needs parts, I design them and print them on my Ender 3 S1.

Ham radio is a big one. I restored my Kenwood TS-570D HF transceiver, then wrote it an app. I love antenna theory, design and building; my latest build is a T2LT. On the air I mostly chase DX on HF and work FT8, and I'm slowly learning CW.

Fountain pens are another hobby, mostly for how they feel to write with; my favorite is a Pilot E95s. I have two dogs, and I play several musical instruments, all of them badly.

Things I've built

Maptridge: a Metroid (NES) map coloured by area, filled in room by room

Maptridge

Interactive game maps you fill in as you play, without spoilers. The first map is Metroid (NES): one click per room, the game's real screens when you zoom in, hints before spoilers, and RetroAchievements live.

TypeScript · Canvas · Cloudflare Pages · NES ROM analysis

Open the mapWatch the videoFeedback

Quotatank: AI coding limits, accounts and costs in the Omarchy menu bar

Quotatank

Every AI coding limit, account and dollar in the Omarchy menu bar: how much is left, which account is spending it, and when it comes back, across 50 providers. Published and verified in the Omarchy plugin marketplace.

Python · QML · Quickshell · Hyprland

The Top Processes tile listing processes with CPU and memory bars

Top Processes

An Unraid dashboard tile that shows which processes are using the CPU and memory, in Unraid's own style.

PHP · JavaScript · Unraid

A Windows app that mirrors the Kenwood TS-570D front panel

TS-570D Remote

A front-panel-style Windows app to control a Kenwood TS-570D HF transceiver over CAT.

C# · WPF · OmniRig · Ham radio

A scrutiny-bridge alert in Telegram: disk sdc's reviewed baseline on attribute 187 grew from 2 to 5

scrutiny-bridge

Per-disk, per-attribute alert filtering for Scrutiny's SMART notifications: silence one reviewed disk without muting the channel, with readable Telegram alerts.

Python · SMART · Telegram

An Unraid page split down the middle, light theme on the left and dark on the right

Theme Switch

A one-click light/dark toggle in the Unraid header that can follow your operating system's colour scheme.

JavaScript · Unraid

Bug hunting upstream

For months, Immich's OpenVINO face detection broke on Intel NAS iGPUs. Faces vanished, and the bug was hard to reproduce.

Working with Immich's maintainers, I narrowed it down to dynamic shapes on that GPU and OpenVINO release, filed the upstream report with a self-contained repro (openvino#36831), and confirmed Intel's fix on the affected hardware. My test script ended up as the basis of the community workaround until the fix shipped.

The Immich threadThe repro pack

Toolbox

TypeScript · Python · C# / WPF · QML · PHP · Shell · Docker · Linux · Unraid · Cloudflare · a soldering iron · a 3D printer

Get in touch

Open to health-tech, open source and homelab tools, games and retro, or any problem that looks interesting. Email is the best way to reach me: janitorhead@icloud.com