O modelo SPA + REST nasceu em um tempo em que os navegadores eram limitados e o servidor só conseguia renderizar HTML estático. Hoje esse cenário mudou completamente. Continuar separando frontend e backend em dois projetos distintos é insistir em uma complexidade que não traz ganho real. Essa arquitetura cria redundância — dados trafegam via HTTP entre duas camadas que poderiam se comunicar diretamente. Serialização, validações duplicadas e inconsistências de versão viram o dia a dia. No fim, é mais código, mais build, mais deploy e mais chance de erro.
A ideia de que SPAs são mais rápidos também não se sustenta. O carregamento inicial é pesado, o navegador precisa interpretar megabytes de JavaScript, hidratar a página e reconstruir o DOM. Enquanto isso, um SSR moderno entrega HTML pronto e interativo em milissegundos, aproveitando cache, fragmentos e streaming. O usuário vê conteúdo real muito antes — e sem depender de bundles, hydration e loaders intermináveis. A percepção de velocidade, que é o que importa, é muito melhor.
Além disso, SPAs trouxeram problemas que o SSR já tinha resolvido há décadas: estados inconsistentes, race conditions, duplicação de lógica e a necessidade de reinventar o controle de sessão no cliente. Hoje temos tecnologias como HTMX, Viewi, Livewire e Inertia que permitem criar interfaces ricas e interativas sem mover a aplicação inteira para o navegador. O resultado é código mais limpo, menos dependências e manutenção mais simples.
Separar projetos também não é o mesmo que separar responsabilidades. Podemos ter uma arquitetura limpa, modular e testável dentro de um mesmo repositório — com deploy atômico, versionamento coeso e comunicação direta entre camadas. O mito da “separação por stack” só aumenta a fricção entre times e torna cada ajuste um problema de integração.
Em resumo, SPA + REST é uma solução para um problema que a web moderna já resolveu. Não é uma evolução, é um desvio histórico. Hoje faz mais sentido unir as camadas novamente, aproveitando o que cada lado tem de melhor — o servidor cuidando da lógica e o navegador da interação — em um fluxo contínuo e integrado. Isso não é um retrocesso, é um retorno à eficiência.