skills/nextjs/nextjs-architecture/SKILL.md
Structure Next.js projects with Feature-Sliced Design layers, domain-grouped slices, and strict import hierarchy. Use when organizing features into FSD layers, enforcing slice boundaries, or keeping page.tsx thin.
npx skillsauth add hoangnguyen0403/agent-skills-standard nextjs-architectureInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Warning: FSD introduces boilerplate. Use it only if project expected to grow significantly (e.g., 20+ features). For smaller projects, simple module-based structure preferred.
src/features/auth/login/ with ui/, model/, api/ segments.src/features/auth/login/index.ts.app/login/page.tsx (thin page).App (app/) -> Widgets -> Features -> Entities -> Shared
See implementation examples for thin page example.
app/ directory (App Router) only for Routing.page.tsx should only import Widgets/Features. No business logic (useEffect, fetch) directly in pages.src/components/LoginForm.tsx, src/hooks/useLogin.tssrc/features/auth/login/ containing both.App -> Widgets -> Features -> Entities -> Shared.Features or Pages. Move to Entities only when data/logic strictly reused across multiple differing features.shared/api, not entities.ui (Components), model (State/actions), api (Data fetching), lib (Helpers), config (Constants).components, hooks, services as segment names.For specific directory layout and layer definitions, see reference documentation.
[ ] Layer Imports: any layer import from layer ABOVE it? (App > Widgets > Features > Entities > Shared)
[ ] Page Logic: page.tsx thin, containing only Widgets/Features and zero useEffect/fetch?
[ ] RSC Boundaries: Server Components isolated from Client Components with proper 'use client' boundaries?
[ ] Public API: all access to slice performed via top-level index.ts (public API)?
[ ] Cross-Slice: slices within same layer (e.g., two features) import from each other directly? (Prohibited)
Server Actions: Place them in model/ folder of Feature (e.g., features/auth/model/actions.ts).
Data Access (DAL): Place logic in model/ folder of Entity (e.g., entities/user/model/dal.ts).
UI Components: Base UI (shadcn) belongs in shared/ui. Feature-specific UI belongs in features/*/ui.
page.tsx: Pages import Widgets/Features only; zero useEffect/fetch.features/auth/), not type (components/, hooks/).testing
Infer the requesting operator's technical fluency from message content (never ask directly) and adapt register — business, hybrid, or technical — across SDLC workflow output. Use when starting sdlc, brainstorm-feature, plan-feature, verify-work, publish-notes, or session-report, or whenever a request's phrasing signals a non-technical or cross-stack operator.
documentation
Define transaction boundaries, locking, and consistency guarantees for multi-step writes. Use when designing atomic operations, retries, idempotency, or concurrent write behavior.
development
Design relational or document schemas from access patterns, cardinality, and lifecycle. Use when modeling entities, choosing embed vs normalize, or shaping schema boundaries before implementation.
data-ai
Diagnose database latency with explain plans, index ownership, and query-shape review. Use when a query is slow, an index is missing, or scans and N+1 patterns appear.