Skip to content
PRS India

Next.js 15 · App Router · RSC

Next.js Development

React that is built on the server, ranks in Google and does not send 300 KB of JavaScript just to say hello. We build Next.js applications on the App Router with Server Components, Server Actions and a caching plan written down for each route.

Last updated

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

React, without the SEO tax.

For ten years the choice was a bad one: pick React and lose search traffic, or pick server-made HTML and lose the rich interface. Next.js on the App Router ends that choice. Server Components are built on the server and send no JavaScript of their own. So Google gets real HTML, and your user gets a page they can use before a single-page app has finished downloading. That is the theory. The reason we use it in practice is simpler 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 set of parts, one design system and one way of going live. Nobody has to pretend they are the same kind of page.

Talk to a Next.js engineer
1.4s
Median LCP

Across the Next.js builds we run now, measured on real 4G phones — not lab scores.

88KB
First-load JS

Our size limit for a content page, compressed (gzipped). CI fails the build if a PR goes past it.

60%
Less JS shipped

Usual drop when we move an existing React SPA to Server Components.

4s
Publish to live

ISR refreshes the page when a CMS webhook calls it. No rebuild, no new release.

How we actually build it

We have used the App Router in real projects since it became stable. We have also had to remove it once. Both taught us how to build. Here is what we really do, not what the marketing site says.

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

In every project we start, the default is a React Server Component. It reads from the database or an internal API, builds the HTML on the server, and sends no JavaScript of its own. We add Client components on purpose, only at the small end pieces — a date picker, a chart, a cart drawer. They are the exception we must explain in review, not something we drift into. The result is a first-load JS limit that we can keep under 90 KB gzipped on a content page. A normal React SPA of the same size sends 300 KB+ before it shows a single pixel.

Server Actions replaced most of our API layer

When the Next.js app is the only user of the data, we write data changes as Server Actions. We check the data with Zod at the edge, and we use revalidateTag() to clear the cache. That removes a whole layer of hand-written route handlers, request DTOs and client fetch wrappers. We do not do this when a mobile app or another company also needs the same action. Then we build a proper versioned REST or tRPC endpoint. The Server Action, if there is one, just calls it. Choosing wrong here is the most common design mistake we are asked to fix.

Caching is the part that bites

The Next.js cache is really four caches in one: the request memo, the Data Cache, the Full Route Cache and the client Router Cache. Most "why is my page stale" problems happen when someone thinks about one cache while a different one is serving the page. On day one we put every fetch under a clear tag name. One single module owns the refreshing. We treat a fetch with no tag as a failed review. Then ISR, refreshed on demand by the CMS webhook, gives us the speed of static files and a publish-to-live time of a few seconds.

Rendering strategy, per route, written down

Marketing and content pages are built ahead of time and refreshed when you publish. Logged-in dashboard pages are built live and streamed. We put Suspense around anything that waits on a slow system, so the page frame shows at once. Partial Prerendering sends the fixed frame instantly and streams in the personal parts. We use it when a page is truly both. We write down the choice for each route in the repo. Without that, nobody can say why a page is slow.

The boring infrastructure that actually decides your bill

Next.js runs well on Vercel, and for a marketing site it is worth every rupee. For an app with heavy traffic and long server jobs, the cost changes fast, and we will tell you so. We put Next.js in a container on your own servers — AWS ECS, Fly, Hetzner, whatever fits — behind a CDN. Redis holds the Data Cache so several copies of the app share it. Same app, same code, a very 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 best combination in the React world, and metadata has built-in API support. WordPress is still fine if the site is only content and your team already uses it. Do not rebuild it just to follow a trend.
Internal dashboard behind a login Only if it shares code and a design system with your public site. Then reusing them is worth the extra work. A plain Vite + React SPA. There is no SEO to win, so server rendering gives you nothing and adds a build process and a caching model.
Team has no React experience Not on a tight deadline. RSC is a new way of thinking, and the usual failure is a codebase where everything is "use client". Laravel with Livewire, or Blade. You will finish faster with tools your team can already fix at 2am.
Highly interactive canvas or editor The outer frame can be Next.js, but the editor itself is a client component and gains nothing from the framework. Vite. Faster live reload (HMR), no server-rendering rules to fight, and you keep the whole app in one way of thinking.
You need to control hosting cost precisely Workable. We put it in a container with Redis caching, and the bill is like any Node service. If you cannot host it yourself and Vercel pay-for-use pricing is a risk you cannot take, a static site tool like Astro is cheaper and simpler.
Mobile app is also on the roadmap Strong. The API layer, types and checks are shared with a React Native app with almost no copying. Nothing changes this — but do build a real API layer from the start, and do not lean on Server Actions, or the mobile app 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

A Next.js front end, a CMS your marketing team will really use, and ISR so a new page is live in seconds without a rebuild.

SaaS product surfaces

Login, company and role setup, billing, a dashboard that loads piece by piece instead of showing a spinner, and an admin panel that your support team can use.

