# Postgres. Matches docker-compose.dev.yaml. DATABASE_URL="postgresql://roster:roster@localhost:5442/roster" # better-auth. Generate with: openssl rand -base64 32 BETTER_AUTH_SECRET="" BETTER_AUTH_URL="http://localhost:3000" NEXT_PUBLIC_APP_URL="http://localhost:3000" # Email. Leave RESEND_API_KEY empty in development and magic links are # printed to the server console instead of sent — auth is then developable # with no email account wired up. # # Deployed, EMAIL_FROM must be an address on a domain verified in Resend. # `onboarding@resend.dev` is Resend's sandbox: nobody owns it, so Resend only # delivers mail from it to the address that owns the account — every other # recipient comes back as "you can only send testing emails to your own email # address". Verifying is about the domain you send FROM; recipients never need # it. RESEND_API_KEY="" EMAIL_FROM="Roster " # Centrifugo. Matches docker-compose.dev.yaml (8010 rather than 8000). # Generate the two secrets with: openssl rand -hex 32 # Leave them empty and realtime turns itself off: sending and reading fall # back to plain tRPC. CENTRIFUGO_URL="http://localhost:8010" # Deployed, the browser cannot reach the private address this server publishes # to — set the public one here. Unset, the browser uses CENTRIFUGO_URL, which # is what you want locally. CENTRIFUGO_PUBLIC_URL="" CENTRIFUGO_API_KEY="" CENTRIFUGO_TOKEN_HMAC_SECRET="" # The server publishes to three namespaces: channel, thread and user. A # namespace Centrifugo does not know about rejects the publish, so a deployed # Centrifugo needs all three declared — see docker/centrifugo/config.json, # which only configures the one docker-compose.dev.yaml starts. # Redis. Matches docker-compose.dev.yaml (6389 rather than 6379). # Required: it carries the queues the worker runs on, the command lists the # web process writes to, and the lease that decides which worker owns a # machine's events socket. Unlike Centrifugo there is no degraded mode — # without it no session can start. # # Deployed, Redis must run `maxmemory-policy noeviction` with AOF on. Eviction # silently drops queued jobs and lease keys. REDIS_URL="redis://localhost:6389" # Postgres pool sizing. Both optional; the defaults suit a single instance. DATABASE_POOL_MAX="20" DATABASE_STATEMENT_TIMEOUT_MS="30000" # Where message attachments are written. Relative paths resolve against the # working directory, which is the repository root in development. Deployed, # point this at a mounted volume — a container filesystem is thrown away on # every redeploy, and the rows would outlive their files. UPLOADS_DIR=".uploads" # Encrypts the stored Superset API key (AES-256-GCM). # Generate with: openssl rand -base64 32 SUPERSET_KEY_SECRET="" SUPERSET_API_URL="https://api.superset.sh" SUPERSET_RELAY_URL="https://relay.superset.sh" # The chat harness a thread's agent runs on the host ("claude-acp", "codex-acp"). # Threads need a host on Superset 1.36.0 or later. ROSTER_CHAT_HARNESS="claude-acp"