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:
| App | Project Root Directory |
|---|---|
sites/net.alloydb.console | repository root (root vercel.json) |
apps/backend | apps/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.