Commerce storefronts

Headless Shopify, Medusa or a custom backend. Fixed product pages, a live cart, and a checkout that holds up when sale-day traffic jumps.

SPA to RSC migration

An existing React app moved to Server Components one route at a time, going live all along, with the JS size falling every sprint.

Design system + component library

A typed, documented set of parts that the marketing site and the product both use, so the brand looks the same on both.

Core Web Vitals rescue

A speed check using real-user data, then the work to fix it — with size limits enforced in CI so it does not quietly get slow again.

Characteristics

Performance, SEO and cost — with numbers.

The three things anyone looking at Next.js really wants to know, answered plainly.

  • LCP 1.2–1.8s on 4G

    Content pages are built ahead of time and served from a CDN close to the user. The HTML is already there, so there is no trip to a database before the page shows.

  • INP under 200ms

    Most of the page is a Server Component, so there is very little JavaScript to block a tap or click in the first place.

  • Crawlers get real HTML

    No wait for the page to wake up in the browser, no "render-blocked" pages in Search Console, and no arguments with the SEO agency about whether Google runs your JavaScript.

  • ISR: static speed, dynamic freshness

    Pages are saved as static files and refreshed when the CMS sends a webhook. You get CDN speed 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. If it gets worse than the limit, the build fails. Speed stops being a clean-up job every three months.

Migration path

WordPress to Next.js, without losing your rankings.

The most common job we are asked to do with Next.js. Here are the steps, and they are deliberately plain.

  1. 01

    Crawl the old site and freeze the URLs

    Week 1

    We crawl the whole old site and use it as the check list: every URL, title, meta description, canonical and structured-data block. Any URL that changes gets a 301 redirect planned before code is written, not found later in Search Console.

  2. 02

    Model the content, not the pages

    Weeks 1–2

    WordPress content is usually a pile of page-builder code. We turn it into proper content types with proper fields and move it into a headless CMS. So the next redesign is a template change, not another rebuild.

  3. 03

    Build the templates against real content

    Weeks 2–5

    We build the templates with your real moved 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 surprise you at launch.

  4. 04

    Run both sites and diff them

    Week 5

    The new site goes up on a test domain. We crawl it and compare it with the old crawl. Missing metadata, lost canonicals, pages with no links to them and broken internal links show up here, where they are cheap to fix.

  5. 05

    Cut over, then watch

    Week 6

    DNS is switched with redirects already live and the sitemap sent again. We watch Search Console and real-user Core Web Vitals every day for two weeks. Expect a dip while Google crawls again. Then expect recovery and improvement, because the new site is faster.

The stack

What ships with a Next.js build from us.

These are our firm choices. We will happily swap any of them for something you already use — but these are what we pick 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. You get a reply within one business day with scope, risks and a number — not a brochure.

FAQ

The questions you were going to ask on the call.

App Router for anything new. React Server Components, Server Actions, streaming and Partial Prerendering all live there, and it is where Vercel puts its work. The Pages Router still works and is still kept up to date, so an existing Pages app is not an emergency. We move it one route at a time, because the two routers run side by side in the same app. What we will not do is start a brand-new build on Pages just to avoid learning something new.

No, and often you should not. Vercel is excellent and we gladly use it for marketing sites and early-stage products. But its price depends on function calls and data use. A busy app with heavy server rendering can get a bill that a container on ECS or Hetzner would run for a small part of the cost. We put Next.js in a standard Node container with Redis caching, so the hosting choice stays yours and you can change it later.

Sometimes, yes. Say the site is fifteen pages of content, the content team works in WordPress, and nobody wants personal content or an app layer. Then WordPress with a well-built theme is cheaper to run and easier for them to own. Next.js is worth it when the marketing site and the product share one codebase, when you need to reuse real components, or when Core Web Vitals matter to your business. We will tell you which case you are in on the first call.

The whole point of server rendering is that there is nothing extra to handle. Google gets full HTML, not an empty div and a bundle. On top of that, we make page details for each route from the CMS. We add JSON-LD structured data for the content types that can show rich results. We build sitemaps at build time and refresh them when you publish. We also enforce Core Web Vitals limits in CI, so a slowdown fails the build rather than the quarter.

Yes, and we plan the whole move around your rankings. We freeze the URL structure first, or map every changed URL to a 301 before a single line of code goes live. Page details, structured data and internal links are carried over on purpose, not by luck. We crawl the old site fully and use it as the check list, and compare it with the new one before the switch. Traffic usually dips for a week or two while Google crawls again. Then it recovers and usually climbs, because the new site is faster.

A marketing site built around content, with a headless CMS, usually takes 5 to 7 weeks and starts around ₹6,50,000. A product with login, billing and a real dashboard takes 12 to 20 weeks and starts around ₹18,00,000. The real unknown is not the front end. It is how many outside systems you connect and how well they behave. We scope that in a paid two-week discovery sprint before we quote a build, so the number we give you is one we can keep to.

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.