You Don't Need NextJS
Next.js is the default answer for building React apps. It is a great framework. But default does not mean necessary.
Using it for the wrong project cost us speed and caused team friction. We built a data-heavy product with dashboards and charts. Almost every screen lived behind a login.
For this type of app, server-side rendering (SSR) added cost without adding value.
The right tool depends on what you build.
Content-first projects: • Marketing sites • Blogs • Storefronts • Docs • Use Next.js here. SEO matters and content is static.
Application-first projects: • Internal tools • Dashboards • Admin panels • SaaS consoles • Use a Vite-based SPA here. These apps live behind auth and rely on APIs.
We moved from Next.js to a Vite SPA. Here is why:
Easier Debugging Server errors do not map cleanly to your components. Client-side errors happen in the browser with clear stack traces. This makes fixing bugs fast.
Better Testing You cannot easily unit test a server component that renders other server components. We made design choices just to stay testable. That was a mistake.
Simpler Auth SSR requires the server to validate tokens on every request. This creates more attack surfaces and complex cookie logic. A client-first app handles auth in one place: the API.
Lower Infrastructure Costs SSR needs an always-on server for every request. A static frontend ships as files from a CDN. You have one less service to run and secure.
Less Complexity Next.js forces a split between server and client. Frontend engineers had to manage server concerns like middleware and caching. This slowed us down.
We migrated in phases. We kept Next.js for the public SEO-critical pages. We moved everything else to a Vite SPA.
The trade-offs were small: • SEO: Dashboards behind a login do not need SEO. • Initial load: Data-heavy apps are usually slow because of the database, not the framework.
Use Next.js if SEO and social previews matter. Use a Vite SPA if your app is interactive, data-driven, and sits behind a login.
Stop using the default. Ask yourself what you are actually building.
Source: https://dev.to/moruno21/you-dont-need-nextjs-heres-why-708
