Skip to content

Next.js development

If you already use React, Next.js is not a different library. It is a decision about where each page is rendered, what gets cached, and who operates the server that now exists. Those are the questions worth ten minutes.

01Capabilities

Where choosing per route changes the product

React is the library and this page is the layer above it: rendering, routing, caching and hosting. The work below is where that layer changes the outcome rather than just the folder structure.

  • Hybrid

    Products with a public surface and an app behind it

    A marketing surface that has to be found and indexed, plus an application behind a login, in one codebase with a different rendering strategy for each. Splitting them into two projects is the alternative, and it usually means two design systems within a year. Both halves are one web build.

  • Rebuilds

    SaaS platform rebuilds

    Replacing an application that renders entirely in the browser and has become slow to load and awkward to change, including data-heavy products in energy and sustainability. Rendering on the server is often what removes the loading spinner, not more work in the browser.

  • Scale

    Content-driven product pages at scale

    Hundreds or thousands of generated pages from a CMS or a database, built at deploy time or refreshed on a schedule, where first paint and being indexable both decide whether the page is worth having. Built under an ISO 27001:2022 certified information-security management system.

  • Handlers

    The API layer next to the interface

    Route handlers doing session work, form handling and calls out to internal services, so the browser is not talking directly to five systems. Anything long-running belongs in a real service behind it, on Node.js or elsewhere.

03Fit

When the extra server is not worth running

The React page puts it correctly: the question is really about rendering strategy and hosting, and this page is where that question gets answered. Next.js is our default when a product has public pages worth indexing, and a poor default when it does not, because you take on a server and a cache that somebody then has to operate. Four of the six rows below send the work somewhere other than a Next.js project with us, and two of those send it nowhere near us at all.

Six situations, and what we would tell you in each
Your situationWhat we recommend
Public product pages where first paint and search visibility both matter Use Next.jsThis is the case it earns. Mixing built-ahead, per-request and browser-rendered routes in one project is the actual advantage.
An application entirely behind a login, with no public pages at all We argue againstPlain React served as static files. A server buys you nothing here and adds something somebody has to run at 3am.
Mostly content, with very little for the reader to interact with Do lessA static site build, or pages served by whatever already holds your content. This is more machinery than the problem deserves.
A team already productive in Vue Different pageDo not switch frameworks over this. Vue has the same server-rendering answer in its own ecosystem, and your people already know it.
Heavy background jobs, queues or long-running processing Different pageNot in a web framework. That belongs in a service with its own lifecycle, see Node.js, with the pages calling it.
A hard requirement to run it inside your own network Decide that firstPossible, and worth settling before you build. Image handling and scheduled refreshes cost real extra work off the platforms designed for them.

Scope

What we own is the rendering and caching model and what it costs you later. Which routes are built ahead of time. Which are built per request. What a reader sees when the cache and the database disagree. All of it written down, because these choices are invisible in the code and expensive to reverse. unicrew has been building web products since 2012, with 100+ senior in-house engineers across six countries, under an ISO 27001:2022 certified information-security management system.

The rendering decision is a per-page one and teams keep making it once for the whole product. A marketing page and a logged-in dashboard have opposite needs, and a framework that lets you choose per route is only useful if somebody actually chooses. When we inherit a slow Next application, the cause is almost always that everything was rendered the same way.

Andrii BurdaSenior Engineering Manager, unicrew

04Delivery

Four calls we make before route one

Four decisions we make early, because retrofitting any of them means touching every route.

  1. Decide the rendering strategy per routeBuilt ahead of time, rendered per request, or refreshed on a schedule, chosen route by route and written down with the reason. Inheriting this from a starter template is how products end up rendering a dashboard on a server for no reason.
  2. Fix the data-fetching and caching boundaryWhere data is fetched, what is cached, and how a cache is cleared when something changes. This is the single largest source of both speed and stale-data bugs in a Next.js codebase.
  3. Prove the hosting target earlyA managed platform or your own infrastructure, decided and deployed in the first weeks with images, redirects and middleware exercised. Hosting surprises here arrive late, and they arrive as architecture changes.
  4. Measure real routes, not lab scoresPerformance data from the routes users actually hit, on the devices they actually have. A perfect score on a synthetic test and a slow product are entirely compatible. Test automation goes in alongside, through the same QA practice as our own projects.

06Questions

What people want settled before the first sprint

Answered the way we would answer them live. If yours is not here, it is a good first message.

Yes, and on a product you already own it is often the sensible shape. What we will not do is take the framework as given and stay quiet about the rendering model, because that is where these projects go wrong. An architect outside the delivery team reviews the rendering and caching design, and the work goes through the same QA practice as ours. Team extension is managed teams; the outcome is web development.

Routing, server rendering, a build and caching pipeline, and a place to put server-side code next to the interface. It does not change how you write components. The practical difference is that a page can be rendered before it reaches the browser, which is what makes it indexable and what removes the empty first paint. It also adds a server and a cache to the things you operate, so it is a real trade rather than a free upgrade.

The rule we use: if the content is the same for everyone and changes rarely, build it ahead of time. If it is the same for everyone but changes often, build it ahead and refresh on a schedule. If it depends on who is asking, render per request. If it depends on interaction and nobody outside needs to read it, render in the browser. Most products need three of those four.

Yes, as a Node process or in a container, and plenty of products do. Image handling, scheduled refreshes and edge middleware are the features that cost extra work when you run them yourself, and that cost lands on whoever operates it. We would rather agree the hosting target in the first week than discover it during a launch. Our DevOps practice owns that side when we run it.

A scoping call with an engineer rather than a salesperson. For an existing app we want repository access and, if you have it, real performance data from users, because a chain of blocking requests shows up in minutes and cannot be described in a meeting. You get back a written read on the strategy per route, the caching model, and what we would change first. Most engagements start within two to four weeks.

Three shapes, and which one fits depends on how settled the scope is. Time and materials is billed hourly and quoted per project, which suits work still moving. Fixed price is outcome based, and we only offer it once the first read is done, because a fixed number on a system nobody has opened is a guess with a contract around it. Team extension is billed monthly per engineer.

Picking a strategy, or fixing one?

Tell us what is public, what is behind a login, and where it has to run. You will get a straight recommendation on the rendering strategy, including the case where plain React is the better answer.

Book a scoping call

Thank you

Thanks for your message. We will get in touch with you shortly.