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
Variable Default Description
DATABASE_URL postgres://inntrig:inntrig@localhost:5432/inntrig Postgres connection string
PORT 3001 API port
BETTER_AUTH_SECRET Required. Secret key for Better Auth session signing
BETTER_AUTH_URL http://localhost:3001 Full URL of the API (used by Better Auth)
BETTER_AUTH_TRUSTED_ORIGINS http://localhost:5173 Comma-separated list of trusted origins for CSRF
Variable Default Description
API_URL http://localhost:3001 API base URL (server-side only)

Postgres runs via Docker Compose with these defaults:

Setting Value
Host localhost:5432
Database inntrig
User inntrig
Password inntrig

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)