Skip to main content

Environment Variables

Complete reference for all environment variables in ClientFlo. These values connect your instance to Firebase, Cloudinary, Resend, Google Calendar, and other services.

๐Ÿ’ก
Quick start: Copy .env.example to .env.local and fill in your values. The example file includes all required variables with placeholder descriptions.
cp .env.example .env.local

Firebase Configuration

These values come from your Firebase project. See the Firebase Setup Guide for detailed instructions.

VariableRequiredSource
NEXT_PUBLIC_FIREBASE_API_KEYYesFirebase Console โ†’ Project Settings โ†’ Web API Key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAINYesFirebase Console โ†’ Project Settings โ†’ Auth domain
NEXT_PUBLIC_FIREBASE_PROJECT_IDYesFirebase Console โ†’ Project Settings โ†’ Project ID
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKETYesFirebase Console โ†’ Project Settings โ†’ Storage bucket
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_IDYesFirebase Console โ†’ Project Settings โ†’ Sender ID
NEXT_PUBLIC_FIREBASE_APP_IDYesFirebase Console โ†’ Project Settings โ†’ App ID
FIREBASE_ADMIN_CLIENT_EMAILYesFirebase Console โ†’ Service Accounts โ†’ Private key โ†’ client_email
FIREBASE_ADMIN_PRIVATE_KEYYesFirebase Console โ†’ Service Accounts โ†’ Private key โ†’ private_key
# Firebase Client SDK (public ยท used in browser)
NEXT_PUBLIC_FIREBASE_API_KEY=AIzaSy...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-project.firebasestorage.app
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=123456789
NEXT_PUBLIC_FIREBASE_APP_ID=1:123456789:web:abc123...

# Firebase Admin SDK (server-only ยท keep secure)
FIREBASE_ADMIN_CLIENT_EMAIL=firebase-adminsdk@your-project.iam.gserviceaccount.com
FIREBASE_ADMIN_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n..."
โš ๏ธ
Private key formatting: The FIREBASE_ADMIN_PRIVATE_KEYcontains newlines. In .env.local, wrap the value in double quotes and replace actual newlines with \n:
FIREBASE_ADMIN_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC...\n-----END PRIVATE KEY-----\n"
In Vercel, paste the value directly (the UI handles newlines automatically).

Cloudinary Configuration

See the Cloudinary Setup Guide for detailed instructions.

VariableRequiredSource
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAMEYesCloudinary Console โ†’ Account Details
CLOUDINARY_CLOUD_NAMEYesSame as above
CLOUDINARY_API_KEYYesCloudinary Console โ†’ Account Details
CLOUDINARY_API_SECRETYesCloudinary Console โ†’ Account Details
CLOUDINARY_UPLOAD_PRESETNoCloudinary Settings โ†’ Upload โ†’ Upload presets
# Cloudinary
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=123456789012345
CLOUDINARY_API_SECRET=abc123def456
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloud_name
# CLOUDINARY_UPLOAD_PRESET=clientflo_uploads  # optional

Resend (Email) Configuration

See the Resend Setup Guide for detailed instructions.

VariableRequiredSource
RESEND_API_KEYYes (or BREVO_API_KEY)Resend Dashboard โ†’ API Keys
BREVO_API_KEYYes (or RESEND_API_KEY)Brevo Dashboard โ†’ API Keys
# Resend (primary email provider)
RESEND_API_KEY=re_xxxxxxxxxxxx

# OR Brevo (fallback)
# BREVO_API_KEY=your_brevo_api_key

Google Calendar Configuration

See the Google Calendar Setup Guide for detailed instructions.

VariableRequiredSource
GOOGLE_CLIENT_IDYesGoogle Cloud โ†’ Credentials โ†’ OAuth 2.0 Client ID
GOOGLE_CLIENT_SECRETYesGoogle Cloud โ†’ Credentials โ†’ OAuth 2.0 Client Secret
GOOGLE_REDIRECT_URIYesYour app URL + /api/auth/google/callback
# Google Calendar
GOOGLE_CLIENT_ID=123456789-xxxxxxxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxx
GOOGLE_REDIRECT_URI=https://crm.yourdomain.com/api/auth/google/callback

