Next.js Development Services for App Router and Caching
Billion Game
Book a strategy call

{{ col.title }}

{{ feature.tag }}

{{ feature.title }}

{{ feature.copy }}

{{ feature.cta }} {{ feature.cta }}
App Router · Server Components · caching

Next.js development services

We build and repair Next.js applications: App Router architecture, Server and Client Component boundaries, caching and revalidation strategy, Server Actions and Route Handlers, headless CMS and commerce integration, Pages Router migrations, and self-hosted deployment. Two things account for most of the Next.js work we are called into, and neither is a bug.

The client boundary is drawn in the wrong place. One component needed state, so use client went at the top of the page, and everything below it became a Client Component. And nobody knows which cache is holding the stale copy. Next.js has several, they behave differently, and the same symptom has four possible causes.

Client boundary audit, caching and revalidation map, route-level rendering behaviour, and dependency health · five business days

Scope it roughly estimating
Engagement
Where you are now
Typical band
{{ scopePrice }}
End to end
{{ scopeTime }}
What decides the number

{{ scopeNote }}

Fixed price on defined scope. Data model and integration count drive the number far more than route count does.

Before you enquire

What you are actually looking for

Four things nearly every enquiry turns out to be about, in the words people actually use.

{{ askTyped }}
The honest answer

{{ ask.title }}

What you mean

{{ ask.mean }}

What we do about it

{{ ask.doing }}

What you end up with

{{ ask.get }}

In practice

What the work looks like

Screens from live engagements, with client details removed.

The main view

{{ gTitle }}

{{ gr.label }} {{ gr.hits }} {{ gr.chip }} {{ gr.pct }}
{{ gStatLabel }} {{ gStat }}

{{ gNote }}

{{ gListTitle }} {{ gListCount }}

{{ gListNote }}

{{ gStackTitle }} {{ gStackTotal }}
{{ gw.label }} {{ gw.value }}

{{ gStackNote }}

Scope

What we build

Thirteen kinds of work, including the diagnostic engagements that establish whether you need a build at all.

{{ r.num }}

{{ r.a }}

{{ r.b }}

Try it · interactive

Where Next.js projects go wrong

Seven causes. Next.js gives you more architectural power than plain React and correspondingly more ways to switch its advantages off by accident. Tick what you recognise.

The pattern: almost every item here is a team paying Next.js's complexity cost without collecting its benefit. That is worse than not using the framework, and it is entirely recoverable.

{{ problemCount }} of 7 recognised
{{ verdictTag }}

{{ verdictTitle }}

{{ verdictBody }}

What each one costs you
{{ c }}
Nothing ticked yet. Pick whichever ones sound like your codebase and the cost of each appears here.
The decision that defines the architecture

Server Component or Client Component?

In the App Router everything is a Server Component until you say otherwise. The critical detail almost everyone learns late: use client is inherited by everything imported below it. Put it in the wrong place and you ship the whole page as JavaScript.

Interactive · describe a component

Where does the boundary go?

Two questions about one component, and you get the verdict plus where the directive actually belongs.

{{ d.label }}
Rule of thumb

Push the boundary as far down the tree as it will go. A Client Component can be a button inside a Server Component page, and that is almost always the right shape.

{{ bTag }}

{{ bTitle }}

{{ bBody }}

{{ bCode }}
If you get it wrong

{{ bCost }}

The part nobody explains

The caching layers

“The content will not update” is the single most common Next.js complaint, and it has four possible causes sitting in four different places. Diagnosing which one is holding your stale copy comes before changing any setting.

Layer What it holds Cleared by Symptom when wrong
{{ r.a }} {{ r.b }} {{ r.c }} {{ r.d }}
How we approach it

Tag-based invalidation wired to your CMS or data source, so publishing clears exactly the affected routes rather than everything or nothing. Then it is documented, because a caching strategy nobody can explain gets dismantled by the next developer who hits a stale page.

The anti-pattern we find most

Caching disabled everywhere, because at some point something was stale and opting out made the symptom go away. The site now re-fetches everything on every request, and the framework is doing strictly more work than a plain server-rendered app would.

Routers

App Router or Pages Router?

