Project Structure
Understanding the structure of a ShadPanel project helps you navigate and customize your admin panel effectively.
Directory Overview
my-app/
├── app/                        # Next.js App Router
│   ├── layout.tsx              # Root layout with providers
│   ├── page.tsx                # Landing page
│   ├── globals.css             # Global styles
│   ├── admin/                  # Admin panel routes
│   │   ├── layout.tsx          # Admin auth layout
│   │   ├── login/              # Login page
│   │   ├── signup/             # Signup page
│   │   └── dashboard/          # Dashboard routes
│   │       ├── layout.tsx      # Dashboard with sidebar
│   │       ├── page.tsx        # Dashboard home
│   │       └── [your-pages]/   # Your custom pages
│   └── api/
│       └── auth/[...nextauth]/ # NextAuth.js API routes
│           └── route.ts
├── components/                 # React components
│   ├── ui/                     # UI component library
│   │   ├── button.tsx
│   │   ├── card.tsx
│   │   ├── form-builder/       # Form components
│   │   └── data-table/         # Table components
│   ├── app-sidebar.tsx         # Sidebar navigation
│   ├── providers.tsx           # App-level providers
│   ├── login-form.tsx          # Login form
│   └── signup-form.tsx         # Signup form
├── contexts/                   # React contexts
│   ├── panel-context.tsx       # Panel state management
│   └── auth-providers-context.tsx
├── hooks/                      # Custom React hooks
│   ├── use-mobile.ts           # Responsive breakpoint hook
│   └── use-auth-providers.ts   # Auth providers hook
├── lib/                        # Utility libraries
│   └── utils.ts                # Helper functions (cn, etc.)
├── types/                      # TypeScript definitions
│   └── next-auth.d.ts          # NextAuth type extensions
├── config/                     # Configuration files
│   └── menu.ts                 # Sidebar menu configuration
├── prisma/                     # Database (if initialized)
│   ├── schema.prisma           # Prisma schema
│   └── schema.prisma.template  # Schema template
├── package.json
├── tsconfig.json
├── next.config.ts
├── postcss.config.mjs
├── .env                        # Environment variables
├── .gitignore
└── README.mdKey Directories
/app - Application Routes
The app directory uses Next.js 14+ App Router:
layout.tsx- Root layout that wraps the entire app with theme providerspage.tsx- Public landing page (customize or replace)admin/- Protected admin panel areaadmin/dashboard/- Main dashboard with sidebar navigationapi/auth/- NextAuth.js authentication endpoints
/components - React Components
/components/ui - UI Component Library
Contains 50+ pre-built components from shadcn/ui:
Base Components:
button.tsx,input.tsx,label.tsx,card.tsx,badge.tsxselect.tsx,checkbox.tsx,switch.tsx,textarea.tsxdialog.tsx,dropdown-menu.tsx,popover.tsx,tooltip.tsxtabs.tsx,separator.tsx,skeleton.tsx,alert.tsxbreadcrumb.tsx,calendar.tsx,sheet.tsx,sidebar.tsx
Form Builder Components:
form-builder/form.tsx- Main form wrapperform-builder/fields/- Input fields (FormInput, FormSelect, etc.)form-builder/layout/- Layout components (FormGrid, FormSection, etc.)
Data Table Components:
data-table/data-table.tsx- Main table componentdata-table/columns/- Column types (TableTextColumn, TableImageColumn, etc.)
Application Components
app-sidebar.tsx- Configurable sidebar navigationproviders.tsx- Combines theme provider, session provider, etc.login-form.tsx/signup-form.tsx- Authentication forms
/contexts - State Management
React Context providers for application-wide state:
panel-context.tsx- Manages panel UI state (sidebar, theme, etc.)auth-providers-context.tsx- Auth providers configuration
/hooks - Custom Hooks
Reusable React hooks:
use-mobile.ts- Responsive breakpoint detectionuse-auth-providers.ts- Access auth providers from context
/lib - Utilities
Helper functions and utilities:
utils.ts- Containscn()for className merging and other utilities
/config - Configuration
Application configuration files:
menu.ts- Sidebar menu structure and navigation items
/types - TypeScript Types
TypeScript type definitions:
next-auth.d.ts- NextAuth.js type extensions
/prisma - Database (Optional)
Created when you run shadpanel db init:
schema.prisma- Direct Prisma schema (edit for one-time changes)schema.prisma.template- Template for regenerating schema (edit for reusable templates)
Configuration Files
package.json
Contains all dependencies and scripts:
{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  }
}next.config.ts
Next.js configuration (TypeScript version).
tsconfig.json
TypeScript configuration with path aliases:
{
  "compilerOptions": {
    "paths": {
      "@/*": ["./*"]
    }
  }
}Use @/ prefix to import from project root:
import { Button } from "@/components/ui/button"
import { cn } from "@/lib/utils".env
Environment variables for development:
NEXTAUTH_SECRET=your-secret-here
NEXTAUTH_URL=http://localhost:3000
 
# OAuth Providers (if enabled)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_ID=
GITHUB_SECRET=
 
# Database (if initialized)
DATABASE_URL=Adding New Pages
Dashboard Pages
Create new pages under app/admin/dashboard/:
// app/admin/dashboard/users/page.tsx
export default function UsersPage() {
  return (
    <div>
      <h1>Users</h1>
      {/* Your content */}
    </div>
  )
}Add to sidebar menu in config/menu.ts:
{
  title: "Users",
  url: "/admin/dashboard/users",
  icon: Users,
}Public Pages
Create pages directly under app/:
// app/about/page.tsx
export default function AboutPage() {
  return <div>About Page</div>
}File Naming Conventions
ShadPanel uses prefixed naming for form and table components:
- Form Components: 
FormInput,FormSelect,FormTextarea, etc. - Table Components: 
Table,TableTextColumn,TableAction, etc. 
This prevents conflicts with native HTML elements and other libraries.
Next Steps
- CLI Commands - Learn all available commands
 - Components - Explore the component library
 - Database Integration - Set up Prisma