Docs
Operate

Deploy

Deploy the admin portal and each site, and connect their external services.

Deploy

Vercel

Each app is its own Vercel project, deployed by the repository's GitHub Actions workflow:

AppProject Root Directory
sites/net.alloydb.consolerepository root (root vercel.json)
apps/backendapps/backend

Set the database, auth, and optional integration variables in every project, plus that app's own public URL (NEXT_PUBLIC_APP_URL). Point each site's domain at its project; the domain must match domain in the site's src/site.config.ts.

Stripe webhooks and scheduled billing work run on the admin portal: use https://<admin-domain>/api/webhooks/stripe as the Stripe webhook URL and sync Inngest with https://<admin-domain>/api/inngest.

Containers

The repository includes a Dockerfile that builds one app per image; choose it with --build-arg APP_DIR=… --build-arg APP_PACKAGE=… --build-arg PORT=… (the defaults build site A). Provide runtime environment variables to the container and expose the application port used by the deployment. Run the same database migration commands separately before serving traffic.

After deployment

On each site, check /status, /robots.txt, the OAuth discovery documents, and /mcp with the intended authentication state. On the admin portal, check that /login loads and that admin pages redirect there when signed out. Do not use live secrets in smoke-test logs or documentation examples.

On this page