Next.js has become the de-facto standard for production React applications, and for good reason. The introduction of the App Router in version 13 — and its maturation through versions 14, 15, and 16 — has given developers a mental model that actually maps to how the web works.
Server Components Change Everything
React Server Components allow you to fetch data at the component level without shipping that logic to the client. This means smaller JavaScript bundles, faster time-to-interactive, and a cleaner separation between what the server knows and what the browser needs.
For dashboards and data-heavy portals — a core part of our work — this is transformative. We can render complex tables and charts with zero client-side data-fetching waterfalls.
The App Router Mental Model
The file-based routing in the App Router, with layouts, loading states, and error boundaries built in, encourages architecture that degrades gracefully and loads progressively. It maps surprisingly well to the UX patterns our clients actually need.
When We Use It
We default to Next.js for: marketing sites, web applications, dashboards, and portals. We reach for other solutions only when there is a compelling reason — and there rarely is.
The ecosystem around it (Vercel, Supabase, the AI SDK) means we spend more time solving product problems and less time wiring infrastructure together.