I had grand plans for cleaning up this codebase and publishing it a year ago. Life got in the way and I've forgotten entirely how it works. As an act of personal growth, I am publishing it here in its very rough and incomplete state, on the slim chance that someone else might find something useful in it.