Environment Variables
Complete reference for all environment variables in ClientFlo. These values connect your instance to Firebase, Cloudinary, Resend, Google Calendar, and other services.
.env.example to .env.local and fill in your values. The example file includes all required variables with placeholder descriptions.cp .env.example .env.localFirebase Configuration
These values come from your Firebase project. See the Firebase Setup Guide for detailed instructions.
| Variable | Required | Source |
|---|---|---|
NEXT_PUBLIC_FIREBASE_API_KEY | Yes | Firebase Console โ Project Settings โ Web API Key |
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN | Yes | Firebase Console โ Project Settings โ Auth domain |
NEXT_PUBLIC_FIREBASE_PROJECT_ID | Yes | Firebase Console โ Project Settings โ Project ID |
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET | Yes | Firebase Console โ Project Settings โ Storage bucket |
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID | Yes | Firebase Console โ Project Settings โ Sender ID |
NEXT_PUBLIC_FIREBASE_APP_ID | Yes | Firebase Console โ Project Settings โ App ID |
FIREBASE_ADMIN_CLIENT_EMAIL | Yes | Firebase Console โ Service Accounts โ Private key โ client_email |
FIREBASE_ADMIN_PRIVATE_KEY | Yes | Firebase 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..."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.
| Variable | Required | Source |
|---|---|---|
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME | Yes | Cloudinary Console โ Account Details |
CLOUDINARY_CLOUD_NAME | Yes | Same as above |
CLOUDINARY_API_KEY | Yes | Cloudinary Console โ Account Details |
CLOUDINARY_API_SECRET | Yes | Cloudinary Console โ Account Details |
CLOUDINARY_UPLOAD_PRESET | No | Cloudinary 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 # optionalResend (Email) Configuration
See the Resend Setup Guide for detailed instructions.
| Variable | Required | Source |
|---|---|---|
RESEND_API_KEY | Yes (or BREVO_API_KEY) | Resend Dashboard โ API Keys |
BREVO_API_KEY | Yes (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_keyGoogle Calendar Configuration
See the Google Calendar Setup Guide for detailed instructions.
| Variable | Required | Source |
|---|---|---|
GOOGLE_CLIENT_ID | Yes | Google Cloud โ Credentials โ OAuth 2.0 Client ID |
GOOGLE_CLIENT_SECRET | Yes | Google Cloud โ Credentials โ OAuth 2.0 Client Secret |
GOOGLE_REDIRECT_URI | Yes | Your 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/callbackSentry (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.
| Variable | Required | Source |
|---|---|---|
SENTRY_DSN | No | Sentry Dashboard โ Project Settings โ DSN |
# Sentry (optional)
SENTRY_DSN=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxx.ingest.us.sentry.io/xxxxxxsentry.client.config.ts and sentry.server.config.ts files.General Configuration
| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_APP_URL | Yes | Your 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_ID | No | Google Analytics 4 measurement ID (e.g. G-XXXXXXXXXX). Optional ยท omitting it disables analytics. |
SENTRY_DSN | No | Sentry 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 # optionalComplete .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/xxxDeploying to Vercel
When deploying to Vercel, add all environment variables in the Vercel project dashboard:
- Go to your Vercel project โ Settings โ Environment Variables.
- Add each variable from the lists above.
- For
FIREBASE_ADMIN_PRIVATE_KEY, paste the key value directly (Vercel handles newlines). - Select the appropriate environments (Production, Preview, Development).
- 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.
Verification
After configuring all variables, start the development server:
npm run devIf 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.