router: add namespacing and organize by modules