Search

Search pages, services, tech stack, and blog posts

Next.js

Next.js full-stackThe full-stack React framework for production

Next.js is our primary framework for React applications — App Router, Server Components, streaming SSR, and edge-ready APIs in one cohesive package. It's how we ship fast, SEO-friendly React apps.

Next.js is the leading full-stack React framework, maintained by Vercel and used by companies from startups to Fortune 500. The App Router introduced React Server Components, streaming SSR, and Server Actions — fundamentally changing how React apps fetch data and handle mutations. With Partial Prerendering, edge middleware, image optimization, and zero-config deployments on Vercel (or self-hosted on Docker), Next.js is the most complete platform for building production React applications. At A Major, it's our primary framework for web applications, SaaS products, and content-driven sites.

Quick start

bash
npx create-next-app@latest my-app
cd my-app
npm run dev

Read the full documentation at nextjs.org/docs

App Router & RSC

Server Components, layouts, and streaming — fetch data on the server with zero client JS overhead.

Partial Prerendering

Static shell with dynamic islands — the best of SSG and SSR in a single page.

Edge middleware

Auth, geolocation, and A/B testing at the edge — runs before your page loads.

Server Actions

Mutate data from forms and components without writing API routes — type-safe server functions.

Image & font optimisation

Automatic WebP conversion, lazy loading, and self-hosted fonts — Core Web Vitals green by default.

Vercel & self-hosted

Deploy to Vercel for zero-config DX or self-host on Docker, Railway, or Fly.io.

Why it's hard

Server vs. client component boundaries

Deciding what runs on the server vs. client, managing 'use client' boundaries, and understanding serialization constraints between server and client components creates real architectural complexity.

Caching and revalidation strategies

Next.js has multiple caching layers (fetch cache, full route cache, router cache, data cache). Understanding when each layer applies and how to invalidate correctly is one of the hardest parts of the framework.

App Router migration from Pages Router

Migrating from Pages Router to App Router is a significant effort — different data fetching patterns, layout model, and mental model. It's not a simple find-and-replace.

Build and deploy complexity at scale

Large Next.js apps face long build times, complex ISR configurations, and middleware limitations. Self-hosting requires understanding Node.js server configuration, standalone output, and edge runtime constraints.

Best practices

Default to Server Components, opt into client

Keep components on the server unless they need interactivity (onClick, useState, useEffect). This reduces bundle size, improves initial load, and keeps sensitive logic server-side.

Use Server Actions for mutations

Server Actions replace API routes for form submissions and data mutations. They're type-safe, progressively enhanced, and colocated with the UI that triggers them.

Implement streaming with Suspense boundaries

Wrap slow data fetches in Suspense to stream the fast parts of your page immediately. Users see content sooner, and you avoid blocking the entire page on one slow query.

Use Partial Prerendering for dynamic pages

PPR lets you statically render the shell of a page while streaming dynamic content — combining the speed of SSG with the freshness of SSR in a single response.

Frequently asked questions




Looking for end-to-end delivery? These services complement Next.js projects.

Want to build with Next.js?

Talk to our engineering team about your Next.js architecture. We'll respond within 24 hours.

1 spot available in May 2026Apr 2026 fully booked

We limit intake each month so every project gets the focus it deserves.