The framework decision, not the platform decision

Technology

Next.js is the framework decision, Vercel is the platform one. You can run either without the other, though most of our client work pairs them. The App Router put server and client code in the same component tree and made rendering a per-route decision: static, revalidated, or fully dynamic, instead of one choice for the whole app.

We have built on Next.js since before the App Router existed, spoke on ecommerce at enterprise scale at Next.js Conf, and migrated MacStadium's marketing site onto it with a component system that scored well across Core Web Vitals. It is still our default for anything with real client state.

View Technology
Monogram logo

Why

What the framework actually gives you

  1. Server Components changed the rendering unit

    Before the App Router, the line between server and client ran through the whole page. Now it runs through each component: one that never needs interactivity stays on the server and ships no JavaScript, one that does gets marked as a client boundary. That is a decision at the file level, not the page level.

  2. Rendering strategy is a per-route decision

    Static generation, incremental revalidation, and server rendering all live in the same app, chosen route by route instead of once for the whole project. A marketing page can be fully static while the dashboard next to it renders on every request. Getting this wrong is the most common Next.js performance bug we see.

  3. You inherit React's complexity budget too

    Hooks rules, hydration mismatches, and client bundle discipline do not go away because the framework is opinionated about routing and data fetching. A team that has not internalized React's own footguns will hit them inside Next.js just as often as outside it. The framework does not fix React, it structures it.

  4. The edge runtime narrows what you can do

    Middleware and edge functions run in a restricted runtime, not full Node. No native modules, a different set of web APIs, and code that behaves differently depending on where it executes. We plan for that split up front, not when a dependency fails to build for the edge.

  5. The ecosystem is the real advantage

    React's hiring pool, component libraries, and integrations dwarf every alternative on this page. We have built on Next.js since before the App Router existed and spoke on enterprise ecommerce at Next.js Conf. That maturity is worth more in practice than most framework-level technical arguments.

  6. Legacy Pages Router debt still shows up

    Plenty of the production codebases we inherit are still on the Pages Router, or halfway migrated with both patterns coexisting in the same app. That migration is real work, not a weekend refactor, and we scope it as its own project instead of pretending the upgrade is free.

Next.js projects

What we've shipped on it

Where it's the wrong call

When we reach for something else

Writing

Notes from the field