Factor web interface out into its own project