Projects

Budge

An open source & extensible money tracking tool without any bloat.

Browser Games

A collection of HTML5 JS minigames made for the browser.

SAT Solver

A SAT solver logic DSL & proof generation toolkit written in OCaml.

Contact

If you'd like to get in touch, send me an email and I'll do my best to get back to you soon. It can be about anything - it's always interesting to find out what kind of people end up stumbling across the site, so send away!
Public Key
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
GB23J9qzEy7d
=47Og
-----END PGP PUBLIC KEY BLOCK-----