add specs, implement route generation