PORT=4000 LOG_LEVEL=info NODE_ENV=development # Postgres (started by docker-compose; defaults match the compose service) DATABASE_URL=***************************************/growqr POSTGRES_USER=growqr POSTGRES_PASSWORD=****** POSTGRES_DB=growqr # Clerk auth — get from dashboard.clerk.com → API Keys CLERK_SECRET_KEY=clerk_key CLERK_PUBLISHABLE_KEY=clerk_publishable_key # OpenCode Zen LLM gateway — get from opencode.ai/auth OPENCODE_API_KEY=sk-REPLACE_ME LLM_PROVIDER=opencode LLM_BASE_URL=https://opencode.ai/zen/v1 LLM_MODEL=kimi-k2.6 GROW_AGENT_MODEL=kimi-k2.6 MAX_AGENT_TOKENS=4096 # Shared secret for actor → backend service calls (rotate in prod) SERVICE_TOKEN=dev-service-token-REPLACE_ME A2A_ALLOWED_KEY=*********** # ── Central Gitea (shared org-wide, changes.md §2A) ── GITEA_URL=http://127.0.0.1:3001 GITEA_ADMIN_USER=growqr-admin GITEA_ADMIN_PASSWORD=growqr-admin-dev GITEA_ADMIN_TOKEN= GITEA_ORG_NAME=growqr # ── Version tracking (changes.md §9) ── OPENCODE_IMAGE_VERSION=1.0.0 MIGRATION_VERSION=1 PROMPT_VERSION=1 # Rivet Kit engine (self-hosted in docker-compose) RIVET_ENDPOINT=http://localhost:6420 RIVET_CLIENT_ENDPOINT=http://127.0.0.1:4000/api/rivet # Product microservice sub-agent URLs INTERVIEW_SERVICE_URL=http://localhost:8007 ROLEPLAY_SERVICE_URL=http://localhost:8008 QSCORE_SERVICE_URL=http://localhost:8000 # Per-user OpenCode container image (shared, changes.md §3) OPENCODE_IMAGE=ghcr.io/anomalyco/opencode:latest # Host where spawned containers expose their ports. # - localhost in dev # - host.docker.internal when the backend runs inside docker-compose USER_CONTAINER_HOST=127.0.0.1 # Workspace root on the host. Each user gets a subdir. USER_DATA_ROOT=./.data/users # Port range allocated to per-user OpenCode containers (Gitea is central) USER_PORT_RANGE_START=20000 USER_PORT_RANGE_END=29999 # CORS origin(s) for the Next.js frontend (comma-separated for multiple) FRONTEND_ORIGIN=http://localhost:3000