Skip to content
PRSINDIA

Next.js 15 · App Router · RSC

Next.js Development

React that renders on the server, ranks in Google and does not ship 300 KB of JavaScript to say hello. We build Next.js applications on the App Router with Server Components, Server Actions and a caching strategy written down per route.

  • LCP under 1.5s on 4G
  • 90 KB first-load JS budget
  • ISR: publish to live in seconds
  • Self-hosted or Vercel
Why Next.js

React, without the SEO tax.

For a decade the trade was miserable: pick React and lose the search engine, or pick server-rendered HTML and lose the interface. Next.js on the App Router ends the trade. Server Components render on the server and ship no JavaScript for themselves, so Google gets real HTML and your user gets a page that is interactive before a single-page app would have finished downloading its bundle. That is the theory. The reason we reach for it in practice is narrower and more useful: it is the only mainstream React framework where a marketing site, a logged-in dashboard and a public content archive can share one component library, one design system and one deploy pipeline without anybody pretending they are the same kind of page.

Talk to a Next.js engineer
0s
Median LCP

Across the Next.js builds we currently run, measured on 4G field data — not lab scores.

0KB
First-load JS

Our budget for a content route, gzipped. CI fails the build if a PR pushes it past.

0%
Less JS shipped

Typical reduction when we move an existing React SPA onto Server Components.

0s
Publish to live

On-demand ISR revalidation from a CMS webhook. No rebuild, no redeploy.

How we actually build it

We have shipped the App Router in production since it stabilised, and we have also had to un-ship it once. Both experiences inform how we build. What follows is what we actually do, not what the marketing site says.

Server Components are a data-fetching decision, not a styling one

The default in every project we start is a React Server Component that reads from the database or an internal API, renders to HTML on the server, and ships no JavaScript for itself. Client components are introduced deliberately, at the leaves — a date picker, a chart, a cart drawer — and they are the exception we justify in review, not the default we drift into. The practical effect is a first-load JS budget we can hold under 90 KB gzipped on a content route, against the 300 KB+ that a conventional React SPA of the same surface area ships before it renders a single pixel.

Server Actions replaced most of our API layer

For product surfaces where the Next.js app is the only consumer, we write mutations as Server Actions with Zod validation at the boundary and revalidateTag() for cache invalidation. That deletes an entire tier of hand-written route handlers, request DTOs and client fetch wrappers. We do not do this when a mobile app or a third party also needs the same operation — then it is a real versioned REST or tRPC endpoint, and the Server Action, if it exists at all, calls it. Choosing wrong here is the most common architectural mistake we are asked to clean up.

Caching is the part that bites

The Next.js cache is four caches wearing a trench coat: the request memo, the Data Cache, the Full Route Cache and the client Router Cache. Most "why is my page stale" incidents are someone reasoning about one of them while a different one is serving. We put every fetch into an explicit tag namespace on day one, keep a single module that owns revalidation, and treat an untagged fetch as a review failure. ISR with on-demand revalidation from the CMS webhook then gives us static-file latency with a publish-to-live time in the low seconds.

Rendering strategy, per route, written down

Marketing and content routes are statically generated and revalidated on publish. Logged-in dashboard routes are dynamic and streamed, with Suspense boundaries around anything that touches a slow upstream so the shell paints immediately. Partial Prerendering, where the static shell ships instantly and the personalised holes stream in, is the direction we take when a route is genuinely both. We record the choice per route segment in the repo, because the alternative is a codebase where nobody can say why a page is slow.

The boring infrastructure that actually decides your bill

Next.js will run happily on Vercel, and for a marketing site it is worth every rupee. For an application with heavy traffic and long-running server work, the economics change fast, and we will tell you so. We deploy Next.js in a container on your own infrastructure — AWS ECS, Fly, Hetzner, whatever fits — behind a CDN, with Redis holding the Data Cache so multiple instances share it. The same app, the same code, a materially different invoice at the end of the month.

The honest part

When Next.js is the right call — and when it is not.

  Choose Next.js Choose something else
