This page maps every environment and every credential the system uses. It lists
each credential by name, purpose, and location only — no secret,
service-role key, or raw VITE_ value appears here.
App Production Staging Supabase schema Marketing site sitecrate.castaging.sitecrate.capublic / stagingAdmin admin.sitecrate.castaging-admin.sitecrate.capublic / stagingClient sites {slug}.sitecrate.ca → real domain— (no DB writes)
Both staging sites deploy automatically on every PR push, after lint + build
pass. Staging is routed to the isolated staging schema purely by setting
VITE_SUPABASE_SCHEMA=staging; production omits that var and falls back to
'public'.
Resource Detail Host Netlify (separate sites for prod / staging / each client) DNS Cloudflare — wildcard *.sitecrate.ca CNAME → apex-loadbalancer.netlify.com SSL Auto-provisioned by Netlify per subdomain
Concrete Netlify site IDs are recorded in each repo’s CLAUDE.md and visible
in the Netlify dashboard; they are operational identifiers, not reproduced on
this public page.
Variable Scope Purpose Lives in VITE_SUPABASE_URLclient (bundled) Supabase project URL Netlify env + GitHub secret + local .env VITE_SUPABASE_ANON_KEYclient (bundled) Supabase anon key — intentionally public Netlify env + GitHub secret + local .env VITE_SUPABASE_SCHEMAclient (bundled) staging on staging only; unset in prodGitHub secret (staging job) / Netlify staging env SUPABASE_SERVICE_ROLE_KEYserver only send-email resolves projects by tokenNetlify function env RESEND_API_KEYserver only Resend transactional email Netlify function env + local .env
Variable Scope Purpose Lives in VITE_SUPABASE_URLclient Supabase project URL Netlify env + GitHub secret + local .env VITE_SUPABASE_ANON_KEYclient Supabase anon key Netlify env + GitHub secret + local .env VITE_SUPABASE_SCHEMAclient staging on staging onlyGitHub secret (staging) / Netlify staging env SUPABASE_SERVICE_ROLE_KEYserver only admin-users.js user CRUDNetlify function env + GitHub secret GOOGLE_CLIENT_IDserver only ga-report.js GA4 OAuthNetlify function env + local .env GOOGLE_CLIENT_SECRETserver only GA4 OAuth Netlify function env + local .env GOOGLE_REFRESH_TOKENserver only GA4 OAuth Netlify function env + local .env GA_PROPERTY_IDserver only GA4 property for reporting Netlify function env + local .env RESEND_API_KEYserver only email-log.js reads ResendNetlify function env + local .env
The VITE_ rule
Anything without a VITE_ prefix is server-side only and must never gain
one. The VITE_ prefix tells Vite to inline the value into the public client
bundle. Prefixing a service-role key, Resend key, or Google secret would leak it
to every visitor. The anon key is the only sensitive-looking value that is
meant to be public — RLS + capability RPCs make that safe.
Location Holds Local .env (gitignored) Dev copies of all vars for the repo ~/.supabase/access-tokenSupabase Management API token (for ad-hoc SQL) GitHub → repo Secrets CI/CD build + deploy vars Netlify → site env Runtime + function env per site Netlify accounts API How staging env vars are set (not via the dashboard)
One project (ref recorded in CLAUDE.md), region East US / North Virginia, two
PostgREST-exposed schemas: public and staging. Full schema and the security
model: Data model · RPCs & RLS .