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 |