Skip to content
RolloutDocs
NL
4Go-live, step by step· step 4 of 7

Hosting on Vercel

The app runs on Vercel, in Frankfurt. You create a project from the repository, fill in a handful of environment variables and deploy. Hardly any secrets go in: the anon key is public and Microsoft trusts Vercel through federation.

Create the project

  1. New project from the repository

    Vercel → Add New → Project → choose the repository, branch main. Leave Root Directory empty (the app is in the root folder).

  2. Frankfurt region

    Settings → Functions → Function Region: fra1 (Frankfurt). This is also in vercel.json.

  3. Federation on

    Settings → Security → Secure backend access with OIDC federation: on, mode Team. You already did this at step 3.

  4. Pro plan

    Hobby isn't for commercial use. Pro also gives you rollback and logs.

Environment variables

Settings → Environment Variables. Set them for Production only, and mark real secrets as Sensitive (then nobody can read them back later).

Vercel → project → Settings → Environment Variables
EnvironmentsProductionPreviewDevelopment
No variables saved yet

The full list:

VariableValueSecret?
DATA_MODEliveno
NEXT_PUBLIC_SUPABASE_URLProject URL from step 1no
NEXT_PUBLIC_SUPABASE_ANON_KEYanon key from step 1no (public by design)
APP_URLhttps://<your-domain>, no trailing slashno
TENANT_MODEgraphno
GRAPH_CLIENT_IDapplication ID of Rollout – Readinessno
GRAPH_FEDERATIONvercelno
GRAPH_ALLOWED_TENANTSyour clients' tenant IDs, comma-separatedno
ROLLOUT_LICENSEyour licenseno, but personal
ROLLOUT_GATEWAY_SECRETsee step 5yes: Sensitive
HEALTH_DETAILSminimalno
SECURITY_CONTACTe.g. security@yourmsp.comno

Optional, for email from your own mailbox: MAIL_SENDER and MAIL_TENANT_ID.

NEXT_PUBLIC_ is baked in

Variables starting with NEXT_PUBLIC_ are included in the browser code at build time. After a change you need to redeploy. So never put anything secret in a NEXT_PUBLIC_ variable.

Check before deploying

Rollout has a script that reviews your configuration without showing values. Put the values in a local file that never goes into git (.env* is already in .gitignore). The output is in Dutch:

Terminal
$ node --env-file=.env.production.local scripts/check-env.mjs
OK DATA_MODE=live
OK NEXT_PUBLIC_SUPABASE_URL is https
OK NEXT_PUBLIC_SUPABASE_ANON_KEY gezet
OK ROLLOUT_GATEWAY_SECRET gezet (server-poort naar de database)
OK APP_URL is een https-adres zonder pad
OK GRAPH_CLIENT_ID is een GUID
OK Graph zonder geheimen: GRAPH_FEDERATION=vercel
OK GRAPH_ALLOWED_TENANTS: 3 tenant(s)
Configuratie in orde.

If you see FOUT (error), don't deploy: the script says what's wrong. Then: Deployments → Redeploy (or push to main).

Check after deploying

Open https://<your-domain>/api/ready. You only see statuses, never addresses or error text:

 

"gateway": "not-enforced" is exactly right at this point: you turn on the server gateway in the next step.

Hosting on Vercel · Rollout Docs