frontend first pass