算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
nextjs-architecture【设计与创意】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.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
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/).