From frontend-craft
Reviews and guides Next.js 14+ App Router projects — file routes, layouts, server/client boundaries, rendering modes (SSR/SSG/ISR), streaming, metadata, middleware, and server actions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/frontend-craft:fec-nextjs-project-standardThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
For repositories using Next.js 14+ with App Router.
For repositories using Next.js 14+ with App Router.
Standardize engineering practices for App Router, SSR/SSG/ISR rendering modes, data acquisition, route layout, middleware and SEO metadata in Next.js 14+ projects to ensure server-side priority, performance optimization and maintainability.
'use client' only when browser API, interactive state or event handling is required.loading.tsx, error.tsx, not-found.tsx, metadata and sensitive logic for routing.src/
├── app/ # App Router
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Home page
│ ├── loading.tsx # Global loading UI
│ ├── error.tsx # Global error boundary
│ ├── not-found.tsx # 404
│ ├── globals.css
│ │
│ ├── (auth)/ # Routing group
│ │ ├── login/
│ │ │ └── page.tsx
│ │ └── register/
│ │ └── page.tsx
│ │
│ ├── (dashboard)/ # Dashboard routing group
│ │ ├── layout.tsx # Shared layout
│ │ ├── dashboard/
│ │ │ └── page.tsx
│ │ └── users/
│ │ ├── page.tsx
│ │ └── [id]/
│ │ └── page.tsx
│ │
│ └── api/ # API Routes
│ └── users/
│ └── route.ts
│
├── components/ # Shared components
├── lib/ # Tools, configuration
├── hooks/
├── services/
└── types/
| Patterns | Usage scenarios | Implementation methods |
|---|---|---|
| SSR | Dynamic, real-time data required | Default, fetch does not cache or cache: 'no-store' |
| SSG | Static content | generateStaticParams + static fetch |
| ISR | Periodically updated | revalidate or revalidatePath |
| CSR | Client interaction | 'use client' + useEffect or SWR/React Query |
async or fetch, without exposing useEffectuseEffect + useState, or SWR / React Queryloading.tsx and Suspense to wrap asynchronous blocks to provide streaming experienceforce-cache, no-store, revalidate, tag/path revalidation or user private data constraints(auth) does not change the URL, only affects the layout[id] cooperates with generateStaticParams to do SSGlayout.tsx wraps sub-routes to share UI and layoutpage.tsx is a leaf route and cannot be nestedmiddleware.tsmetadata or generateMetadatatitle, description, openGraph, twitter, etc.generateMetadata(params)'use client' only when client interaction is required.useState, useEffect, and browser API directly in server componentsnext/image for images and next/font for fontsNEXT_PUBLIC_ environment variable.loading.tsx / error.tsx, routing and layout, etc. are subject to this skill.'use client' component: combined and composite components, forms, client state, list virtualization, animation and keyboard/focus, etc., consistent with pure React projects, following the React rules in the project (such as .claude/rules/fec-react.md).app/ directory, page.tsx, layout.tsx, loading.tsx, error.tsx)npx claudepluginhub bovinphang/frontend-craftProvides Next.js 14+ best practices for App Router structure, Server/Client Components, API routes, loading/error UI, and file conventions.
Builds Next.js 14+ App Router applications with server components, actions, data fetching, streaming SSR, SEO metadata, loading/error boundaries, and Vercel deployment.
Senior Next.js 14+ specialist for App Router, server components, server actions, data fetching, SEO with generateMetadata, streaming SSR, loading/error boundaries, and Vercel deployment.