Team decision: production DB connection and first-boot owner email are hardcoded in the app instead of a .env file, matching the box's other apps. Gated to NODE_ENV=production so dev/tests keep using SQLite (389 tests green). Committed value is the CHANGE_ME_PASSWORD placeholder; the real password is set only on the box, never pushed. server.ts: HARDCODED_DATABASE_URL. seed.ts: OWNER_EMAIL default. docker-compose.yml: drop env_file. docs: PATHS-AND-NAMES.md + .env.example updated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
| HQ login | `postgres` — the shared superuser. Every app on this box uses it; there are **no** per-app roles (checked 2026-07-18). A dedicated `hq` role is a future hardening. |
| HQ login | `postgres` — the shared superuser. Every app on this box uses it; there are **no** per-app roles (checked 2026-07-18). A dedicated `hq` role is a future hardening. |
| Connection string | `postgres://postgres:<postgres-password>@host.docker.internal:5432/hq` — **hardcoded** in `apps/hq/src/server.ts` (`HARDCODED_DATABASE_URL`), not a `.env` |
## App environment (`apps/hq/.env`)
## Configuration — hardcoded in code (no `.env`)
| Key | Value |
Team decision (for now; may move to `.env`/secrets later): config is **hardcoded in the
|---|---|
source**, matching the box's other apps. `NODE_ENV=production` (set in the Dockerfile)
| `HQ_PORT` | `5182` |
activates the hardcoded values; dev and the test suite are unaffected and still use SQLite.
| `SIMS_PIN_PEPPER` | generated on box — **set once, never change** |
|---|---|---|
| `HQ_SECRET_KEY` | generated on box (needed before Gmail) |
| DB connection | `apps/hq/src/server.ts` → `HARDCODED_DATABASE_URL` | `postgres://postgres:<password>@host.docker.internal:5432/hq` — **replace `CHANGE_ME_PASSWORD` on the box, then rebuild** |