A question with a real answer rather than a default one. Both can run in the same application, which makes this less binary than it is usually presented.

{{ m.glyph }}

{{ m.title }}

{{ m.body }}

We will not recommend a migration you do not need. A Pages Router application that performs well and ships features is not a problem to be solved. Migrate for Server Components, streaming, or the newer data model, and not because the documentation moved.

Deployment

Vercel or self-hosted

A commercial question dressed as a technical one, and worth answering honestly in both directions.

Concern Vercel Self-hosted
{{ r.a }} {{ r.b }} {{ r.c }}

Self-host for a reason, not as a reflex. Data residency, an existing platform commitment, or predictable cost at real scale are good reasons. Avoiding a bill you have not compared against engineering hours is not, and we will show you that comparison rather than assume the answer.

Deliverables

What you receive

The actual documents, not a sample deck built for the pitch.

Engineering spec

Next.js rendering and architecture plan

52 routes · App Router · 2 data sources

01Rendering strategy per route 02Caching and revalidation rules 03Data fetching boundaries 04SEO and metadata handling 05Deployment and edge config
B Every decision has a written reason
Report
App health at handover
Server render coverage97%
Core Web Vitals94
Cache hit rate88%
Edge readinessPartial

Edge deployment is the lowest bar and the one that needs a cost conversation first.

Priorities
Per-route report
Route Was Now
/3.9s0.8s /blog/*4.6s0.7s /pricing3.2s0.6s /docs/*5.1s0.9s /app/*6.4s1.6s

Largest Contentful Paint per route, measured in the field.

Handover
Pricing

Next.js development pricing

Fixed price on defined scope. Paid discovery where the scope is genuinely uncertain.

01 · What do you need
02 · How big {{ estSizeLabel }}
Small Very large
03 · Anything else
Estimate {{ estUnit }}
{{ estLow }} to {{ estHigh }}

{{ estNote }}

{{ eb.label }} {{ eb.value }}
Get this scoped properly

An estimate, not a quote. Fixed price follows a scoping call, and where requirements are genuinely uncertain we run a paid discovery phase first.

The caching and rendering audit is the cheapest useful thing on this list. It regularly establishes that the problem is one boundary in the wrong file and three cache settings, on a codebase where a rebuild was already being discussed.

Fit

Who we work with

{{ f.glyph }}

{{ f.title }}

{{ f.body }}

Probably not us if the requirement is a content site with no application behind it. Next.js will do it, and a content-managed platform will do it for less money with faster publishing. If you want the general React case rather than the framework specifics, that is React development.

Free · five business days

Get a free Next.js app review

Including a client boundary map: every use client in your codebase and how much of the tree each one converts.

  1. {{ a.n }} {{ a.text }}
Build walkthrough Screen share · {{ gLoomTime }}
{{ gc.label }}

Requires repository read access for the boundary and caching analysis. If the architecture is sound and the answer is two revalidation changes, we will tell you that.

{{ whyNote }}

These three determine most of what the review will find. Rough is fine.

No sales sequence. A developer reads the code and writes the review, and you will be able to tell.

Request received.

{{ sentNote }}

Evidence

Before and after

The same view, before the work and after it.

Before
{{ gf.label }} {{ gf.pct }}

A fast framework configured so that search engines saw almost none of it.

After
{{ gf.label }} {{ gf.pct }}

Same codebase, rendering decided per route instead of by accident.

Our stack

Billion Game runs your work through the same instruments the best in-house teams use.

Licences are on us, and every export we pull from them is yours to keep.

{{ s.alt }}

Be wary of any agency whose reporting is a tool dashboard with their logo on it. Tools measure; they do not decide what matters, and every one of these will happily generate a hundred findings that change nothing. What you are paying for is the judgement about which three of those hundred are worth your developers’ time.

FAQ

Next.js development FAQs

Anything not answered here, ask us directly.

The short version

Push the client boundary down. Know which cache is holding the stale copy before you change a setting. Invalidate by tag, not by disabling caching. Migrate routers for a reason. And self-host for a reason too.

{{ f.a }}

Do you know which cache is holding the stale copy?

Free app review covering the client boundary map, caching and revalidation, route rendering behaviour, and dependency health. Five business days.