# Copy this to .env.dev / .env.staging / .env.production and fill in real # values for that environment. The filled-in files are gitignored — never # commit them. Same code everywhere; only these values differ (see # design doc §01, Environments & deployment). # # CAVEAT for the API keys below (DB_PASSWORD/DB_ROOT_PASSWORD are exempt — # deploy.sh writes those into secrets// files that bypass this # entirely): docker compose passes these into containers via ${VAR} # interpolation, which will silently mangle a value containing `$` followed # by a letter (it tries to resolve it as another variable and blanks it out # if unset). Avoid `$` in these specific values, or double it ($$) if you # must use one — this bit us for real with a generated password once. # --- Site --- # (WP_ENVIRONMENT_TYPE is NOT set here — it's hardcoded per environment in # docker-compose.{dev,staging,production}.yml so it can't go stale.) SITE_DOMAIN=staging.example.com SITE_URL=https://staging.example.com SITE_TITLE="Bookstore (staging)" # --- WordPress admin bootstrap (used only on first install) --- WP_ADMIN_USER=admin WP_ADMIN_PASSWORD=changeme WP_ADMIN_EMAIL=admin@example.com # --- Database --- DB_NAME=bookstore DB_USER=bookstore DB_PASSWORD=changeme DB_ROOT_PASSWORD=changeme WP_TABLE_PREFIX=wp_ # --- Backups (deploy/backup.sh) --- BACKUP_DIR=./backups BACKUP_REMOTE= BACKUP_RETENTION_DAYS=14 # --- Supplier adapters (design doc §04) --- # staging: gutenberg_test production: booksrun,ingram ACTIVE_SUPPLIER_ADAPTERS=gutenberg_test BOOKSRUN_API_KEY= INGRAM_API_KEY= INGRAM_ACCOUNT_ID= # --- Payments (Helcim) --- HELCIM_API_TOKEN= HELCIM_ACCOUNT_ID= # --- Marketing --- MAILERLITE_API_KEY= # --- Hardcover (AO3-style tag browsing — genre/mood/content-warning/tag sync) --- # Get a token: hardcover.app account settings -> Hardcover API -> New API Key HARDCOVER_API_TOKEN=