clean up, use JSON to drive UX