separated logic so tips have their own controller and routes