A single-page app is a trade: snappy jobs, empty HTML for crawlers, and a blank screen until JS wakes up. Know when that trade is bad.
Tags: Architecture, React, Operations, Web Development, unlisted
For a public blog, a SPA needs help — server HTML, sitemaps, feeds — or search engines see a shell. For a private count tool, a SPA is usually fine.
If leads need to print a stable URL that works in a browser with JS blocked, I am in the wrong shape. Rare on the floor. Real for some office workflows.
Hybrid is allowed
Public pages get extra HTML at the edge. Logged-in tools stay as apps. I do not force one architecture on both just to feel consistent.
The blank #root is a product decision
If humans never see it, fine. If they do on slow phones, I show a tiny static "loading the count tool" in index.html for that route, not a marketing splash.