Project Structure
Understanding how a SeanStack monorepo is organized
Monorepo Architecture
Directory Overview
The top-level structure of a SeanStack project
my-awesome-app/
├── apps/ # Your applications
│ ├── marketing-site/ # Public-facing marketing site
│ ├── web-app/ # Main SaaS application
│ └── admin-dashboard/ # Admin control panel
├── packages/ # Shared packages
│ ├── ui/ # Component library
│ ├── utils/ # Utility functions
│ ├── supabase/ # Database & auth logic
│ └── integrations/ # Third-party integrations
├── patterns/ # Reusable feature patterns
├── .env.example # Environment variables template
├── turbo.json # Turborepo configuration
└── package.json # Root package file
Apps Directory
marketing-site
Your public website with landing pages, pricing, and blog. Optimized for SEO and performance.
web-app
The main application your users log into. Includes auth, dashboard, and all your core features.
admin-dashboard
Internal admin panel for managing users, viewing analytics, and controlling your application.
Packages Directory
@myapp/ui
Shared React components, built with Radix UI and Tailwind. Used across all your apps.
@myapp/supabase
Database client, auth helpers, and type-safe queries shared between apps.
@myapp/integrations
Configured integrations with Stripe, Resend, and other third-party services.
App Structure
Each Next.js app follows the App Router convention
apps/web-app/
├── app/ # App Router pages
│ ├── (auth)/ # Auth group (login, signup)
│ ├── dashboard/ # Protected dashboard routes
│ ├── api/ # API routes
│ └── layout.tsx # Root layout
├── components/ # App-specific components
├── lib/ # App-specific utilities
├── public/ # Static assets
└── middleware.ts # Auth & routing middleware
Key Configuration Files
turbo.json
Defines build pipeline and caching strategy for the monorepo
pnpm-workspace.yaml
Configures workspace packages for pnpm
tsconfig.json
Base TypeScript configuration inherited by all packages
.env.local
Environment variables (not committed to git)
Pro Tip
pnpm dev
from the root to start all apps simultaneously, or navigate to a specific app directory to run just that one.