Project Structure
Understanding the monorepo structure and organization.
Note: This is mock/placeholder content for demonstration purposes.
Learn how the codebase is organized and where to find things.
Monorepo Overview
This project uses Turborepo to manage a monorepo with multiple apps and packages.
project-root/
├── apps/ # Applications
│ ├── web/ # Main Next.js app
│ ├── e2e/ # Playwright E2E tests
│ └── dev-tool/ # Development utilities
├── packages/ # Shared packages
│ ├── features/ # Feature packages
│ ├── ui/ # UI components
│ ├── supabase/ # Supabase utilities
│ └── billing/ # Billing integrations
├── tooling/ # Development tools
├── supabase/ # Database schema & migrations
└── docs/ # Documentation
Main Application (apps/web)
The primary Next.js application:
apps/web/
├── app/ # Next.js App Router
│ ├── (marketing)/ # Public pages
│ ├── (auth)/ # Authentication
│ ├── home/ # Main application
│ │ ├── (user)/ # Personal account
│ │ └── [account]/ # Team accounts
│ ├── admin/ # Admin panel
│ └── api/ # API routes
├── components/ # Shared components
├── config/ # Configuration files
├── lib/ # Utility functions
├── public/ # Static assets
└── supabase/ # Supabase setup
Route Structure
Marketing Routes ((marketing))
Public-facing pages:
app/(marketing)/
├── page.tsx # Landing page
├── pricing/ # Pricing page
├── blog/ # Blog
└── docs/ # Documentation
Auth Routes ((auth))
Authentication pages:
app/(auth)/
├── sign-in/
├── sign-up/
├── password-reset/
└── verify/
Application Routes (home)
Main application:
app/home/
├── (user)/ # Personal account context
│ ├── page.tsx # Personal dashboard
│ ├── settings/ # User settings
│ └── projects/ # Personal projects
└── [account]/ # Team account context
├── page.tsx # Team dashboard
├── settings/ # Team settings
├── projects/ # Team projects
└── members/ # Team members
Packages Structure
Feature Packages (packages/features/)
Modular features:
packages/features/
├── accounts/ # Account management
├── auth/ # Authentication
├── team-accounts/ # Team features
├── billing/ # Billing & subscriptions
├── admin/ # Admin features
└── notifications/ # Notification system
UI Package (packages/ui/)
Shared UI components:
packages/ui/
└── src/
├── components/ # Shadcn UI components
│ ├── button.tsx
│ ├── input.tsx
│ ├── dialog.tsx
│ └── ...
└── utils/ # UI utilities
Supabase Package (packages/supabase/)
Database utilities:
packages/supabase/
├── schema/ # Declarative schemas
│ ├── accounts.schema.ts
│ ├── auth.schema.ts
│ └── ...
├── src/
│ ├── clients/ # Supabase clients
│ ├── hooks/ # React hooks
│ └── middleware/ # Auth middleware
└── migrations/ # SQL migrations
Configuration Files
Root Level
project-root/
├── package.json # Root package.json
├── turbo.json # Turborepo config
├── pnpm-workspace.yaml # PNPM workspace
└── tsconfig.json # Base TypeScript config
Application Level
apps/web/
├── next.config.js # Next.js configuration
├── tailwind.config.ts # Tailwind CSS
├── tsconfig.json # TypeScript config
└── .env.local # Environment variables
Feature Configuration
apps/web/config/
├── paths.config.ts # Route paths
├── billing.config.ts # Billing settings
├── feature-flags.config.ts # Feature flags
├── personal-account-navigation.config.tsx
└── team-account-navigation.config.tsx
Naming Conventions
Files
- Pages:
page.tsx(Next.js convention) - Layouts:
layout.tsx - Components:
kebab-case.tsx - Utilities:
kebab-case.ts - Types:
types.tsorcomponent-name.types.ts
Directories
- Route segments:
[param]for dynamic - Route groups:
(group)for organization - Private folders:
_components,_lib - Parallel routes:
@folder
Code Organization
feature/
├── page.tsx # Route page
├── layout.tsx # Route layout
├── loading.tsx # Loading state
├── error.tsx # Error boundary
├── _components/ # Private components
│ ├── feature-list.tsx
│ └── feature-form.tsx
└── _lib/ # Private utilities
├── server/ # Server-side code
│ ├── loaders.ts
│ └── actions.ts
└── schemas/ # Validation schemas
└── feature.schema.ts
Import Paths
Use TypeScript path aliases:
// Absolute imports from packages
import { Button } from '@kit/ui/button';
import { createClient } from '@kit/supabase/server-client';
// Relative imports within app
import { FeatureList } from './_components/feature-list';
import { loadData } from './_lib/server/loaders';
Best Practices
- Keep route-specific code private - Use
_componentsand_lib - Share reusable code - Extract to packages
- Collocate related files - Keep files near where they're used
- Use consistent naming - Follow established patterns
- Organize by feature - Not by file type
Finding Your Way
| Looking for... | Location |
|----------------|----------|
| UI Components | packages/ui/src/components/ |
| Database Schema | packages/supabase/schema/ |
| API Routes | apps/web/app/api/ |
| Auth Logic | packages/features/auth/ |
| Billing Code | packages/features/billing/ |
| Team Features | packages/features/team-accounts/ |
| Config Files | apps/web/config/ |
| Types | *.types.ts files throughout |