Projects

Things I've built. Some deployed, some experiments, all public.

Featured

m4binder

stars python

A Python CLI that converts folders of MP3 chapters into M4B audiobooks — chapter metadata, embedded cover art, Open Library lookup. Most-starred thing I've made; turns out a lot of people have a Calibre-shaped hole in their lives.

treant

stars crates.io downloads

Generic, parallel Monte Carlo tree search library in Rust. The kind of algorithm I kept understanding halfway — so I built it from the floor up.

BladeGen

stars typescript

Parametric sword generator and renderer for the web. Tweak the parameters, get a fresh blade. Built because I wanted to see what procedural geometry felt like in TypeScript.

TileTangle

stars rust

A tile-based puzzle / play surface, live and playable. Built in Rust + WASM.

fabula

stars crates.io downloads

Incremental pattern matching over temporal graphs — find evolving structural matches as a graph changes over time, without re-scanning the world.

Also building

argumentation

stars crates.io downloads

Rust crate implementing Dung-style abstract argumentation frameworks and ASPIC+ structured argumentation — for reasoning about which arguments survive defeat by others.

remark-code-region

stars npm downloads

Every code block in your docs is extracted from a passing test. Because docs code samples have a tendency to quietly become lies.

encounter

stars crates.io downloads

Social interaction resolution engine — multi-character encounters resolved via practice-scoped action catalogs and three resolution protocols. (For something narrative-shaped that's still cooking.)

force

stars python

Brute-forces inputs whose hash starts with a chosen prefix — vanity addresses, but for arbitrary content. Niche, but the search-space math is its own kind of fun.

Older

Anki-Spelling-Generator

stars python

Given an image of words, generates audio example sentences and Anki cards. Built when I was deeper in spaced-repetition tooling.

Stars and download counts are pulled live from GitHub, crates.io, and npm via shields.io.