> nextjs-rendering
Select and implement SSG, SSR, ISR, Streaming, or Partial Prerendering strategies in Next.js App Router. Use when choosing a rendering mode for a page, configuring generateStaticParams, or enabling PPR. (triggers: **/page.tsx, **/layout.tsx, generateStaticParams, dynamic, dynamicParams, PPR, streaming)
curl "https://skillshub.wtf/HoangNguyen0403/agent-skills-standard/nextjs-rendering?format=md"Rendering Strategies (App Router)
Priority: P0 (CRITICAL)
Choose rendering strategy based on data freshness and scaling needs. See Strategy Matrix.
Workflow: Choose a Rendering Strategy
- Determine data freshness — Static content? Use SSG. Periodic updates? Use ISR. Personalized? Use SSR.
- Configure fetch —
force-cachefor SSG,revalidate: Nfor ISR,no-storefor SSR. - Add Suspense for streaming — Wrap slow components in
<Suspense>with a fallback. - Enable PPR if hybrid — Set
ppr: trueinnext.config.jsfor static shell + dynamic regions.
ISR with generateStaticParams Example
Implementation Guidelines
- SSG (Static Site Generation): Default for App Router. Use
generateStaticParamsto pre-render routes at build time. Triggered byfetchwithcache: 'force-cache'. - SSR (Server-Side Rendering): Triggered by
cookies(),headers(), orfetchwithcache: 'no-store'. Use for personalized or high-freshness data. - ISR (Incremental Static Regeneration): Update static content after build. Use
revalidate(time-based) orrevalidatePath/revalidateTag(on-demand). - Streaming: Use
Suspenseto wrap slow async components and prevent them from blocking the initial page load. Useloading.tsxfor route-level skeletons. - PPR (Partial Prerendering): Combine static shell with dynamic regions in a single HTTP request. Enable
ppr: trueinnext.config.js. - Strategies: Choose rendering based on SEO (SSG/ISR) vs Interactivity (Client) vs Personalization (SSR). Utilize
dynamicParamsto control fallback behavior for uncached routes. - Hydration: Avoid Hydration Errors by not using browser-only values (
window.innerWidth,Date.now()) in the initial render. Use themounteduseEffect pattern. - Edge Runtime: Use
runtime: 'edge'for low-latency globally distributed execution where full Node.js APIs are not required.
Anti-Patterns
- No root awaits in
page.tsx: Wrap slow components in<Suspense>to stream. - No SSR for static content: Use SSG or ISR; reserve SSR for truly dynamic data.
- No
typeof windowin initial render: UseuseEffectto avoid hydration errors.
References
> related_skills --same-repo
> common-store-changelog
Generate user-facing release notes for the Apple App Store and Google Play Store by collecting git history, triaging user-impacting changes, and drafting store-compliant changelogs. Enforces character limits (App Store ≤4000, Google Play ≤500), tone, and bullet format. Use when generating release notes, app store changelog, play store release, what's new, or version release notes for any mobile app. (triggers: generate changelog, app store notes, play store release, what's new, release notes, ve
> golang-tooling
Go developer toolchain — gopls LSP diagnostics, linting, formatting, and vet. Use when setting up Go tooling, running linters, or integrating gopls with Claude Code. (triggers: gopls, golangci-lint, golangci.yml, go vet, goimports, staticcheck, go tooling, go lint)
> common-ui-design
Design distinctive, production-grade frontend UI with bold aesthetic choices. Use when building web components, pages, interfaces, dashboards, or applications in any framework (React, Next.js, Angular, Vue, HTML/CSS). (triggers: build a page, create a component, design a dashboard, landing page, UI for, build a layout, make it look good, improve the design, build UI, create interface, design screen)
> common-owasp
OWASP Top 10 audit checklist for Web Applications (2021) and APIs (2023). Load during any security review, PR review, or codebase audit touching web, mobile backend, or API code. (triggers: security review, OWASP, broken access control, IDOR, BOLA, injection, broken auth, API review, authorization, access control)