Swasthya Sarathi
A healthcare-companion platform for Swasthya Sarathi
A website and mobile app development project for a multi-service healthcare companion — It helps peo...
Read itNext.js 15 · App Router · RSC
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
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 engineerAcross the Next.js builds we run now, measured on real 4G phones — not lab scores.
Our size limit for a content page, compressed (gzipped). CI fails the build if a PR goes past it.
Usual drop when we move an existing React SPA to Server Components.
ISR refreshes the page when a CMS webhook calls it. No rebuild, no new release.
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.
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.
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.
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.
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.
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.
| 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. |
Six shapes of project cover almost everything we are asked for.
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.
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.
Headless Shopify, Medusa or a custom backend. Fixed product pages, a live cart, and a checkout that holds up when sale-day traffic jumps.
An existing React app moved to Server Components one route at a time, going live all along, with the JS size falling every sprint.
A typed, documented set of parts that the marketing site and the product both use, so the brand looks the same on both.
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.
The three things anyone looking at Next.js really wants to know, answered plainly.
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.
Most of the page is a Server Component, so there is very little JavaScript to block a tap or click in the first place.
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.
Pages are saved as static files and refreshed when the CMS sends a webhook. You get CDN speed with a four-second publish cycle.
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.
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.
The most common job we are asked to do with Next.js. Here are the steps, and they are deliberately plain.
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.
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.
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.
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.
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.
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.
Numbers from live sites, not from a lab test on a MacBook on office wifi.
A fleet, ePOD and route-planning platform that works offline first, for drivers on roads with poor signal. The two ready...
A Shopify store for a Surat ethnic-wear label. It has 200+ SKUs of lehengas, sarees and suits, sorted by type, colour, f...
A Shopify storefront for a Surat watch and eyewear retailer — where shoppers can browse by gender, brand, style and comb...
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
Proof
Swasthya Sarathi
A website and mobile app development project for a multi-service healthcare companion — It helps peo...
Read itMV Tech Education
A website development project for a Bihar vocational institute. It is a course list and admissions s...
Read itPatna Taxi
A website development project for a Patna and Muzaffarpur cab operator. It is a fast taxi-booking si...
Read itThe framework we have built more business systems on than any other. Laravel 12 with Octan...
ExploreOne codebase, both stores, and a release you can fix the same afternoon. We build React Na...
ExploreNode is the right answer for live features, streaming and many users at once. It is the wr...
ExploreLet's talk next.js development
A senior engineer reads every enquiry. You'll get a real answer — scope, risk and a number — within one business day.