Architecture & Engineering

Why we use Next.js for business websites

Why Next.js fits our business websites: server rendering, static generation, predictable routing, metadata control, image tooling, and a clean path to custom application behavior.

We use Next.js because it gives us several useful web primitives in one system without requiring every website to behave like a single-page application. That is the important part. The value is not the logo on the framework. The value is that the same codebase can statically generate a service library, server-render a route when necessary, render React components on the server, isolate browser-side interaction, generate metadata, optimize images, and expose a narrow server endpoint when a feature actually needs one.

That range matches the kinds of projects we build.

Most business pages want to be documents

A service page is fundamentally a document. So is a location page, article, case study, legal page, or technical guide. Those pages benefit from being available as meaningful HTML without requiring the browser to assemble the core content. Next.js supports that naturally through Server Components, static generation, and server rendering.

We can start from a document-oriented architecture and add interactivity where it earns its place. That is different from beginning with a client-side application and trying to make it behave like a document afterward.

Static generation fits our content model

A large portion of our public content is known before the visitor arrives. The list of services is known. The article body is known. The location copy is known. The documentation page is known. Dynamic route families can enumerate those content items through generateStaticParams() and build the pages ahead of time.

That gives us a very efficient delivery model. The visitor does not need a database query merely to read a page whose content changed last Tuesday.

Server Components help us keep JavaScript off the browser

React is useful for structuring the interface. It does not follow that every React component needs to execute in the browser. Next.js lets us render most content components on the server and keep client components around the actual browser interactions. That distinction is one of the reasons our sites can remain feature-rich without growing into large client bundles.

The deeper explanation is in Why our marketing sites are server-first.

The App Router maps well to real information architecture

The folder structure can mirror the public route structure. Static pages remain obvious. Dynamic page types have explicit route segments. Shared layouts can wrap the site. Not-found behavior belongs in the routing system. Metadata can be generated at the route level. That makes it easier to look at the repository and understand how a URL is produced.

We value that clarity because the code eventually has to be maintained by somebody who was not present when every decision was made.

It gives us server behavior without forcing a separate backend

Some marketing features need a trusted server boundary. A form may need validation before it reaches a provider. A gated resource may need to set a secure cookie. A webhook may need verification. A small API integration may need a secret. Next.js route handlers let us add that behavior inside the application when the scope is narrow.

That is useful because the alternative is often either exposing logic to the browser or creating an entirely separate backend service for a tiny amount of server work. We still create separate services when the product needs them. We simply do not start there by default.

Metadata support is a first-class advantage

SEO metadata is not an afterthought in the framework. Routes can export static metadata or generate it from content. That works particularly well with our MDX systems. The same service object that supplies the H1 and description can supply the page title, canonical path, social image, and structured-data inputs.

Several of our repos wrap those capabilities in shared metadata helpers so the policy remains consistent across route families.

The image pipeline solves real production problems

Image-heavy business sites can transfer enormous files if nobody controls the asset pipeline. Next.js gives us a responsive image component, static image imports, intrinsic dimensions, generated sizes, modern formats, and caching controls. The framework does not guarantee good image performance. We still have to provide sensible source images, sizes, loading priority, and layouts.

It does give us the tools to build a consistent image policy. One of our image-heavy repos explicitly configures AVIF and WebP output, device breakpoints, image widths, allowed quality levels, and long cache lifetimes. That is the kind of control we want.

Font handling also fits our performance model

Several projects use next/font so fonts are integrated into the build instead of relying on an uncontrolled third-party stylesheet request. We can preload the primary family while allowing a secondary display family to load with less urgency. Again, the framework gives us the mechanism.

The design still has to make the priority decision.

Vercel is a practical deployment fit

We use Vercel heavily because its Git integration matches the branch-first workflow we want. A branch can become a preview deployment. The production branch can become the public release. The framework and platform understand each other well, which removes a lot of custom deployment plumbing for ordinary sites.

That is operational value. It does not mean the code should become impossible to run elsewhere. We still care about repository ownership and understandable infrastructure.

Next.js is not automatically fast

This deserves emphasis. A Next.js site can be slow. Mark the whole site use client, add giant third-party bundles, load oversized images, preload everything, animate every section, and block the page with tracking scripts, and the framework will not save you. Performance comes from architecture and discipline.

The framework mostly gives us the option to make the right decisions.

It is also not the answer to every project

A small static site could be built with another framework. A highly interactive application may have different needs. A backend-heavy system may involve services well beyond Next.js. We choose it often because the combination of routing, server rendering, static generation, React, metadata, images, route handlers, and deployment fits our normal work unusually well.

The decision is practical, not religious. The best framework is the one that lets the team build the required system clearly, keep it fast, and hand it off without unnecessary machinery. For a large share of our business websites, Next.js does exactly that.

From explanation to proof

Where this connects to the work

This category is the clearest technical proof that our sites are built as maintainable software rather than assembled as isolated pages.