# Copy to stacks/manager/.env (kept out of git — see the repo root's # .gitignore) and fill in real values. # ── Platform-operator login ───────────────────────────────────────────── MANAGER_EMAIL="you@example.com" # bcrypt hash (cost 12) of your chosen password — generate one with: # node -e "console.log(require('bcryptjs').hashSync('your-password', 12))" # (run from the manager/ directory so it resolves the bcryptjs dependency) MANAGER_PASSWORD_HASH="replace-me" # Signs the session cookie — generate with: openssl rand -hex 32 MANAGER_SESSION_SECRET="replace-me" # Encrypts secrets (e.g. the SMTP password) stored in Settings > Email — # see src/lib/global-settings.ts. Must be a 32-byte value, hex-encoded. # Generate with: openssl rand -hex 32 # Losing/rotating this makes any previously-saved secret undecryptable — # you'd need to re-enter it in Settings afterward. MANAGER_SETTINGS_ENCRYPTION_KEY="replace-me" # The URL this app is actually served at (used to decide whether the # session cookie needs its Secure attribute) — e.g. "https://manager.example.com". MANAGER_PUBLIC_URL="https://manager.example.com" # ── Shared MySQL (see stacks/infra/compose.yaml) ──────────────────────── MYSQL_HOST="next-chair-mysql" MYSQL_PORT="3306" # Same value as stacks/infra/.env's MYSQL_ROOT_PASSWORD — needed here too # to create each new business's database/user. Two copies of the same # value, deliberately not derived from one another — see stacks/infra/ # compose.yaml's own note on why MYSQL_*/DATABASE_* aren't cross-wired. MYSQL_ROOT_PASSWORD="replace-me" # ── Docker / stacks ────────────────────────────────────────────────────── # Must be the identical absolute path as stacks/infra/.env's STACKS_DIR — # see that file's comment for why. STACKS_DIR="/opt/nextchair/stacks" # Every business's compose.yaml (see src/lib/compose-template.ts) uses # this image tag — rebuild with `docker build -t nextchair-app:latest .` # from the repo root after a code update, then use each business's # "Update" button (or `docker compose up -d --force-recreate`) to pick it # up. NEXTCHAIR_IMAGE="nextchair-app:latest" # ── Optional ───────────────────────────────────────────────────────────── # Shown as a link in the dashboard header if set. DOCKGE_URL="http://your-vps-ip:5001"