Store sensitive variables in
.env.local (never committed to git). Use .env.example as a template.Core Authentication & Origin
Required variables for Supabase authentication and CSRF protection.Supabase project URL shared by browser, server components, and service-role clients.Example:
https://xxxxx.supabase.coPublic anon key for Supabase authentication. Safe to expose in browser.Location: Supabase Dashboard → Settings → API → Project API keys
Service role key with elevated privileges. Needed by server routes (
/api/waitlist, /api/admin/*).⚠️ Keep server-side only - Never expose to browserLocation: Supabase Dashboard → Settings → API → Service role keyCanonical origin used for CSRF enforcement (
lib/security/origin.ts) and activation links.Recommended for production deployments to ensure magic links and same-origin checks work correctly.Example: https://umbra.concrete-security.comHMAC key for signed form tokens used by waitlist and feedback forms. Required for
/api/form-token.Generate with: openssl rand -hex 32Tokens expire in 10 minutes (configured in lib/security/form-token.ts).Confidential Provider Defaults
Optional defaults shown in the provider settings card. Users can override these in the UI.Default provider base URL shown in the confidential workspace provider settings.Example:
https://vllm.example.com/v1Default model identifier shown in provider settings.Example:
meta-llama/Llama-3.1-70B-InstructFriendly provider name used in UI badges and labels.Example:
Concrete Confidential vLLMOverrides the default Umbra system prompt defined in
lib/system-prompt.ts without editing the file.Useful for customizing the AI persona per deployment.Default
max_tokens parameter for model requests.Default
temperature parameter for model requests.RA-TLS & Attestation
Configuration for Remote Attestation TLS connections to TEE-hosted LLMs.WebSocket proxy URL for RA-TLS connections. The proxy bridges WebSocket to TCP for the TEE.Required for live attestation - Without this, RA-TLS connections will failExample:
wss://proxy.example.comSecurity: The proxy enforces an allowlist (RATLS_PROXY_ALLOWLIST) to prevent SSRF. All targets must be explicitly authorized.When
true, skips real attestation verification. Used by Playwright E2E tests.⚠️ Never enable in production - This bypasses critical security verificationUsage: NEXT_PUBLIC_ATTESTATION_TEST_MODE=true pnpm test:e2eEmail & Feedback
Configuration for Resend email delivery.API key for Resend email service. Used by
lib/email/resend.ts.Required to send mail - Without this, emails are skipped (logged in development)Location: Resend DashboardEmail sender address for waitlist activation and feedback emails.Must be a verified domain in Resend.
Destination inbox for feedback submissions.Example:
[email protected]Runtime Toggles
Feature flags for runtime behavior.When
true, anonymous visitors are limited to a single confidential workspace session before sign-in is required.Authenticated users (with member or admin role) are exempt from this limit.Environment Variable Groups
Minimal Development Setup
Minimum variables needed for local development:Full Production Setup
Complete configuration for production deployment:Deployment Checklist
When deploying to production:- ✅ Set all required environment variables in hosting provider
- ✅ Ensure
NEXT_PUBLIC_APP_URLmatches production origin for CSRF checks - ✅ Confirm RA-TLS proxy is accessible and TEE target is in allowlist
- ✅ Populate provider defaults so first-time visitors see sensible values
- ✅ Verify Resend domain is configured and
RESEND_FROM_EMAILis valid - ✅ Test magic link emails arrive at correct callback URL
- ✅ Never enable
NEXT_PUBLIC_ATTESTATION_TEST_MODEin production
Security Notes
- Never commit
.env.localto version control - Service role key should only be available to server-side code
- Form token secret should be cryptographically random (min 32 bytes)
- Reset
.env.localwhen switching between staging/prod to keep Playwright and Supabase sessions deterministic
