1.  In the development stage, Next.js optimizes for the developer and their experience building the application. It comes with features that aim to improve the Developer Experience such as the TypeScript and ESLint integration, Fast Refresh, and more.
  2. Next.js allows a single project for frontend and backend apps.
  3. Compiling refers to the process of taking code in one language and outputting it in another language or another version of that language. In Next.js, compilation happens during the development stage as you edit your code, and as part of the build step to prepare your application for production.
  4. Code-splitting is the process of splitting the application’s bundle into smaller chunks required by each entry point. Next.js has built-in support for code splitting. Each file inside your pages/ directory will be automatically code split into its own JavaScript bundle during the build step.
  5. In Next.js, JavaScript and CSS files are automatically minified for production.
  6. In the production stage, Next.js optimizes for the end-users, and their experience using the application. It aims to transform the code to make it performant and accessible.
  7. Next.js pre-renders every page by default. Pre-rendering means the HTML is generated in advance, on a server, instead of having it all done by JavaScript on the user’s device.
  8. In Next.js, you can run code at the Edge with Middleware.
  9. The Next.js Image component, next/image, is an extension of the HTML <img> element, evolved for the modern web. It includes a variety of built-in performance optimizations to help you achieve good Core Web Vitals.
  10. Next.js helps you optimize loading web fonts by inlining font CSS during next build. This optimization eliminates an extra network round trip to fetch font declaration files. This results in improvements to First Contentful Paint (FCP) and Largest Contentful Paint (LCP).

   Credit: https://nextjs.org