Getting Started
Project Structure Guide
Understand NextJS Base Directory Structure in 5 Minutes
Directory Overview ยท Core Directories ยท Naming Conventions
๐ Directory Overview
nextjs-base/
โ
โโโ ๐ app/ # Next.js App Router
โ โโโ ๐ (admin)/ # Admin Panel Module
โ โ โโโ ๐ admin/ # Admin Pages
โ โ โโโ ๐ actions/ # Admin Server Actions
โ โ โโโ layout.js # Admin Layout
โ โ โโโ admin-styles.css # Admin Styles
โ โ
โ โโโ ๐ (client)/ # Frontend Module
โ โ โโโ ๐ [locale]/ # Multi-language Routes
โ โ โโโ ๐ actions/ # Frontend Server Actions
โ โ
โ โโโ ๐ api/ # API Routes
โ โ โโโ ๐ auth/ # Authentication API
โ โ โโโ ๐ upload/ # Upload API
โ โ โโโ ๐ v1/ # REST API v1
โ โ
โ โโโ globals.css # Global Styles
โ โโโ page.js # Root Page (Redirect)
โ
โโโ ๐ components/ # React Components
โ โโโ ๐ admin/ # Admin Components
โ โโโ ๐ client/ # Frontend Components
โ โโโ ๐ common/ # Common Components
โ โโโ ๐ motion/ # Animation Components
โ โโโ ๐ ui/ # UI Base Components
โ
โโโ ๐ lib/ # Core Library
โ โโโ ๐ api/ # API Utilities
โ โโโ ๐ auth/ # Authentication
โ โโโ ๐ core/ # Core Features
โ โโโ ๐ database/ # Database Utilities
โ โโโ ๐ function/ # Utility Functions (nb.pubfn)
โ โโโ ๐ logging/ # Logging System
โ โโโ ๐ upload/ # Upload Utilities
โ โโโ ๐ validation/ # Validation Utilities
โ
โโโ ๐ prisma/ # Prisma ORM
โ โโโ schema.prisma # Database Model Definition
โ
โโโ ๐ i18n/ # Internationalization
โ โโโ ๐ messages/ # Translation Files
โ โโโ config.js # i18n Configuration
โ โโโ request.js # Request Configuration
โ
โโโ ๐ templates/ # Development Templates
โ โโโ ๐ crud/ # CRUD Templates
โ
โโโ ๐ docs/ # Project Documentation
โโโ ๐ public/ # Static Assets
โโโ ๐ hooks/ # React Hooks
โโโ ๐ config/ # Configuration Files
โโโ ๐ scripts/ # Script Tools๐ฏ Core Directories
app/(admin)/ - Admin Panel
app/(admin)/
โโโ admin/ # Pages Directory
โ โโโ rbac/ # RBAC Permission Management
โ โ โโโ roles/page.js # Role Management
โ โ โโโ permissions/page.js # Permission Management
โ โ โโโ menus/page.js # Menu Management
โ โ โโโ users/page.js # User Management
โ โ
โ โโโ system/ # System Management
โ โ โโโ action_logs/page.js # Action Logs
โ โ โโโ assets/page.js # Asset Management
โ โ
โ โโโ [your-module]/ # Your Module
โ โโโ [resource]/page.js
โ
โโโ actions/ # Server Actions
โ โโโ dao/ # Data Access Object
โ โ โโโ base.js # BaseDAO
โ โ
โ โโโ rbac/ # RBAC Actions
โ โ โโโ crud-action.role.js
โ โ โโโ crud-action.permission.js
โ โ โโโ crud-action.menu.js
โ โ
โ โโโ [module]/ # Your Module
โ โโโ crud-action.[resource].js
โ
โโโ layout.js # Admin Layout
โโโ admin-styles.css # Admin StylesNaming Conventions
| Type | Convention | Example |
|---|---|---|
| Page Directory | Plural Form | roles/, users/, posts/ |
| Action File | crud-action.{resource}.js | crud-action.role.js |
| Action Function | {prefix}{Action}{Resource}Action | sysGetRoleListAction |
app/(client)/ - Frontend Module
app/(client)/
โโโ [locale]/ # Multi-language Routes
โ โโโ layout.js # Frontend Layout
โ โโโ page.js # Home Page
โ โโโ auth/ # Authentication Pages
โ โ โโโ login/page.js
โ โ โโโ register/page.js
โ โโโ [your-page]/page.js
โ
โโโ actions/ # Frontend Actions
โโโ user-actions.js # User Related
โโโ [module]-actions.jscomponents/ - React Components
components/
โโโ admin/ # Admin Components
โ โโโ smart-crud-page.jsx # ๐ Universal Table
โ โโโ smart-form/ # ๐ Universal Form
โ โ โโโ index.js
โ โ โโโ smart-form.jsx
โ โ โโโ smart-modal-form.jsx
โ โ โโโ smart-drawer-form.jsx
โ โโโ admin-layout.jsx # Admin Layout
โ โโโ icon-picker.jsx # Icon Picker
โ โโโ json-editor.jsx # JSON Editor
โ โโโ markdown-editor.jsx # Markdown Editor
โ โโโ uploads/ # Upload Components
โ
โโโ client/ # Frontend Components
โ โโโ layout/ # Layout Components
โ โโโ home/ # Home Page Components
โ
โโโ common/ # Common Components
โ โโโ LanguageSwitcher.jsx # Language Switcher
โ โโโ theme-provider.jsx # Theme Provider
โ
โโโ ui/ # UI Base Components (shadcn/ui)
โโโ button.jsx
โโโ input.jsx
โโโ ...lib/ - Core Library
lib/
โโโ core/ # ๐ Core Features
โ โโโ action-wrapper.js # Action Wrapper
โ โโโ crud-helper.js # CRUD Factory Functions
โ โโโ permission-naming.js # Permission Naming Parser
โ
โโโ database/ # Database
โ โโโ prisma.js # Prisma Client
โ โโโ selects.js # Join Query Utilities
โ
โโโ function/ # ๐ Utility Functions (nb.pubfn)
โ โโโ index.js # Export Entry
โ โโโ array.js # Array Utilities
โ โโโ object.js # Object Utilities
โ โโโ string.js # String Utilities
โ โโโ time.js # Time Utilities
โ โโโ validator.js # Validation Utilities
โ โโโ tree.js # Tree Utilities
โ
โโโ auth/ # Authentication
โ โโโ auth.js # Better Auth Configuration
โ โโโ admin-auth.js # Admin Authentication
โ โโโ permission-auth.js # Permission Authentication
โ
โโโ api/ # API Utilities
โ โโโ action-client.js # Action Client
โ โโโ api-auth.js # API Authentication
โ
โโโ validation/ # Validation
โโโ schema-validator.js # Schema Validatorprisma/ - Database Models
prisma/
โโโ schema.prisma # Data Model Definition
โ
โโโ User # User
โโโ Session # Session
โโโ Account # OAuth Account
โ
โโโ Role # Role
โโโ Permission # Permission
โโโ Menu # Menu
โ
โโโ Asset # Asset Files
โโโ ActionLog # Action Log
โ
โโโ [YourModel] # Your Model๐ Naming Conventions
File Naming
| Type | Convention | Example |
|---|---|---|
| Page File | page.js | app/(admin)/admin/roles/page.js |
| Layout File | layout.js | app/(admin)/layout.js |
| Action File | crud-action.{resource}.js | crud-action.role.js |
| Component File | kebab-case.jsx | smart-crud-page.jsx |
| Utility File | kebab-case.js | action-wrapper.js |
Function Naming
| Type | Convention | Example |
|---|---|---|
| Server Action | {prefix}{Action}{Resource}Action | sysGetRoleListAction |
| Component | PascalCase | SmartCrudPage |
| Utility Function | camelCase | createCrudActions |
| Constant | UPPER_SNAKE_CASE | DEFAULT_PAGE_SIZE |
Action Prefixes
| Prefix | Permission Level | Description |
|---|---|---|
pub | PUBLIC | Public access, no login required |
auth | AUTH | Login required |
sys | SYSTEM | Admin permission + RBAC check required |
_ | PRIVATE | Internal function, cannot be called directly |
๐ Data Flow
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Frontend Page โ
โ app/(admin)/admin/roles/page.js โ
โ - Uses SmartCrudPage Component โ
โ - Configures fieldsConfig โ
โ - Passes actions โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Server Actions โ
โ app/(admin)/actions/rbac/crud-action.role.js โ
โ - Created using createCrudActions โ
โ - Automatically wrapped with wrapAction โ
โ - Automatic permission check and logging โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ BaseDAO โ
โ app/(admin)/actions/dao/base.js โ
โ - Universal Data Access Object โ
โ - Handles CRUD Operations โ
โ - Field Filtering, Validation, Hooks โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Prisma Client โ
โ lib/database/prisma.js โ
โ - Type-safe Database Operations โ
โ - Auto-generated Query Methods โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PostgreSQL โ
โ prisma/schema.prisma โ
โ - Data Model Definition โ
โ - Relationship Mapping โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