Skip to content

Local setup

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
Terminal window
pnpm install

All local datastores run in Docker:

Terminal window
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

Each service needs a one-time database setup:

Terminal window
# Scheduler migrations
pnpm --filter scheduler-api db:migrate
# Vendure migrations + seed
pnpm --filter vendure-server migrate
pnpm --filter vendure-server seed
# Directus migrations + schema + seed
pnpm --filter directus migrate
pnpm --filter directus schema apply ./snapshots/latest.yaml
pnpm --filter directus bootstrap

Each app has an .env.example. Copy and fill:

Terminal window
cp apps/scheduler-api/.env.example apps/scheduler-api/.env
cp apps/portal/.env.example apps/portal/.env
cp apps/portal-business/.env.example apps/portal-business/.env
# … etc for each app you're working on

Key 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)
Terminal window
pnpm dev

This starts all apps concurrently via Turbo. Or start just the apps you need:

Terminal window
pnpm --filter scheduler-api dev
pnpm --filter portal dev
pnpm --filter portal-business dev
pnpm --filter site-hypno dev
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 is not started by default locally. If you need to test workflow code:

Terminal window
temporal server start-dev

Then set TEMPORAL_ADDRESS=localhost:7233 in scheduler-api/.env.

Terminal window
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.