Lots of cleanup needed, but here's the current state of the project.