It breaks so often in SPAs. Turns out that making the client-side code responsible for routing leads to a ton of fragility.