The frontends and the API deploy independently. Nothing in the codebase ties you to a specific host: the frontends are standard Next.js and Vite builds, and the API ships as a container image.
Frontends
Each app builds on its own:
npm run build:marketing-site
npm run build:web-app
npm run build:admin-panel
The marketing site needs NEXT_PUBLIC_SITE_URL set to the canonical origin. It is not read
from the request host on purpose: reading headers would force every route to render
dynamically, and canonical tags, hreflang and the sitemap would silently turn relative.
API
The API builds into a container image and expects a PostgreSQL connection string plus the
provider credentials. Run migrations against the target database before pointing traffic at a
new image, and keep CORS_ALLOWED_ORIGINS in sync with the frontend domains. A mismatch
fails the browser preflight, not the deploy, so it surfaces only in production.
Environments
docs/env-inventory.md in the package lists every variable, which app reads it, and
whether it is required. npm run validate:frontend-env checks the frontend half of that list
before a build.