Lee Kong Si · 李氏总会

Deployment

Approved Lee Kong Si production and staging hosts, data placement and cutover controls.

The approved production topology has six purpose hosts; production cutover is still pending. Keep these names exact in DNS, provider settings, @vigor/env, CORS, Better Auth trusted origins and acceptance checks.

Approved hosts

RoleProductionStaging
Marketinghttps://www.lee-kong-si.cenvora.devhttps://www.lee-kong-si-test.cenvora.dev
Apphttps://app.lee-kong-si.cenvora.devhttps://app.lee-kong-si-test.cenvora.dev
Platformhttps://platform.lee-kong-si.cenvora.devhttps://platform.lee-kong-si-test.cenvora.dev
Partnerhttps://partner.lee-kong-si.cenvora.devhttps://partner.lee-kong-si-test.cenvora.dev
APIhttps://api.lee-kong-si.cenvora.devhttps://api.lee-kong-si-test.cenvora.dev
Docshttps://docs.lee-kong-si.cenvora.devhttps://docs.lee-kong-si-test.cenvora.dev

Production uses APP_ENV=production and PROJECT_NAME=lee-kong-si. Staging uses APP_ENV=staging and PROJECT_NAME=lee-kong-si-test; staging is project-scoped under cenvora.dev. Do not introduce an apex or admin host into this topology.

The production API origin is exactly https://api.lee-kong-si.cenvora.dev. The production session cookie domain is .lee-kong-si.cenvora.dev; staging uses .lee-kong-si-test.cenvora.dev. The API origin, trusted origins, frontend environment values and cookie domain must be changed together during a cutover. A stale BETTER_AUTH_URL keeps authentication on the old API host.

Singapore placement

Vercel functions and Vercel Blob stores use sin1. Railway API and database resources use the Singapore region asia-southeast1-eqsg3a. Staging and production have separate databases, Blob stores, authentication secrets and provider credentials. The staging Blob store is private.

Provider routing and CDN edges can be global even when compute and primary data are in Singapore. Verify each resource's effective region after provisioning rather than inferring it from a project default.

Railway configuration

Setting railwayConfigFile is rejected by the current Railway API, which reports the old Config as Code format as deprecated. Configure the API service directly in Railway: Singapore region, the approved replica setting, health check, start command and environment variables. Treat direct Railway settings as the source of truth and verify them after every redeploy.

Required API values include DATABASE_URL, a staging-only BETTER_AUTH_SECRET, APP_ENV=staging, PROJECT_NAME=lee-kong-si-test, ROOT_DOMAIN=cenvora.dev, and the exact staging BETTER_AUTH_URL when an override is needed. Do not reuse production data or secrets.

Cutover and recovery

Before a cutover, take and verify a database backup, rehearse the migration and restore path, record the deployed commit, and confirm the API health/version endpoints. Apply reviewed database migrations manually through the migration runner; do not rely on an automatic deploy hook to mutate a live database. Repeat parity checks for Better Auth IDs, association member IDs, relationships and photo metadata after restore.

After DNS and TLS are configured for all enabled exact hosts (marketing remains deferred), verify CORS, the cookie domain, fresh email sign-in, pending application status, approval, session revocation, private photo access and the Resend webhook route. Production promotion requires the completed cutover evidence in docs/migration/CUTOVER.md; the rehearsal record is docs/migration/REHEARSAL.md.

The docs site does not provision providers, change DNS or run live migrations. The deployment operator owns those actions and must keep staging and production resources separate.

On this page