Local setup
Prerequisites
Section titled “Prerequisites”| Tool | Version | Install |
|---|---|---|
| Node.js | >= 24 | nvm install 24 |
| pnpm | 10.33.0 | npm i -g pnpm@10.33.0 |
| Docker | latest | Docker Desktop or colima |
1. Install dependencies
Section titled “1. Install dependencies”pnpm install2. Start Docker infrastructure
Section titled “2. Start Docker infrastructure”All local datastores run in Docker:
docker compose -f docker/docker-compose.yml up -d| Container | Port | Description |
|---|---|---|
postgres-scheduler |
5434 | Scheduler DB (Drizzle) |
postgres-vendure |
5432 | Vendure DB (TypeORM) |
postgres-directus |
5433 | Directus DB |
redis |
6379 | BullMQ queues + sessions |
minio |
9000 | S3-compatible object storage |
3. Bootstrap services
Section titled “3. Bootstrap services”Each service needs a one-time database setup:
# Scheduler migrationspnpm --filter scheduler-api db:migrate
# Vendure migrations + seedpnpm --filter vendure-server migratepnpm --filter vendure-server seed
# Directus migrations + schema + seedpnpm --filter directus migratepnpm --filter directus schema apply ./snapshots/latest.yamlpnpm --filter directus bootstrap4. Copy and fill environment variables
Section titled “4. Copy and fill environment variables”Each app has an .env.example. Copy and fill:
cp apps/scheduler-api/.env.example apps/scheduler-api/.envcp apps/portal/.env.example apps/portal/.envcp apps/portal-business/.env.example apps/portal-business/.env# … etc for each app you're working onKey secrets you’ll need:
WORKOS_API_KEY+WORKOS_CLIENT_ID(WorkOS dashboard)STRIPE_SECRET_KEY(Stripe test mode)PORKBUN_API_KEY+PORKBUN_SECRET_KEY(only if testing domain flows)
5. Start everything
Section titled “5. Start everything”pnpm devThis starts all apps concurrently via Turbo. Or start just the apps you need:
pnpm --filter scheduler-api devpnpm --filter portal devpnpm --filter portal-business devpnpm --filter site-hypno devPort reference
Section titled “Port reference”| App | Local URL |
|---|---|
| site-main | http://localhost:3000 |
| site-shop | http://localhost:3010 |
| site-hypno | http://localhost:3020 |
| portal | http://localhost:3030 |
| portal-business | http://localhost:3040 |
| scheduler-api | http://localhost:4000 |
| vendure-server | http://localhost:3001 |
| directus | http://localhost:8055 |
| docs | http://localhost:4330 |
Temporal (optional)
Section titled “Temporal (optional)”Temporal is not started by default locally. If you need to test workflow code:
temporal server start-devThen set TEMPORAL_ADDRESS=localhost:7233 in scheduler-api/.env.
Running tests
Section titled “Running tests”pnpm test # Unit tests (Vitest)pnpm test:e2e:sync # Full-flow e2e (requires Docker running)The e2e-sync suite spins up its own Docker containers — you do not need to manually start the infra. See CI graph for what each test file covers.