Client-side routing

(and accompanying server-side changes)