# DEV environment for linumiq-invoice (custom app installed on linumiq-dev.myshopify.com). # Copy to `.env.dev` on the server (in /docker/linumiq-invoice/dev/) and fill in real values. # NEVER commit the real file. # --- Shopify app credentials --- # Partner Dashboard → Apps → linumiq-invoice-dev → API credentials. SHOPIFY_API_KEY=fbc263e6cc28e8de031878d2a0f17444 SHOPIFY_API_SECRET=REPLACE_ME # Public URL Shopify uses for OAuth, webhooks and admin embedding. Must match shopify.app.dev.toml. SHOPIFY_APP_URL=https://invoice-app-dev.linumiq.com # Single-merchant lock-in: only this myshopify domain may install the app. ALLOWED_SHOP=linumiq-dev.myshopify.com # Must match `scopes` in shopify.app.dev.toml. SCOPES=read_orders,write_orders,read_all_orders,read_customers,read_companies,read_files,write_files # --- Secrets at rest --- # Field-level encryption key for secrets stored in the DB (SMTP password, # Shopify session access/refresh tokens). Must be base64 of exactly 32 bytes. # Generate with: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" DATA_ENCRYPTION_KEY=REPLACE_ME_BASE64_32_BYTES # Dedicated HMAC key for signing public GiroCode URLs. base64 of 32 bytes. # If unset, the app falls back to SHOPIFY_API_SECRET (kept for backward compat). # Generate with: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" GIROCODE_SIGNING_KEY=REPLACE_ME_BASE64_32_BYTES # --- Runtime --- NODE_ENV=production PORT=3000 # DATABASE_URL is set in docker-compose.dev.yml (file:/data/prod.sqlite on the bind mount). # --- Email (optional) --- # Archival BCC for every invoice email. Off by default for privacy/GDPR. # Set to a single address or a comma-separated list to opt in. # INVOICE_BCC=archive@example.com