The Framework Decision That Changed Our Agency
When we started Nexora in 2024, we had a simple mandate: build the fastest, most scalable websites possible for our clients. After evaluating every major framework — Gatsby, Remix, Astro, SvelteKit, and yes, vanilla React — we landed on Next.js. Here's the honest breakdown.
1. App Router + Server Components = Zero JavaScript by Default
The App Router introduced React Server Components (RSC) to production Next.js. What this means in practice: every component is server-rendered by default. Only components you explicitly mark with "use client" ship JavaScript to the browser.
For a typical agency marketing site, this means your hero, about, services, and testimonials sections ship zero JavaScript. The result? A Time to Interactive (TTI) measured in milliseconds, not seconds.
// This ships ZERO JavaScript to the client
export function ServicesSection() {
return (
<section>
<h2>Our Services</h2>
{services.map(s => <ServiceCard key={s.id} {...s} />)}
</section>
);
}2. Built-in Image Optimization with next/image
Cloudinary is great. But next/image gives you automatic WebP/AVIF conversion, lazy loading, blur placeholders, and responsive srcsets — for free, with zero config. For clients with image-heavy portfolios, this alone can cut page weight by 60%.
3. TypeScript + Tailwind Tight Integration
Next.js ships with TypeScript support out of the box. Combined with Tailwind CSS v4's new CSS-first config system, you get a design system that's both type-safe and runtime-free. No className string bugs. No unused CSS shipped.
4. Turbopack in Development
In Next.js 15, Turbopack became the default dev bundler. Hot reload times dropped from ~800ms (Webpack) to under 80ms for our largest codebases. For agency dev workflows where you're iterating on component designs in real time, this is a game changer.
5. Edge Runtime for Global Performance
Next.js Middleware and Route Handlers can run on Vercel's Edge Network — 300+ PoPs globally. For clients with international audiences, this means sub-50ms TTFB anywhere in the world, without a CDN setup.
The Numbers From Our Client Work
After standardizing on Next.js across all 50+ projects:
- Average Lighthouse Performance: 96/100
- Average Time to Interactive: 1.1 seconds (mobile, 4G)
- Average Largest Contentful Paint: 0.9 seconds
If you're an agency not already on Next.js, the migration is worth the effort. Your clients will notice the difference immediately.