Final Scorecard

●●●●● = best in this comparison, ●○○○○ = worst. Scored on what was actually measured or hit while building each stack, not vibes.

Category vanilla-static vanilla-spa site-server react vue angular
Deployable size ●●●●● ●●●●● ●●●●● ●●●●● ●●●● ●●●●●
Fewer HTTP requests ●●●●● ●●●●● ●●●●● ●●●●● ●●●●● ●●●●●
Dev dependency footprint ●●●●● ●●●●● ●●●● ●●●●● ●●●●● ●●●●
No build step ●●●●● ●●●●● ●●●●● ●●●●● ●●●●● ●●●●●
Less code for the 4 features ●●●●● ●●●●● ●●●● ●●●● ●●●●● ●●●●●
Accessibility "for free" ●●●● ●●●● ●●●● ●●●●● ●●●●● ●●●●
Component/slot ergonomics ●●●●● ●●●●● ●●●●● ●●●●● ●●●●● ●●●●●
Tooling/testing maturity ●●●●● ●●●●● ●●●● ●●●●● ●●●● ●●●●●
SEO/GEO crawlability ●●●●● ●●●● ●●●●● ●●●● ●●●● ●●●●
vanilla-staticContent-heavy site, occasional edits, longest possible shelf life with zero maintenance burden.
vanilla-spaWant app-like transitions without adopting a framework's whole model — and can serve over http.
site-serverAlready writing a backend anyway; want templating without a JS framework — and real SEO/GEO crawlability the other five would need a much bigger toolchain to match.
reactTeam already knows it, ecosystem/hiring matters more than bundle size for this project.
vueBest code-to-feature ratio here; smallest framework bundle; strong pick if starting fresh.
angularLarge team, long-lived enterprise app where the batteries-included structure pays off over years.