Partial web app (part 3)

penultimate cherry-picked pull request.