nextjs
Next.js, zero to senior
Rendering strategies, App Router, server components and caching layers — production Next.js.
Start track → 01
SSR, SSG, ISR, server components
Each rendering mode is a different answer to 'when does HTML get built and who pays the latency'. 02
App Router, caching layers, server actions
App Router stacks four caches between you and fresh data; knowing which one bit you is the production skill. 03
Route handlers, middleware, runtimes
Route handlers are your API surface; middleware runs on every matched request at the edge — and the runtime decides what code may exist. 01 Route handlers: route.ts as your HTTP surface — verbs, params, and the Next 15 caching flip 17 min 02 Middleware and the edge of trust: matchers, rewrites, and CVE-2025-29927 18 min 03 Node vs Edge runtime: cold starts, missing APIs, and why compute must live near data 17 min 04 Streaming responses: ReadableStream, SSE for LLM UIs, and the proxies that buffer them 18 min
04
Auth in the App Router
Auth in Next.js is a boundary question: middleware redirects, layouts don't protect, and every server action is a public endpoint. 01 Sessions vs JWT: revocation, rotation, and where the state lives on serverless 17 min 02 Auth boundaries: why middleware and layouts cannot protect, and the Data Access Layer that can 19 min 03 server-only and secrets: the module graph, NEXT_PUBLIC_, and what taint APIs actually catch 18 min 04 CSRF and action security: every server action is a public POST endpoint 18 min
05
Images, fonts, bundle budgets
Assets dominate LCP and INP: next/image and next/font exist to make the fast path the default — budgets keep it that way. 06
Deployment and the edge
Self-host is a real option: standalone output in a container, edge for routing not data, ISR needs a shared cache behind more than one pod. 07
Observability and errors
error.tsx is a boundary tree, not a page: instrumentation.ts wires OTel before anything runs, and RSC logs live on the server only. 01 error.tsx hierarchy: what each boundary actually catches, digests, and when reset() lies 17 min 02 instrumentation.ts and tracing: one register() per process, one trace per request, and the sampling bill 18 min 03 Server logging and Web Vitals: structured logs with request ids, and beacons that name the bad deploy 17 min
08
Architecture at scale
Route groups are module boundaries: a monorepo splits by domain, shared code moves to packages, and pages→app migrates route by route. 01 Route groups as module boundaries: per-domain shells, colocation, and the full-reload tax 17 min 02 Monorepo mechanics: pnpm workspaces, the Turborepo task graph, and packages that earn their boundary 18 min 03 pages/ to app/ migration: coexistence, the translation map, and a quarters-not-sprints timeline 18 min
09
The data layer
RSC talk to the database directly: pool per process not per request, serverless needs a proxy, cache tags model your domains. 01 ORM and SQL in server components: the data layer owns queries, memoization, and the tree-shaped N+1 18 min 02 Pooling on serverless: the multiplication problem, pgbouncer transaction mode, and per-lambda sizing 17 min 03 Cache tags by domain: invalidation taxonomy, webhook wiring, and the over-invalidation storm 16 min
10
Next.js in production
Production Next.js fails in cache poisoning, ISR storms and cold starts — this unit is incident anatomy plus the cost engineering math.Build with this track
Guided projects that exercise what you learn here.
Go, zero to senior
A small language for big systems — types, errors, interfaces, and concurrency that actually scales.