6. Environment variables¶
"Environment variables" are settings the app reads at runtime — like who the admins are. Some are plain settings; one kind (secrets) is for sensitive values. You set these in the Cloudflare Pages dashboard so they apply to the live site.
The settings this app uses¶
| Name | Required? | What it does | Example |
|---|---|---|---|
ADMIN_EMAILS |
Yes | Comma-separated emails that are always admins. Bootstraps the very first admin. | robertbettencourt@totlcom.com |
APP_ENV |
Yes | Which environment this is. | production |
DEFAULT_SCHEDULE_WEEK_START |
Yes | The day weeks start on. Locked to Wednesday for TOTLCOM. | wednesday |
ONCALL_CHANGEOVER_WEEKDAY |
No | Weekday the home page rolls to the next on-call week (name or 0–6, Sun=0). Should match the week-start day. Defaults to Wednesday. |
wednesday |
ONCALL_CHANGEOVER_TIME |
No | Local 24-hour time (HH:MM) the roll happens. Defaults to 00:01. |
00:01 |
ONCALL_CHANGEOVER_TZ |
No | IANA timezone the weekday/time are read in. Defaults to America/Los_Angeles. |
America/Los_Angeles |
GEMINI_API_KEY |
No (secret) | Optional AI helpers. Leave unset to keep AI fully off. Core scheduling never uses it. | (unset) |
GEMINI_MODEL_ORDER |
No | Fallback order for the optional AI. Only matters if the key above is set. | gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite |
Changing when the schedule flips to the next week
The Schedule home page shows who's on call "now". It advances to the next
week at ONCALL_CHANGEOVER_TIME on ONCALL_CHANGEOVER_WEEKDAY, read in
ONCALL_CHANGEOVER_TZ — by default Wednesday 00:01 America/Los_Angeles.
Because it's evaluated in a real timezone, it no longer flips early in the
prior evening (which happened when "today" was read in UTC). Leave these unset
to keep the defaults; set them (and redeploy) to change the cutover.
These also appear in wrangler.toml
The non-secret ones (APP_ENV, DEFAULT_SCHEDULE_WEEK_START, ADMIN_EMAILS) are listed under [vars] in wrangler.toml, which is the default. Setting them in the dashboard too is the reliable way to be sure production has the right values — the dashboard wins. Set ADMIN_EMAILS in the dashboard to be safe.
Set them in the dashboard¶
- Open your Pages project → Settings → Variables and secrets (older dashboards: Environment variables).
- Under Production, click Add variable for each plain setting:
ADMIN_EMAILS= your real admin email(s), comma-separated, no spaces needed:you@totlcom.com,boss@totlcom.comAPP_ENV=productionDEFAULT_SCHEDULE_WEEK_START=wednesday
- Click Save.
Set ADMIN_EMAILS before relying on the app
If ADMIN_EMAILS is empty in production, no one is an admin, the Admin tab is unreachable, and you can't promote anyone. Always set your own address here first.
Secrets (only if you use optional AI)¶
Secrets are hidden values. The app's only optional secret is GEMINI_API_KEY, and you can skip it entirely — AI features are off by default and core scheduling never sends names or phone numbers anywhere.
If you do want the optional AI helpers, set the key as a secret (not a plain variable) either in the dashboard (mark it as a secret) or from the terminal:
It prompts you to paste the value, which is then encrypted.
Make changes take effect¶
Environment variable changes apply on the next deploy. Trigger one:
- the easy way — Pages project → Deployments → ⋯ on the latest → Retry deployment, or
- push any commit to GitHub.
Local development settings (not production)¶
For running the app on your own machine, settings live in local files that are never committed: .env (copied from .env.example) and .dev.vars. In particular, .dev.vars contains DEV_ADMIN=1, which makes your local machine act as an admin during development (production never sets this). See Deploying updates → Running locally.