Environment Variables
The platform requires several environment variables for database connections, authentication, external services, and storage backends.
Required Variables
Database
| Variable | Description | Example |
|---|---|---|
REMOTE_URL | MongoDB connection string | mongodb+srv://user:pass@cluster.mongodb.net/bahri_moc |
Used in: src/helpers/dbConnection.ts
const MONGODB_URI = process.env.REMOTE_URL;
Authentication
| Variable | Description | Example |
|---|---|---|
JWT_SECRET | Secret key for signing JWT tokens | A strong random string (64+ characters) |
Used in: src/middleware.ts (verification) and login API route (signing).
Application URL
| Variable | Description | Example |
|---|---|---|
NEXT_PUBLIC_APP_URL | Base URL of the deployed application | https://moc.bahri.sa |
Used for constructing links in emails and notifications. The NEXT_PUBLIC_ prefix makes it available in both server and client code.
Email Service
| Variable | Description | Example |
|---|---|---|
EMAIL_LAMBDA_URL | AWS Lambda endpoint for email dispatch | https://xxxxx.lambda-url.eu-north-1.on.aws/ |
Used in: src/helpers/send_email.ts
File Storage
| Variable | Description | Example |
|---|---|---|
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME | Cloudinary account cloud name | bahri-moc |
NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET | Cloudinary upload preset | moc_uploads |
NEXT_PUBLIC_S3_BUCKET_URL | AWS S3 bucket URL or Lambda endpoint | https://xxxxx.lambda-url.eu-north-1.on.aws/ |
Firebase (Real-Time Features)
| Variable | Description |
|---|---|
NEXT_PUBLIC_FIREBASE_API_KEY | Firebase API key |
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN | Firebase auth domain |
NEXT_PUBLIC_FIREBASE_PROJECT_ID | Firebase project ID |
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET | Firebase storage bucket |
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID | Firebase messaging sender ID |
NEXT_PUBLIC_FIREBASE_APP_ID | Firebase app ID |
Used in: src/lib/firebase.js
Setting Up Environment Variables
Local Development
Create a .env.local file in the project root:
REMOTE_URL=mongodb+srv://user:pass@cluster.mongodb.net/bahri_moc
JWT_SECRET=your-secret-key-here
NEXT_PUBLIC_APP_URL=http://localhost:3000
EMAIL_LAMBDA_URL=https://xxxxx.lambda-url.eu-north-1.on.aws/
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your-cloud-name
NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=your-preset
NEXT_PUBLIC_S3_BUCKET_URL=https://your-s3-endpoint
NEXT_PUBLIC_FIREBASE_API_KEY=your-firebase-key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project-id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-project.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=123456789
NEXT_PUBLIC_FIREBASE_APP_ID=1:123456789:web:abcdef
Vercel (Production)
- Go to your Vercel project dashboard
- Navigate to Settings → Environment Variables
- Add each variable listed above
- Choose the appropriate environments (Production, Preview, Development)
- Redeploy after adding or changing variables
Variable Naming Convention
| Prefix | Visibility | Usage |
|---|---|---|
NEXT_PUBLIC_ | Server + Client | Exposed to browser JavaScript |
| No prefix | Server only | Available only in API routes, middleware, and server components |
caution
Never add NEXT_PUBLIC_ prefix to sensitive values like JWT_SECRET, REMOTE_URL, or EMAIL_LAMBDA_URL. These must remain server-only.