Public content that must rank Yes. Server rendering plus ISR is the strongest combination available in the React ecosystem, and metadata is a first-class API. WordPress is still fine if the site is purely content and your team already lives there. Do not rebuild it out of fashion.
Internal dashboard behind a login Only if it shares a codebase and design system with your public site. Then the reuse pays for the complexity. A plain Vite + React SPA. There is no SEO to win, so server rendering buys you nothing and costs you a build pipeline and a caching model.
Team has no React experience Not on a deadline. RSC is a genuinely new mental model, and the failure mode is a codebase where everything is "use client". Laravel with Livewire, or Blade. You will ship faster in a stack your team can already debug at 2am.
Highly interactive canvas or editor The shell can be Next.js, but the editor itself is a client component and gains nothing from the framework. Vite. Faster HMR, no server-rendering constraints to fight, and you keep the whole app in one mental model.
You need to control hosting cost precisely Workable. We deploy it in a container with Redis-backed caching and the bill behaves like any Node service. If you cannot self-host and Vercel usage-based pricing is a risk you cannot carry, a static site generator like Astro is cheaper and simpler.
Mobile app is also on the roadmap Strong. The API layer, types and validation schemas are shared with a React Native client with almost no duplication. Nothing changes this — but do build a real API tier from the start rather than leaning on Server Actions, or the mobile client will have nothing to call.
What we build

Next.js work we take on.

Six shapes of project cover almost everything we are asked for.

Headless marketing sites

Next.js front end, a CMS your marketing team will actually open, ISR so a publish is live in seconds without a rebuild.

SaaS product surfaces

Auth, org and role modelling, billing, a dashboard that streams rather than spinner-blocks, and an admin panel that support can use.

Commerce storefronts

Headless Shopify, Medusa or a custom backend. Static product pages, dynamic cart, checkout that survives a sale-day traffic spike.

SPA to RSC migration

An existing React app moved onto Server Components route by route, shipping continuously, with the JS budget falling every sprint.

Design system + component library

A typed, documented component library the marketing site and the product both consume, so the brand stops drifting between them.

Core Web Vitals rescue

A performance audit against field data, then the work to fix it — with budgets enforced in CI so it does not silently regress again.

Characteristics

Performance, SEO and cost — with numbers.

The three things anyone evaluating Next.js is actually trying to find out, answered without hedging.

  • LCP 1.2–1.8s on 4G

    Statically generated content routes served from a CDN edge. The HTML is already sitting there; there is no round trip to a database on the critical path.

  • INP under 200ms

    Because most of the page is a Server Component, there is very little JavaScript on the main thread to block an interaction in the first place.

  • Crawlers get real HTML

    No client-side hydration gap, no "render-blocked" pages in Search Console, no arguments with the SEO agency about whether Google runs your JavaScript.

  • ISR: static speed, dynamic freshness

    Pages are cached as static files and revalidated on demand when the CMS fires a webhook. You get CDN latency with a four-second publish cycle.

  • Hosting from ₹4,000/month

    A container on Hetzner or ECS with Redis for the shared Data Cache. Vercel is a fine choice too — but it should be a choice, not a default.

  • Budgets enforced in CI

    Lighthouse CI and a bundle-size check run on every pull request. A regression past the budget fails the build. Performance stops being a quarterly cleanup.

Migration path

WordPress to Next.js, without losing your rankings.

