stuff you install

Packages & libraries.

The bits I pulled out into their own packages, usually something I needed in more than one project.

ridiculousridiculous
TypeScript

Over-typed shadcn components: template-literal validators that catch bad props at compile time, plus a color picker with six oklch modes. Mostly an experiment in how far TypeScript's type system will stretch.

shadcn$ npx shadcn@latest registry add @ridiculous=https://ridiculous.turtlesocks.dev/r/{name}.json
react-leaflet-geomanreact-leaflet-geoman
TypeScriptnpm

A React wrapper for leaflet-geoman, the map-drawing plugin. I needed it for Koji, figured others would too, so it went up on npm.

npm$ npm i react-leaflet-geoman-v2
uicons.jsuicons.js
TypeScriptnpm

A small class for working with the UICONS icon spec. It saves you rewriting the same URL-building code over and over.

npm$ npm i uicons.js
tsp-mttsp-mt
Rust

A multithreaded traveling-salesman solver that uses all your cores, not just one. I wrote it as a Koji plugin for the cases the built-in routing couldn't handle; on 100k-plus points it drops from minutes-plus to seconds.

zendriver-rszendriver-rs
RustJavaScript

Browser automation in Rust, driving Chrome over the DevTools Protocol. Async, built on Tokio, no webdriver.

cargo$ cargo add zendriver
bevy_simple_i18nbevy_simple_i18n
RustBevy

Internationalization for the Bevy game engine: localized text that swaps the moment you change locale, wired in with about as little boilerplate as I could get away with. My most-used Bevy crate.

cargo$ cargo add bevy_simple_i18n
pogo-masterfilepogo-masterfile
GoRustTypeScript

Pokémon GO game data compiled into Go, Rust, and TypeScript bindings, so you don't have to parse the raw files by hand. The multi-language codegen was the reason I built it. It keeps itself current, too: an hourly job watches upstream, regenerates all three languages when the data moves, and ships new versions to npm, crates.io, and the Go proxy. Nobody in the loop.

npm$ npm i pogo-masterfile
cargo$ cargo add pogo-masterfile
go$ go get github.com/Hazels-Lab/pogo-masterfile/packages/go-api
agent-skillsagent-skills
TypeScriptPython

Custom skills I've written for AI coding agents. Half of it is useful tooling, half is me seeing how far they'll go.

skills$ npx skills add turtiesocks/agent-skills
dot.pathsdot.paths
TypeScriptnpm

Type-level dot-notation paths for TypeScript: one type lists every path into a shape, another grabs the value at any of them. All compile-time, no runtime, and built to stay cheap for the compiler. About 40% faster to type-check than the usual keyof cascade, and the gap grows the bigger your types get.

npm$ npm i -D dot.paths
curl-impersonate-clicurl-impersonate-cli
Rust

An async Rust wrapper around the curl-impersonate CLI: it shells out to the curl_chromeNNN binaries so each request carries a byte-exact Chrome TLS and HTTP/2 fingerprint, the kind anti-bot vendors check against. Pure-Rust clients only approximate that handshake; here the browser's own stack sends it. No native build dependencies either, since it spawns a subprocess instead of linking BoringSSL.

cargo$ cargo add curl-impersonate-cli