implement most of the features, cleanly separate the parsing from the rendering and document the proejct