DEV Community

Cover image for Building Modern Web Apps: My Journey with Next.js
Ziad Amr
Ziad Amr

Posted on

Building Modern Web Apps: My Journey with Next.js

I started my journey with Next.js a while ago, and it was a major turning point in my career as a web developer. Before Next.js, I struggled with real difficulties building complete, high-performance web applications. I was using React alone, and every time I needed Server-Side Rendering or proper SEO, I had to reinvent the wheel. Next.js provided me with the ideal solution with features like Server-Side Rendering and Static Site Generation from day one.

Next.js Architecture

What makes Next.js stand out is the excellent developer experience. The file-based routing system completely changed how I approach projects. Instead of writing complex routing configurations, every page in the app folder automatically becomes a route. This saved me significant time and made the project structure clear and organized. The built-in TypeScript support and automatic image optimization through the Image component are features that made development smoother and more productive.

In the Esma3 Radio project, Next.js was the optimal choice for several reasons. The app needs strong SEO so radio stations appear in search results, and Next.js with Server-Side Rendering provided this automatically. We also needed fast loading because users come to listen to radio, not to wait for a page to load. With Next.js, we achieved excellent Lighthouse scores and fast loading times.

In the Elmokhber project, the challenge was different. The app relies on live voice calls via LiveKit, and I needed to manage complex state between players. Next.js helped me clearly separate static pages (like the homepage and game rules) from dynamic pages (the game room). Server Components provided better performance because static parts of the page load only once.

The Battle of Questions project was another application where Next.js proved its strength. The app relies on Socket.io for real-time communication, and I needed API Routes to handle events. Next.js with integrated API Routes let me build the backend and frontend in one place without needing a separate server. This saved significant development time and made deployment easier.

One of the most important lessons I learned: use Server Components for static data and Client Components only for interactivity. Initially, I made everything a Client Component, then discovered this affects performance and the loaded JavaScript bundle size. I also learned that Image Optimization in Next.js isn't just a nice feature — it's essential for mobile performance.

Server Components vs Client Components

My advice for anyone starting with Next.js: begin with a small project and understand the fundamentals well before moving to large projects. Learn the difference between Server Components and Client Components, and understand how data fetching differs from regular React. Take advantage of the new App Router because it offers much more flexibility than the older Pages Router.

Ultimately, Next.js isn't just a framework — it's a developer's journey companion. Every project I built with it was a new learning experience. From Esma3 Radio to Battle of Questions to Tammeny, each app taught me something new about Next.js and web development in general. If you haven't tried it yet, I recommend starting today — you'll find yourself building better, faster applications.

Top comments (0)