The single most common thing we are asked to do with Next.js. Here is the sequence, and it is deliberately boring.

  1. 01

    Crawl the old site and freeze the URLs

    Week 1

    A full crawl becomes the acceptance baseline: every URL, title, meta description, canonical and structured-data block. Any URL that changes gets a 301 mapped before code is written, not discovered afterwards in Search Console.

  2. 02

    Model the content, not the pages

    Weeks 1–2

    WordPress content is usually a pile of page-builder markup. We model it into real content types with real fields and migrate into a headless CMS, so the next redesign is a template change rather than another rebuild.

  3. 03

    Build the templates against real content

    Weeks 2–5

    Templates are built against the migrated production content from day one — not lorem ipsum. The 4,000-word legal page and the post with fourteen images are in the build, so they cannot ambush you at launch.

  4. 04

    Run both sites and diff them

    Week 5

    The new site goes up on a staging domain and we crawl it and diff against the baseline. Missing metadata, dropped canonicals, orphaned pages and broken internal links surface here, where they are cheap.

  5. 05

    Cut over, then watch

    Week 6

    DNS switches with redirects live and the sitemap resubmitted. We watch Search Console and field Core Web Vitals daily for a fortnight. Expect a dip while Google recrawls; expect recovery, then improvement, because the new site is faster.

The stack

What ships with a Next.js build from us.

Opinionated defaults. We will happily swap any of them for something you already run — but these are what we reach for when the choice is ours.

Next.js 15
React 19
TypeScript
Turbopack

Bring us the version of the problem you think is too hard.

Tell us what you are building and what is in the way. A senior engineer reads every enquiry and replies within one business day with scope, risk and a number — not a brochure.

FAQ

The questions you were going to ask on the call.

App Router for anything new. It is where React Server Components, Server Actions, streaming and Partial Prerendering live, and it is where Vercel is putting its engineering. The Pages Router still works and is still maintained, so an existing Pages app is not an emergency — we migrate route by route, because the two routers run side by side in the same application. What we will not do is start a greenfield build on Pages to avoid a learning curve.

No, and often you should not. Vercel is excellent and we use it happily for marketing sites and early-stage products. But its pricing is driven by function invocations and bandwidth, and a high-traffic application with heavy server rendering can produce a bill that a container on ECS or Hetzner would serve for a fraction of the cost. We deploy Next.js as a standard Node container with Redis-backed caching, so the hosting decision stays yours and stays reversible.

Sometimes, yes. If the site is fifteen pages of content, the content team lives in WordPress and nobody is asking for personalisation or an application layer, then WordPress with a well-built theme is cheaper to run and easier for them to own. Next.js earns its keep when the marketing site and the product are the same codebase, when you need real component reuse, or when Core Web Vitals are commercially material to you. We will say which one you are on the first call.

The whole point of server rendering is that there is nothing to handle. Google receives fully-formed HTML, not an empty div and a bundle. On top of that we generate metadata per route from the CMS, emit JSON-LD structured data for the content types that support rich results, build sitemaps at build time and revalidate them on publish, and enforce Core Web Vitals budgets in CI so a regression fails the build rather than the quarter.

Yes, and rankings are the thing we plan the migration around. We freeze the URL structure first, or map every changed URL to a 301 before a single line of code ships. Metadata, structured data and internal linking are carried across deliberately, not incidentally. We run a full crawl of the old site as the acceptance baseline and diff it against the new one before cutover. Traffic typically dips for a week or two while Google recrawls, then recovers and usually climbs, because the new site is faster.

A content-led marketing site with a headless CMS is typically 5 to 7 weeks and starts around ₹6,50,000. A product surface with authentication, billing and a real dashboard is 12 to 20 weeks and starts around ₹18,00,000. The honest variable is not the frontend, it is how many upstream systems you are integrating and how well they behave. We scope that in a paid two-week discovery sprint before quoting a build, so the number we give you is one we can hold.

Proof

Shipped, measured, still running.

All case studies

NM Company

A portfolio and enquiry site for events firm NM Company

A visual portfolio and enquiry website for an event management and supplies firm — presenting a full...

Read it

Swasthya Sarathi

A healthcare-companion platform for Swasthya Sarathi

A multi-service healthcare platform that helps people find hospitals, doctors, labs, medical stores,...

Read it

MV Tech Education

A course and admissions platform for MV Tech Education

A course-catalogue and admissions website for a Bihar vocational institute — leading with industrial...

Read it

Let's talk next.js development

Bring us the hard version of the problem.

A senior engineer reads every enquiry. You'll get a real answer — scope, risk and a number — within one business day.