CoachnestCoachnest
Sign InGet Started
Back to course

Next.js 16: The Complete Developer Guide

…
—
Contents
1

What's New in Next.js 16

Reading14mFree
2

Installation, CLI & Your First Project

Reading12mFree
3

Project Structure & Conventions Deep Dive

Reading16m
4

Turbopack — The New Default Bundler

Video18m
5

Configuring TypeScript, ESLint & next.config.ts

Reading14m
6

Chapter 1 — Quiz

Quiz10m

App Router Fundamentals

Reading16m
8

Dynamic Routes, Catch-Alls & Type-Safe Params

Reading14m
9

Route Groups & Parallel Routes

Reading16m
10

Intercepting Routes & Modal Patterns

Reading12m
11

Loading, Error & Not-Found UI

Reading12m
12

Chapter 2 — Routing Quiz

Quiz12m
13

Understanding the Server/Client Boundary

Reading18m
14

Choosing When to use "use client"

Reading14m
15

Composing Server & Client Components

Reading14m
16

server-only, client-only & Code Splitting

Reading12m
17

Chapter 3 — Quiz

Quiz10m
18

Fetching Data in Server Components

Reading14m
19

The Next.js 16 Cache Model

Reading16m
20

Revalidation: revalidateTag, revalidatePath & On-Demand

Reading12m
21

Cache Components — Building Reusable Cached Functions

Reading14m
22

Search Params, Cookies & Dynamic APIs

Reading12m
23

Chapter 4 — Quiz

Quiz12m
24

Server Actions From First Principles

Reading16m
25

Forms with useActionState & Progressive Enhancement

Reading14m
26

Optimistic UI with useOptimistic

Reading12m
27

Validation with Zod + Server Actions

Reading12m
28

Chapter 5 — Quiz

Quiz10m
29

Static vs Dynamic vs Streaming

Reading14m
30

generateStaticParams & Pre-Rendering Dynamic Routes

Reading12m
31

Incremental Static Regeneration (ISR)

Reading12m
32

Partial Prerendering (PPR)

Reading16m
33

Edge Runtime vs Node.js Runtime

Reading12m
34

Rendering Strategies Deep Dive

Video22m
35

Chapter 6 — Quiz

Quiz12m
36

Tailwind CSS v4 with Next.js 16

Reading14m
37

CSS Modules, Global Styles & Scoped CSS

Reading10m
38

next/image — Smart, Fast Images

Reading14m
39

Fonts, Icons & Metadata

Reading12m
40

Chapter 7 — Quiz

Quiz10m
41

Middleware Fundamentals

Reading14m
42

Sessions, JWTs & Cookies

Reading16m
43

Protecting Server Components & Server Actions

Reading12m
44

Chapter 8 — Quiz

Quiz10m
45

Prisma with Next.js — The Production Setup

Reading14m
46

Mutations: Server Actions + Database Writes

Reading12m
47

Route Handlers & REST APIs

Reading12m
48

Chapter 9 — Quiz

Quiz10m
49

Unit & Component Testing with Vitest

Reading12m
50

End-to-End Testing with Playwright

Reading14m
51

Deploying to Vercel

Reading12m
52

Self-Hosting with Docker

Reading14m
53

Production Performance Checklist

Reading12m
54

Final Assessment — Next.js 16 Mastery

Quiz20m
←→navigate lessons
Chapter 2 of 10·Chapter 2 — Routing & Navigation with the App Router
Lesson 7 of 54Reading16 min

App Router Fundamentals

#App Router Fundamentals¶

The App Router is the routing system every new Next.js project uses. It's built on React Server Components, supports nested layouts, streaming, and parallel routes — capabilities the old Pages Router could not offer.

Files = Routes¶

Every page.tsx inside app/ becomes a URL.

FileURL
app/page.tsx/
app/about/page.tsx/about
app/blog/page.tsx/blog
app/(marketing)/pricing/page.tsx/pricing
app/dashboard/settings/page.tsx/dashboard/settings

Layouts¶

A layout.tsx wraps a segment and persists across navigation between sibling pages — its state, scroll, and DOM nodes are kept.

tsx
9 lines
1// app/dashboard/layout.tsx
2export default function DashboardLayout({ children }: { children: React.ReactNode }) {
3  return (
4    <div className="grid grid-cols-[240px_1fr]">
5      <Sidebar />        {/* persists when you navigate from /dashboard/courses → /dashboard/billing */}
6      <main className="p-8">{children}</main>
7    </div>
8  );
9}

Layouts nest. The root layout (app/layout.tsx) is the only one that must include <html> and <body>.

Pages¶

Pages render the leaf segment. They receive params (dynamic segments) and searchParams (query string) — both as Promises in Next.js 15+.

tsx
12 lines
1// app/blog/[slug]/page.tsx
2type Props = {
3  params: Promise<{ slug: string }>;
4  searchParams: Promise<{ tab?: string }>;
5};
6
7export default async function BlogPost({ params, searchParams }: Props) {
8  const { slug } = await params;
9  const { tab = "post" } = await searchParams;
10  const post = await getPost(slug);
11  return <article>{tab === "comments" ? <Comments id={post.id} /> : <Body post={post} />}</article>;
12}

Why Promises? It lets Next.js stream the route shell before either is resolved when prerendering.

Templates¶

A template.tsx looks like a layout but does not persist. A new instance mounts on every navigation. Use when you need an entry animation or a fresh effect run per page view.

The Render Order¶

When you navigate to /dashboard/courses/intro/lessons/1, Next renders:

app/layout.tsx app/dashboard/layout.tsx app/dashboard/courses/layout.tsx app/dashboard/courses/[slug]/layout.tsx app/dashboard/courses/[slug]/lessons/[id]/page.tsx

Each layer can have its own loading.tsx and error.tsx — so a slow database call in the lesson page doesn't block the dashboard chrome from rendering.

Linking¶

Use next/link for client-side transitions. It prefetches the target route automatically when the link enters the viewport.

tsx
4 lines
1import Link from "next/link";
2
3<Link href="/dashboard">Dashboard</Link>
4<Link href={`/courses/${course.slug}`} prefetch={false}>Don't prefetch</Link>

Programmatic Navigation¶

tsx
13 lines
1"use client";
2import { useRouter } from "next/navigation";
3
4export function LogoutButton() {
5  const router = useRouter();
6  return (
7    <button onClick={async () => {
8      await fetch("/api/auth/logout", { method: "POST" });
9      router.push("/login");
10      router.refresh();   // re-fetch server components on the next page
11    }}>Sign out</button>
12  );
13}

Reading the Current Route¶

tsx
8 lines
1"use client";
2import { usePathname, useSearchParams } from "next/navigation";
3
4export function ActiveLink({ href, children }: Props) {
5  const pathname = usePathname();
6  const active = pathname === href;
7  return <Link href={href} className={active ? "font-bold" : ""}>{children}</Link>;
8}

These hooks are client-only — call them inside files marked "use client".

Previous

Chapter 1 — Quiz

Next

Dynamic Routes, Catch-Alls & Type-Safe Params

Use ← → arrow keys to navigate between lessons