more cleanup, styles, and client-side validation