first pass at front end