Skip to content
  • System
  • Light
  • Dark
  • High contrast

Local development

  • Node.js ≥ 24 (see .node-version)
  • pnpm ≥ 10 (npm install -g pnpm)
  • OrbStack or Docker Desktop for the Postgres container
Terminal window
pnpm install
docker compose up -d

Copy the environment files:

Terminal window
cp apps/api/.env.example apps/api/.env
cp apps/web/.env.example apps/web/.env

Edit apps/api/.env — at minimum set BETTER_AUTH_SECRET to any random string (e.g. openssl rand -base64 32).

Run migrations:

Terminal window
pnpm --filter @inntrig/db db:migrate
Terminal window
pnpm --filter @inntrig/api dev # API on :3001
pnpm --filter @inntrig/web dev # Web on :5173

Or both together via Turborepo (streams output):

Terminal window
pnpm dev
VariableDefaultDescription
DATABASE_URLpostgres://inntrig:inntrig@localhost:5432/inntrigPostgres connection string
PORT3001API port
BETTER_AUTH_SECRETRequired. Secret key for Better Auth session signing
BETTER_AUTH_URLhttp://localhost:3001Full URL of the API (used by Better Auth)
BETTER_AUTH_TRUSTED_ORIGINShttp://localhost:5173Comma-separated list of trusted origins for CSRF
VariableDefaultDescription
API_URLhttp://localhost:3001API base URL (server-side only)

Postgres runs via Docker Compose with these defaults:

SettingValue
Hostlocalhost:5432
Databaseinntrig
Userinntrig
Passwordinntrig

Useful commands:

Terminal window
pnpm --filter @inntrig/db db:generate # generate migrations from schema changes
pnpm --filter @inntrig/db db:migrate # apply pending migrations
pnpm --filter @inntrig/db db:studio # open Drizzle Studio in browser
Terminal window
pnpm test # Vitest (all packages)
pnpm --filter @inntrig/web test:e2e # Playwright e2e (requires both servers running)