mostly done with frontend refactor