first cut at an uber simple web app

Not for this PR, but as we should try and generate some of this from the templates to reduce hand-maintenance.