It's one of the first architecture questions we ask in discovery: does this app need to be a single-page application (SPA) or a multi-page application (MPA)? Most clients haven't thought about it, which is fine — that's our job to guide. But the answer matters more than people realise.

What are SPAs and MPAs?

A multi-page application works the traditional way: the browser requests a page from the server, the server renders it, and the browser displays it. Click a link, request a new page. This is how most websites have always worked.

A single-page application loads once. The browser downloads the application shell, then JavaScript takes over. When you click a link, JavaScript swaps the content in-place without a full page reload. It feels faster and more app-like.

When to choose a SPA

SPAs shine when your application is highly interactive — dashboards with real-time data, collaborative tools, email clients, project management software. The faster transitions and persistent UI state (you don't lose your place when data refreshes) create a genuinely better experience.

They're also better when you have significant JavaScript logic on the client — complex forms, client-side calculations, rich media interactions. Keeping that in the browser reduces server load and round-trips.

When to choose a MPA

MPAs are simpler to build, easier to host (static files or basic server rendering), and better for SEO. If most of your pages are publicly readable — a blog, a documentation site, a marketing-heavy product site — an MPA (or Next.js which gets you SPA benefits with MPA SEO) is the pragmatic choice.

The performance gap has also narrowed significantly. Server-side rendering, static site generation, and edge caching make MPAs feel nearly as fast as SPAs for most use cases.

Our recommendation

If your app has authenticated users, complex state, and interactive workflows — go SPA with React. If you're building a public-facing site where search engine visibility matters, or if the budget is tight and you need to keep it simple — MPA with Next.js covers both bases. We'll guide you to the right choice during discovery.