"Should we build this in React or Next.js?" is one of the most common questions I get from clients who have done a bit of research. It is also a slightly misleading question, because Next.js is React — with a lot of extra machinery wrapped around it.
The real question is: do you want the machinery or not? Here is how I decide on client projects.
What each one actually is
React (plain, with Vite) is a UI library. You build components, you render them into a div, and everything else — routing, data loading, SEO, deployment — is up to you. Tools like Vite give you a fast dev server and a production bundle. Nothing more.
Next.js is a React framework. It takes React and adds file-based routing, server-side rendering, static generation, image optimization, API routes, and deployment conventions. You trade flexibility for batteries-included structure.
Both ship React components. The code you write for one will largely work in the other. The difference is what happens around that code.
The one-sentence version
Use plain React + Vite for UI-heavy apps that live behind a login. Use Next.js for almost anything a customer finds via Google.
Everything below is elaboration on that.
When plain React (+ Vite) wins
1. Single-page apps that never need SEO
If your project is a dashboard, admin panel, internal tool, or customer portal — users always reach it after logging in, and search engines never see it — a plain React SPA is the simpler choice. No server-rendering complexity, faster dev iteration, lighter build.
This portfolio you are reading is a plain Vite SPA for exactly this reason: every "page" (Work, Info, Blog, Contact) is an overlay on the same canvas. Adding Next.js would add structure I do not need.
2. Heavy client-side interactivity
Applications dominated by charts, maps, drag-and-drop editors, or 3D visualization often fit React-on-Vite better. Next.js's server-rendering story adds friction to code that must run in the browser anyway.
3. Static-only marketing sites
For a small marketing site with zero dynamic content — a single page, no blog, no catalog — plain React or even Astro produces less bundle and simpler deployment. Next.js is overkill.
When Next.js wins
1. Anything that has to rank on Google
This is the big one, and it catches most business sites. Google can technically crawl React SPAs now, but it does so slowly, inconsistently, and without the reliability of server-rendered HTML. Meta tags set at runtime are missed by social media crawlers. Sharing a link on Facebook or LinkedIn with a plain React SPA often produces a blank preview.
Next.js fixes all of this. Every page ships with rendered HTML and complete meta tags. I cover this in detail in How I Use Next.js to Build Fast Business Websites.
2. Content-heavy sites
If your site has more than five real pages — especially if it has a blog, a product catalog, or location pages — Next.js's static generation and incremental regeneration are worth the setup cost. You get the speed of a fully static site with the flexibility to update individual pages as content changes.
3. E-commerce
Product pages need schema markup, server-rendered content, instant navigation, and predictable SEO. Next.js nails all of these. I explained the broader approach in How I Approach E-commerce Website Development.
4. Sites with authentication + public content
A typical business site has a public-facing section (marketing, product catalog, blog) plus a logged-in section (admin, customer dashboard). Next.js handles both in a single codebase. Plain React + a separate backend works, but it is two projects instead of one.
The practical cost of each
From a client perspective, the important differences:
| Concern | Plain React (Vite) | Next.js |
|---|---|---|
| Initial setup time | Faster | Slightly slower |
| Dev iteration speed | Slightly faster | Fast |
| SEO out of the box | Poor | Excellent |
| Social sharing previews | Unreliable | Reliable |
| Image optimization | Manual | Built in |
| Deployment complexity | Simple (any static host) | Needs Vercel, Netlify, or a Node server |
| Hosting cost | Very low | Low-to-medium |
| Learning curve for new developers | Gentler | Steeper |
For most small business projects, Next.js's SEO and image-optimization benefits more than pay for the slightly heavier setup.
What I actually ship
Rough breakdown of my last ten client projects:
- Next.js + Supabase (7 projects): business websites with content, tours/bookings, small e-commerce.
- Plain React + Vite (2 projects): admin dashboards, internal tools.
- Astro (1 project): pure static marketing site with zero dynamic content.
That ratio reflects what most real clients need: search-visible, content-capable, not overcomplicated.
The wrong reason to pick either
Both frameworks have loud fan clubs online. Ignore them. The right choice is the one that fits your project's requirements — traffic source, content type, interactivity, budget, your team's ability to maintain it.
If you are weighing the decision on a specific project and want a second opinion, email info@tonibarisic.com or hit the contact form. I give honest recommendations even when it means pointing you at a simpler tool. See some of my recent builds in the portfolio.