# --- Persistence ------------------------------------------------------- # Path to the sqlite3 database file. On Railway, point this at a mounted # persistent volume (e.g. /data/nl_to_cad.db) or job/key history is lost # on every redeploy. DB_PATH=nl_to_cad.db # --- Cloudflare R2 (optional but required for production) -------------- # If unset, generated STEP/STL files fall back to being served from local # disk - fine for local dev, NOT durable on Railway (ephemeral filesystem). R2_ACCOUNT_ID= R2_ACCESS_KEY_ID= R2_SECRET_ACCESS_KEY= R2_BUCKET_NAME= # Set this if the bucket is public (custom domain or r2.dev URL) for # permanent links. If unset, falls back to presigned URLs. R2_PUBLIC_URL= R2_PRESIGNED_EXPIRY_SECONDS=604800 # --- DeepSeek (optional - only needed server-side if you want to avoid --- # --- asking every caller to bring their own key) ------------------------ # The web UI and API also accept a per-request api_key field, so this is # optional. Current model names (verify against api-docs.deepseek.com): # deepseek-v4-flash, deepseek-v4-pro DEEPSEEK_API_KEY= # --- BOT Chain payments (botchain_pay.py, /mcp-bot) --------------------- # Native-BOT pay-to-treasury flow - see botchain_pay.py's module # docstring for why this exists instead of an SDK. TREASURY_ADDRESS is # required for /api/keys/generate, /generate, /export/*, and both # a2mcp_botchain tools to work at all - unset, they all fail closed with # a 402 "TREASURY_ADDRESS is not configured" rather than silently # accepting free calls. BOTCHAIN_ENVIRONMENT=testnet TREASURY_ADDRESS= # Prices and RPC endpoints have working defaults in config.py (testnet: # chain 968, rpc.bohr.life; mainnet: chain 677, rpc.botchain.ai - the # mainnet values are corroborated by ShieldGuard's own live # packages/backend/.env.example, not guessed). Override here only if # those change. # BOTCHAIN_KEY_ISSUE_PRICE_BOT=5.0 # BOTCHAIN_PER_CALL_PRICE_BOT=0.2 # --- On-chain design provenance (contracts/DesignRegistry.sol) -------- # DESIGN_REGISTRY_ADDRESS is NOT something you set upfront - run # scripts/deploy_design_registry.py first, it prints the address to # paste here after deployment. Leave it unset until then; anchoring is # silently skipped when it's unset, exports still work fine without it. DESIGN_REGISTRY_ADDRESS= # A wallet the SERVER controls, separate from anything a user signs. # Needs its own small BOT balance for gas (see the deploy script's # docstring). Never the same purpose as TREASURY_ADDRESS - that one # only receives, this one signs and spends on gas. ANCHOR_WALLET_PRIVATE_KEY=