Single page applications are one of the most anoying web patterns i know of. Please just let me have one page for each ting to do so i actually can bookmark it properly.
Once backend and frontend became two separate teams frontend people didn't want to keep asking backend to make logic changes for state, so frontend took things into their own hands. The mistake was making it two separate teams.
[−]impulsivepuppet · 2026-08-21 Fri 11:15 UTC ·
link
the frontend team can write a BFF to make all pages render server-side. there is an advocacy group for keeping oauth2 clients out of browsers which gives this idea some _political_ merit. in ways more than one, SPA is not the only solution when a dedicated _frontend team_ is employed.
The separation of teams happened before the BFF pattern came into existence so all frontend engineers became specialists in frameworks like React. Unless you can do it with React, FE's won't touch a BFF or anything else for that matter.
[−]ThunderSizzle · 2026-08-20 Thu 16:52 UTC ·
link
Ive made SPAs in Blazor that make it a point to update the URL whenever a "navigation" occurs. I also made it a point to ensure refreshing or loading the URL restored the state.
It's a small problem compared to the ease of use for development you can gain via Blazor, so I don't see any reason not to solve it.
This is possible and, in my experience building them, the norm. SPAs have routers and update navigation state, including history for browser Back/Forward
It's the norm to try to re-implement browser functionality in JS but it is very far from the norm for the re-implementation to work as well and as reliably as the native browser functionality.
I remember when it was considered ridiculous to have a page take more than 250ms to complete its loading. Now nobody bats an eye at a 25MB page that takes over 30 seconds to load. I'm sticking with the old ways, thank you very much.
It's a small problem compared to the ease of use for development you can gain via Blazor, so I don't see any reason not to solve it.
But this can be done in any JavaScript framework and ofcourse Vanilla JavaScript. It takes some effort, but creates a much better user experience.