Why we default to Next.js for new marketing sites
When a new marketing or product site brief comes in without a strong platform preference already attached, our default starting point is Next.js. That's not brand loyalty to one framework; it's a specific set of tradeoffs that happen to fit most of the projects we see, and it's worth explaining what actually drives the default rather than just asserting it.
Static generation gets you speed without extra infrastructure
Most marketing sites don't need a database query on every page load. Next.js lets us pre-render pages at build time and serve them as static files from a CDN, which means fast load times by default rather than something we have to engineer separately. That directly serves the Core Web Vitals work we're usually doing on the same engagement anyway, without adding extra project scope.
It scales up without a rewrite
A site that starts as a simple marketing presence often grows a blog, then a client portal, then some genuinely dynamic functionality. Next.js handles that whole range, from fully static to fully dynamic, inside one framework, so growth doesn't force a platform migration the way it sometimes does with a simpler static site generator that was never meant to handle dynamic features.
The hiring and handoff argument
React and Next.js have a large enough talent pool that a client can hire their own developer later, or bring the project in-house, without inheriting an obscure or proprietary stack only we understand. That matters to us specifically because we hand off clean, readable code as standard practice, and a common framework makes that handoff actually usable rather than just technically possible.
What this looks like on a real project timeline
For a recent 14-page marketing site with a light blog, choosing Next.js meant the deployment pipeline, image optimization, and font loading were solved by the framework's defaults rather than custom-built, which freed up real time in the schedule for design refinement instead of infrastructure work nobody was going to see or appreciate directly.
When we don't default to it
For a client already deeply invested in WordPress with a content team that needs its editing tools, or for a simple site that genuinely never needs anything beyond a handful of static pages, we don't force Next.js just because it's our default. The framework serves the project, not the other way around, and we say so even when it means recommending a smaller, simpler engagement.
A specific feature that tips the decision in Next.js's favor
Built-in image optimization, automatically resizing and serving modern formats without a separate pipeline, saves real setup time on nearly every project and directly supports the Core Web Vitals goals most engagements already have. It's a small thing individually, but it's one of several small things that add up across a project.
Where a plain React app might make more sense instead
For an internal tool with no public SEO requirement and no need for server rendering, a simpler Vite-based React app can be a lighter, faster-to-set-up choice than Next.js's fuller feature set, most of which exists to solve problems a public-facing, SEO-sensitive site actually has.
How this default has changed over the years we've been building
We didn't always default to Next.js; earlier projects used other static site generators that were reasonable choices at the time. Frameworks evolve, and we revisit our own defaults periodically rather than treating a past decision as permanent just because it worked previously.
We didn't always default to Next.
What clients don't need to know, but sometimes ask about
Some technically-minded clients ask us to justify the framework choice in detail before signing off. We're happy to walk through the reasoning, but we're equally clear that the framework is our tooling decision to make well, the same way a client wouldn't expect to approve which specific hand tools a contractor uses on a renovation.
How server components changed our thinking about this default
Newer rendering patterns in the React ecosystem have made it easier to keep data-fetching logic on the server while still getting a fully interactive client experience where needed, without the complexity that used to require. This continues to reinforce Next.js as a sensible default rather than something we'll likely move away from soon, since the framework keeps absorbing complexity that used to require custom solutions.
What we tell a client asking about vendor lock-in with this choice
Because the underlying code is standard React, a client isn't locked into any single hosting provider despite Next.js originating from Vercel. We deploy client sites on whichever hosting platform makes sense for their situation, and we explain this distinction clearly, since "lock-in" is a reasonable concern that deserves a direct, honest answer rather than being waved away.
How we handle a client request to use a completely different framework we have less direct experience with
If a client has a specific, well-reasoned business need for a framework outside our usual default, an existing internal team's expertise, a specific integration requirement, we'll build in it, bringing in additional research or a specialist collaborator if needed, rather than insisting on our own preferred stack regardless of the client's actual situation and constraints.
We also stay deliberately current on the framework's own roadmap and major version changes, since a framework that's actively maintained and evolving is a meaningfully safer long-term bet for a client than one that's stagnated. Part of why Next.js remains our default, beyond its current feature set, is the consistency and pace of its ongoing development, which gives us real confidence recommending it for a client project that needs to remain maintainable and relevant for years, not just look good on launch day.
How this default shows up in what we quote
Because we've built dozens of sites on Next.js, our estimates for a Next.js project tend to be tighter and more reliable than an estimate for a less familiar stack, simply because we know from direct, repeated experience how long each piece actually takes. That estimating accuracy is a real, if indirect, benefit of standardizing on one primary framework rather than picking a fresh stack for every new engagement.
It also means our internal tooling, deployment checklists, performance testing scripts, accessibility audits, is built specifically around how a Next.js project is structured, which shortens the setup phase of nearly every new project before any client-visible work even begins. A client benefits from this accumulated tooling investment without ever seeing it directly, since it mostly shows up as fewer surprises and a faster start than a genuinely from-scratch technical setup would allow.
How we onboard a client team onto a stack they've never used
For clients taking a Next.js site in-house after launch, we run a short technical handoff session covering the project's actual structure, not a generic Next.js tutorial, so their developer can get oriented in hours rather than days. This is a small additional step, but it's the difference between a handoff that genuinely transfers ownership and one that leaves the client quietly dependent on us for changes they should be able to make themselves.