Skip to content

Local development setup

  • Go 1.25+
  • Node.js 22+
  • pnpm 10+
  • Docker (for PostgreSQL and Redis)
  • GitHub App (for webhook testing — see the Getting started guide)

Start the database and cache containers:

Terminal window
docker compose -f deploy/docker-compose.dev.yml up -d

Then start all services at once:

Terminal window
./dev.sh

dev.sh runs turbo run dev dev:worker dev:retention:cron --concurrency 12, which starts the API server, background worker, retention cron, and the dashboard dev server in parallel.

Copy the example file and fill in the required values:

Terminal window
cp .env.example .env
VariableDescription
DATABASE_URLPostgreSQL connection string
REDIS_URLRedis connection string
GITHUB_APP_IDYour GitHub App’s numeric ID
GITHUB_APP_PRIVATE_KEYPEM-encoded private key for the GitHub App
GITHUB_APP_WEBHOOK_SECRETWebhook secret configured in the GitHub App
GITHUB_CLIENT_IDOAuth client ID from the GitHub App
GITHUB_CLIENT_SECRETOAuth client secret from the GitHub App
SESSION_SECRETRandom string, 32+ characters
ENCRYPTION_KEY64 hex characters for AES-256-GCM field encryption
BADGE_HMAC_SECRET64 hex characters for badge URL signing
ADMIN_GITHUB_IDSComma-separated GitHub user IDs for admin access
VariableDescription
ANTHROPIC_API_KEYEnables AI-generated reviewer briefs
GLITCHTIP_DSNError tracking via GlitchTip
Viva Payments varsPayment processing for subscriptions

If you prefer to run apps separately instead of using dev.sh:

Terminal window
# API server (port 8080)
go run ./cmd/server
# Background worker
go run ./cmd/worker
# Dashboard dev server (port 5173)
cd apps/dashboard && pnpm dev

Migrations run automatically when the API server starts. There is no separate migration command to run. The migration files live in apps/api/internal/store/migrations/.

The dashboard dev server proxies /api and /auth requests to localhost:8080, so the API server must be running for the dashboard to function. No additional proxy configuration is needed.