Complete reference for all environment variables in ignitionstack.pro. All integrations (Supabase, Stripe, analytics, Resend, etc.) are controlled via .env variables.
cp .env.example .envOpen .env and fill in your values:
# Required
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
AUTH_SECRET=your-auth-secretnpm run devNever commit .env to Git! Add it to .gitignore and use .env.example as a template.
| Variable | Public | Description |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Yes | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Yes | Supabase anonymous key (respects RLS) |
SUPABASE_SERVICE_ROLE_KEY | No | Service role key (bypasses RLS) |
# Get from: https://app.supabase.com/project/_/settings/api
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...Never expose SUPABASE_SERVICE_ROLE_KEY in client-side code. It bypasses Row Level Security!
| Variable | Public | Description |
|---|---|---|
AUTH_SECRET | No | NextAuth secret key |
AUTH_GOOGLE_ID | No | Google OAuth client ID |
AUTH_GOOGLE_SECRET | No | Google OAuth client secret |
ADMIN_AUTH_SECRET | No | Admin session encryption secret |
# Generate secret: openssl rand -base64 32
AUTH_SECRET=your-nextauth-secret-key
# Google OAuth: https://console.cloud.google.com/apis/credentials
AUTH_GOOGLE_ID=your-google-oauth-client-id
AUTH_GOOGLE_SECRET=your-google-oauth-client-secret
# Admin session encryption
ADMIN_AUTH_SECRET=your-admin-secret-key| Variable | Public | Description |
|---|---|---|
STRIPE_SECRET_KEY | No | Stripe secret API key |
NEXT_PUBLIC_STRIPE_PUBLIC_KEY | Yes | Stripe publishable key |
STRIPE_WEBHOOK_SECRET_KEY | No | Webhook signing secret |
STRIPE_PRODUCT_ID | No | Your Stripe product ID |
NEXT_PUBLIC_STRIPE_PRICE_ID_LIFETIME | Yes | Lifetime plan price ID |
NEXT_PUBLIC_STRIPE_PRICE_ID_MONTHLY | Yes | Monthly plan price ID |
STRIPE_CLIENT_ID | No | Stripe Connect client ID |
# Get from: https://dashboard.stripe.com/apikeys
STRIPE_SECRET_KEY=sk_test_...
NEXT_PUBLIC_STRIPE_PUBLIC_KEY=pk_test_...
# Product & Prices
STRIPE_PRODUCT_ID=prod_...
NEXT_PUBLIC_STRIPE_PRICE_ID_LIFETIME=price_...
NEXT_PUBLIC_STRIPE_PRICE_ID_MONTHLY=price_...
# Webhook: https://dashboard.stripe.com/webhooks
STRIPE_WEBHOOK_SECRET_KEY=whsec_...
STRIPE_CLIENT_ID=ca_...Use sk_test_ and pk_test_ keys for development. Switch to sk_live_ and pk_live_ for production.
| Variable | Public | Description |
|---|---|---|
RESEND_API_KEY | No | Resend API key |
RESEND_API_EMAIL_FROM | No | Sender email address |
RESEND_WEBHOOK_SECRET | No | Webhook verification secret |
CONTACT_RECEIVER_EMAIL | No | Contact form recipient |
# Get from: https://resend.com/
RESEND_API_KEY=re_...
RESEND_API_EMAIL_FROM=noreply@yourdomain.com
RESEND_WEBHOOK_SECRET=your-webhook-secret
CONTACT_RECEIVER_EMAIL=contact@yourdomain.com| Variable | Public | Description |
|---|---|---|
NEXT_PUBLIC_GA_ID | Yes | Google Analytics 4 ID |
AUTH_MIXPANEL_TOKEN | No | Mixpanel project token |
# Google Analytics: https://analytics.google.com/
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX
# Mixpanel: https://mixpanel.com/
AUTH_MIXPANEL_TOKEN=your-mixpanel-token| Variable | Public | Description |
|---|---|---|
NEXT_PUBLIC_CONTACT_WHATSAPP_URL | Yes | WhatsApp chat URL |
NEXT_PUBLIC_CONTACT_EMAIL | Yes | Public contact email |
NEXT_PUBLIC_CONTACT_CALENDLY_URL | Yes | Calendly booking URL |
NEXT_PUBLIC_CONTACT_WHATSAPP_URL=https://wa.me/your_phone_number
NEXT_PUBLIC_CONTACT_EMAIL=contact@yourdomain.com
NEXT_PUBLIC_CONTACT_CALENDLY_URL=https://calendly.com/your_username| Variable | Public | Description |
|---|---|---|
AI_ENCRYPTION_KEY | No | Key for encrypting user API keys |
OLLAMA_BASE_URL | No | Ollama server URL |
OPENAI_API_KEY | No | OpenAI API key |
GOOGLE_AI_API_KEY | No | Google AI (Gemini) key |
ANTHROPIC_API_KEY | No | Anthropic (Claude) key |
NEXT_PUBLIC_ENABLE_AI_CHAT | Yes | Enable AI chat in UI |
# Encryption (REQUIRED): openssl rand -hex 32
AI_ENCRYPTION_KEY=your_encryption_key_min_32_chars
# AI Providers (optional - users can provide their own)
OPENAI_API_KEY=sk-...
GOOGLE_AI_API_KEY=...
ANTHROPIC_API_KEY=sk-ant-...
# Ollama (local/remote)
OLLAMA_BASE_URL=http://localhost:11434
# Feature flag
NEXT_PUBLIC_ENABLE_AI_CHAT=true| Variable | Default | Description |
|---|---|---|
ENABLE_AI_RAG | true | Document upload & vector search |
ENABLE_AI_FUNCTION_CALLING | true | Tools/function calling |
ENABLE_AI_MULTIMODAL | true | Image/PDF analysis |
ENABLE_AI_BILLING | true | Credits/billing system |
ENABLE_AI_MODERATION | true | Content moderation |
ENABLE_AI_PII_DETECTION | true | PII detection & masking |
ENABLE_AI_RAG=true
ENABLE_AI_FUNCTION_CALLING=true
ENABLE_AI_MULTIMODAL=true
ENABLE_AI_BILLING=true
ENABLE_AI_MODERATION=true
ENABLE_AI_PII_DETECTION=true| Variable | Default | Description |
|---|---|---|
AI_DEFAULT_TIMEOUT_MS | 30000 | Request timeout (ms) |
AI_CIRCUIT_BREAKER_THRESHOLD | 5 | Failures before circuit opens |
AI_DEFAULT_TIMEOUT_MS=30000
AI_CIRCUIT_BREAKER_THRESHOLD=5| File | Purpose |
|---|---|
.env | Local development |
.env.example | Template (commit this) |
.env.production | Production overrides |
.env.test | Test environment |
// In Server Components, Server Actions, API Routes
const key = process.env.SUPABASE_SERVICE_ROLE_KEY// Only NEXT_PUBLIC_ prefixed variables
const url = process.env.NEXT_PUBLIC_SUPABASE_URLOnly variables prefixed with NEXT_PUBLIC_ are exposed to the browser. Never prefix sensitive keys with NEXT_PUBLIC_.
ignitionstack.pro validates environment variables at build time:
// lib/env.ts
import { z } from 'zod'
const envSchema = z.object({
NEXT_PUBLIC_SUPABASE_URL: z.string().url(),
NEXT_PUBLIC_SUPABASE_ANON_KEY: z.string().min(1),
SUPABASE_SERVICE_ROLE_KEY: z.string().min(1),
AUTH_SECRET: z.string().min(32),
})
export const env = envSchema.parse(process.env)Add environment variables in Project Settings > Environment Variables.
env:
NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }}# Pass at runtime
docker run -e SUPABASE_SERVICE_ROLE_KEY=xxx myapp
# Or use .env file
docker run --env-file .env.production myapp.env filesadmin_users table in Supabase