spun routegen out into a separate library