refactor out interact into it's own file