Overview
Set up the Prood monorepo and run all applications locally.
This section walks you through installing the monorepo, configuring environment variables, seeding the database, and running every application in development.
Prerequisites
| Tool | Version |
|---|---|
| Node.js | 24 or later |
| pnpm | 10 |
| Neon Postgres | A database URL (local Docker or Neon cloud) |
Optional for full checkout flows:
- Upstash Redis — checkout session storage
- Stripe (or Easypay / Ifthenpay) — payment provider keys
Quick install
git clone <your-repo-url>
cd prood-commerce-platform
pnpm install
cp .env.example .env.local
pnpm env:link
pnpm db:setup
pnpm devAfter pnpm dev, Turbo starts all apps:
| App | URL |
|---|---|
| Storefront | http://localhost:3000 |
| Marketing | http://localhost:3001 |
| Dashboard | http://localhost:3002 |
| Docs | http://localhost:3003/docs |
| Checkout | http://localhost:3004 |
| API | http://localhost:3005 |
What db:setup does
The root script runs three steps:
pnpm db:migrate— Applies the@prood/platformDrizzle schema, enables row-level security (applyTenantIsolation), and seeds a demo store tagged withorg_demo.pnpm db:auth— Creates Better Auth tables (user, session, account, organization, etc.) used by storefront, dashboard, and API.pnpm db:seed-auth— Seeds theorg_demoorganization and an admin user fromADMIN_EMAIL/ADMIN_PASSWORDwhen those env vars are set.
Set DEFAULT_TENANT_ORG_ID=org_demo in .env.local (the default in .env.example) so the storefront resolves the seeded catalog on localhost.
Shared environment
All apps read from a single root .env.local. Run pnpm env:link once to symlink apps/*/.env.local → root .env.local. This avoids drift between apps.
Documentation map
Installation
Detailed install steps, monorepo layout, and build commands.
Quick start
End-to-end flow: browse → cart → checkout → payment.
Environment variables
Complete reference for every env var in `.env.example`.
Default demo credentials
After seeding, the platform creates an admin user if ADMIN_EMAIL and ADMIN_PASSWORD are set in .env.local. Use these to sign in to the dashboard at :3002.
The seeded catalog is scoped to DEFAULT_TENANT_ORG_ID (default org_demo). The storefront serves this store when no custom domain is configured.