Local development setup
Prerequisites
Section titled “Prerequisites”- Go 1.25+
- Node.js 22+
- pnpm 10+
- Docker (for PostgreSQL and Redis)
- GitHub App (for webhook testing — see the Getting started guide)
Quick start
Section titled “Quick start”Start the database and cache containers:
docker compose -f deploy/docker-compose.dev.yml up -dThen start all services at once:
./dev.shdev.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.
Environment variables
Section titled “Environment variables”Copy the example file and fill in the required values:
cp .env.example .envRequired
Section titled “Required”| Variable | Description |
|---|---|
DATABASE_URL | PostgreSQL connection string |
REDIS_URL | Redis connection string |
GITHUB_APP_ID | Your GitHub App’s numeric ID |
GITHUB_APP_PRIVATE_KEY | PEM-encoded private key for the GitHub App |
GITHUB_APP_WEBHOOK_SECRET | Webhook secret configured in the GitHub App |
GITHUB_CLIENT_ID | OAuth client ID from the GitHub App |
GITHUB_CLIENT_SECRET | OAuth client secret from the GitHub App |
SESSION_SECRET | Random string, 32+ characters |
ENCRYPTION_KEY | 64 hex characters for AES-256-GCM field encryption |
BADGE_HMAC_SECRET | 64 hex characters for badge URL signing |
ADMIN_GITHUB_IDS | Comma-separated GitHub user IDs for admin access |
Optional
Section titled “Optional”| Variable | Description |
|---|---|
ANTHROPIC_API_KEY | Enables AI-generated reviewer briefs |
GLITCHTIP_DSN | Error tracking via GlitchTip |
| Viva Payments vars | Payment processing for subscriptions |
Running individual apps
Section titled “Running individual apps”If you prefer to run apps separately instead of using dev.sh:
# API server (port 8080)go run ./cmd/server
# Background workergo run ./cmd/worker
# Dashboard dev server (port 5173)cd apps/dashboard && pnpm devDatabase
Section titled “Database”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/.
Dashboard proxy
Section titled “Dashboard proxy”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.