Web UI (wip)

PR for #2, don't merge this in yet! also, please do #7 first!