html front end, will require more cleanup