Packages & libraries.
The bits I pulled out into their own thing — usually because I needed them once and figured someone else would too.
Ridiculously over-typed shadcn components — template-literal validators that catch bad props at compile time, plus a colour picker with six oklch modes. Mostly an experiment in how far TypeScript will let you go before it gives up.
A React wrapper around leaflet-geoman, the drawing plugin. I needed it for Koji, figured plenty of other people probably did too, so it went up on npm.
$ npm i react-leaflet-geomanA small class for working with the UICONS icon spec. Nothing clever, it just saves you writing the same URL-building code over and over.
$ npm i uicons.jsA travelling-salesman solver that actually uses all your cores instead of politely sitting on one. This is basically the engine that grew into Koji's routing.
Browser automation in Rust, talking straight to Chrome over the DevTools Protocol. Async, built on tokio, no webdriver in sight.
Pokémon GO game data, generated into Go, Rust and TypeScript bindings so nobody has to parse the raw thing by hand. This is where a lot of my data nerdery lives.
Custom skills I've written for AI coding agents. Half of it is genuinely useful tooling, half is me poking at what these things can do.