Local development
Run the web app and worker from source while keeping infrastructure in Docker.
Install and configure
Use Node.js 20 and pnpm 10.15.1. Copy .env.example to .env and configure auth, chat, and embeddings. Point host processes at localhost service ports; Compose hostnames such as db and document-converter only resolve inside the Docker network.
corepack enable
corepack prepare pnpm@10.15.1 --activate
pnpm install --frozen-lockfile
docker compose --profile ocr up -d db seaweedfs docling-serve transcription adeu-docs-editing document-converter gotenbergUse host-reachable endpoints
Use the POSTGRES_PASSWORD from your Compose setup in the connection string. Copy the corresponding service keys from .env and keep them identical on the clients and service containers.
DATABASE_URL=postgresql://postgres:your-password@localhost:5433/pdr_ai_v2
BETTER_AUTH_URL=http://localhost:3000
APP_PUBLIC_URL=http://host.docker.internal:3000
TRANSCRIPTION_SERVICE_URL=http://localhost:8000
DOCUMENT_CONVERTER_URL=http://localhost:8002
ADEU_SERVICE_URL=http://localhost:8003
GOTENBERG_SERVICE_URL=http://localhost:8004host.docker.internal lets Docker Desktop services fetch database-backed files from your host. Linux hosts need an equivalent host-gateway mapping. Allow that exact origin in the converter/editing fetch allowlists. Use a browser-reachable APP_PUBLIC_URL when testing OAuth callbacks.
Migrate, then run both processes
The web migration command applies engine and product SQL. Run the web app and worker in separate terminals; a web server alone will not process document jobs.
pnpm --filter @launchstack/web db:migrate
pnpm --filter @launchstack/web db:verify
pnpm --filter @launchstack/web devStart the worker
The worker reads the same provider and database configuration. Use the separate public-site development command only when working on the marketing website.
pnpm --filter @launchstack/worker dev