Most of my current work sits around the work: the checks, commands, and small libraries that make a repository easier to trust.

That includes small-rules, a collection of old ESLint rules I’m moving to Oxlint. Porting the implementation is only half the job. The more interesting part is deciding which opinions are still useful, which diagnostics need better explanations, and which rules should disappear instead of surviving through inertia.

It also includes pullhook, a Rust tool that runs commands after git pull when relevant files changed. It exists because “remember to reinstall if the lockfile changed” is not a system. It is a sentence waiting to be forgotten.

The goal is to make strict tooling useful without it getting in the way. Speed is the first step. If a check takes long enough to break your flow, you’ll avoid it or ignore it until it’s too late. Defaults matter too. Config should describe the weird parts of a repo, not repeat the tool’s whole philosophy.

I still wander into data structures, game-development systems, and whatever else looks like it could become a small reusable thing. Not every experiment needs to become a package. The ones that do should have a clear job, decent failure modes, and enough documentation that another person can decide whether it belongs in their work.

This site is part of the same exercise: less profile page, more maintained index of what I am actually building. The useful version is the one I can keep current.