DEV Community

Cover image for Building Scalable Web Apps with Next.js 15: A Complete Guide to the App Router and TypeScript
Moiz Lokhandwala
Moiz Lokhandwala

Posted on

Building Scalable Web Apps with Next.js 15: A Complete Guide to the App Router and TypeScript

Here’s a concise, step-by-step guide for a 7-minute blog post on creating and deploying an app with Next.js 15, using TypeScript, and the latest App Router.


Creating a Scalable Web App with Next.js 15: A Step-by-Step Guide

Next.js 15 brings exciting improvements, especially with the App Router’s enhanced routing capabilities. This guide walks through setting up a Next.js 15 project with TypeScript and deploying it efficiently. Let’s get hands-on!


1. Getting Started with Next.js 15 and TypeScript

First, ensure Node.js (version 18 or above) is installed. Initialize a Next.js project with TypeScript using the following command:

npx create-next-app@latest my-nextjs-app --typescript
Enter fullscreen mode Exit fullscreen mode

This command sets up a new Next.js project with TypeScript support, generating a starter codebase in a folder named my-nextjs-app.


2. Exploring the App Router

The App Router, introduced in Next.js 13 and enhanced in version 15, allows for a more intuitive file-based routing system. The /app directory serves as the foundation for dynamic and nested routes, API handling, and layouts.

Next.js 15 has streamlined route creation. Here’s how to add basic routes:

  • Home Page: Open app/page.tsx (the default home page) and add your content:
  // app/page.tsx
  export default function Home() {
    return (
      <div>
        <h1>Welcome to My Next.js 15 App!</h1>
        <p>Powered by the latest App Router and TypeScript.</p>
      </div>
    );
  }
Enter fullscreen mode Exit fullscreen mode
  • Dynamic Routes: Create a [id] folder inside /app for dynamic routes like /app/product/[id].
  // app/product/[id]/page.tsx
  type ProductPageProps = {
    params: { id: string };
  };

  export default function ProductPage({ params }: ProductPageProps) {
    return (
      <div>
        <h2>Product ID: {params.id}</h2>
        <p>This is a dynamic route.</p>
      </div>
    );
  }
Enter fullscreen mode Exit fullscreen mode

3. Adding API Routes

With the App Router, Next.js 15 enables you to define API endpoints within the /app/api directory.

  1. Create an app/api/hello/route.ts file.
  2. Define a simple GET request:
   // app/api/hello/route.ts
   import { NextResponse } from 'next/server';

   export async function GET() {
     return NextResponse.json({ message: 'Hello from Next.js API!' });
   }
Enter fullscreen mode Exit fullscreen mode

Accessing /api/hello returns a JSON response, useful for fetching server-side data.


4. Setting Up Layouts for Consistent UI

Next.js 15 encourages using shared layouts for cohesive UI structure across pages. The layout.tsx file in a directory applies to all nested pages.

  1. Create a layout.tsx in /app:
   // app/layout.tsx
   import './globals.css';

   export default function RootLayout({ children }: { children: React.ReactNode }) {
     return (
       <html lang="en">
         <body>
           <header>
             <nav>
               <a href="/">Home</a>
               <a href="/product/123">Product</a>
             </nav>
           </header>
           <main>{children}</main>
         </body>
       </html>
     );
   }
Enter fullscreen mode Exit fullscreen mode
  1. Add Global Styling: Update the globals.css file under /app for styles that apply across the app.

5. Deploying on Vercel

Vercel is the ideal platform for Next.js projects, offering seamless integration and deployment.

  1. Push Your Code to GitHub: Ensure your project is version-controlled.
  2. Connect to Vercel:
    • Log into your Vercel account and link your GitHub repository.
    • Vercel will automatically detect your Next.js project, so just confirm the settings and deploy.
  3. Visit Your App: Once deployed, Vercel provides a live URL.

Each time you push changes to your main branch, Vercel redeploys the app, making development swift and continuous.


6. Final Tips for Optimizing the App

  • Type Safety: Using TypeScript reduces errors and improves readability. Define clear types for props and API responses.
  • Dynamic Imports: Import components only when needed with next/dynamic for a faster initial load.
  • SEO Optimization: Utilize the metadata API in each page.tsx for SEO tags.
// app/page.tsx
export const metadata = {
  title: 'My Next.js 15 App',
  description: 'A quick guide to building apps with Next.js 15 and TypeScript',
};
Enter fullscreen mode Exit fullscreen mode

Wrapping Up

With Next.js 15 and TypeScript, creating a scalable, fast, and production-ready application has never been easier. From the flexible App Router to streamlined deployment on Vercel, this stack is well-suited for modern web apps.


Top comments (0)