Sentry (Error Tracking)

Sentry captures runtime errors and performance data. It is optional โ€” omit SENTRY_DSN to disable error tracking entirely. See the Sentry Setup Guide for detailed instructions.

VariableRequiredSource
SENTRY_DSNNoSentry Dashboard โ†’ Project Settings โ†’ DSN
# Sentry (optional)
SENTRY_DSN=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxx.ingest.us.sentry.io/xxxxxx
โ„น๏ธ
Performance monitoring: Sentry also provides tracing for API route performance. Enable it in your sentry.client.config.ts and sentry.server.config.ts files.

General Configuration

VariableRequiredDescription
NEXT_PUBLIC_APP_URLYesYour app's public URL (e.g. https://crm.yourdomain.com) ยท used for OAuth redirects, invite links, and canonical URLs. No trailing slash.
NEXT_PUBLIC_GA_MEASUREMENT_IDNoGoogle Analytics 4 measurement ID (e.g. G-XXXXXXXXXX). Optional ยท omitting it disables analytics.
SENTRY_DSNNoSentry error tracking DSN. Optional ยท omitting it disables Sentry.
# General
NEXT_PUBLIC_APP_URL=https://crm.yourdomain.com
NEXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXXXXX  # optional
SENTRY_DSN=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxx.ingest.us.sentry.io/xxxxxx  # optional

Complete .env.local Example

# โ”€โ”€โ”€ General โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
NEXT_PUBLIC_APP_URL=https://crm.yourdomain.com

# โ”€โ”€โ”€ Firebase ยท Client SDK โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
NEXT_PUBLIC_FIREBASE_API_KEY=AIzaSy...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-project.firebasestorage.app
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=123456789
NEXT_PUBLIC_FIREBASE_APP_ID=1:123456789:web:abc123...

# โ”€โ”€โ”€ Firebase ยท Admin SDK (server-only) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
FIREBASE_ADMIN_CLIENT_EMAIL=firebase-adminsdk@your-project.iam.gserviceaccount.com
FIREBASE_ADMIN_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
"

# โ”€โ”€โ”€ Cloudinary โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=123456789012345
CLOUDINARY_API_SECRET=abc123def456
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloud_name

# โ”€โ”€โ”€ Email (Resend primary, Brevo fallback) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
RESEND_API_KEY=re_xxxxxxxxxxxx
# BREVO_API_KEY=your_brevo_api_key

# โ”€โ”€โ”€ Google Calendar โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
GOOGLE_CLIENT_ID=123456789-xxxxxxxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxx
GOOGLE_REDIRECT_URI=https://crm.yourdomain.com/api/auth/google/callback

# โ”€โ”€โ”€ Optional โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# NEXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXXXXX
# SENTRY_DSN=https://xxx@xxx.ingest.us.sentry.io/xxx

Deploying to Vercel

When deploying to Vercel, add all environment variables in the Vercel project dashboard:

  1. Go to your Vercel project โ†’ Settings โ†’ Environment Variables.
  2. Add each variable from the lists above.
  3. For FIREBASE_ADMIN_PRIVATE_KEY, paste the key value directly (Vercel handles newlines).
  4. Select the appropriate environments (Production, Preview, Development).
  5. Click Save.

Screenshot: Vercel Environment Variables

Show the Vercel Environment Variables settings page with several variables added (Firebase, Cloudinary, Resend, Google). Highlight the key-value pairs and environment selectors.

๐Ÿ’ก
After adding variables, redeploy your app from the Vercel dashboard or push a new commit to trigger a deployment. Environment variables take effect after the build completes.

Verification

After configuring all variables, start the development server:

npm run dev

If all variables are configured correctly:

  • The landing page loads without errors
  • Firebase Authentication works (sign up / sign in)
  • Firestore reads/writes succeed
  • Cloudinary uploads work in the Documents section
  • Emails are sent via Resend
  • Google Calendar OAuth flow completes

Ready to deploy? See the Deploy to Vercel guide.