- main → production, staging branch → staging, MR → ephemeral preview
- All env config (URLs, Appwrite credentials) injected from GitLab CI/CD
variables at build time — no .env files committed
- Preview environments auto-deploy per MR with URL {mr-iid}.{BASE_DOMAIN}
and are torn down when the MR is closed
- Update .gitignore to exclude .env.production/.staging/.preview
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>