# Environment Variables Configuration

This document provides a comprehensive guide to all environment variables required for the Prmbr - AI Prompt Studio application.

## 📋 Table of Contents

- [Database Configuration](#database-configuration)
- [Authentication (Supabase)](#authentication-supabase)
- [File Storage (Cloudflare R2)](#file-storage-cloudflare-r2)
- [Payment Processing (Stripe)](#payment-processing-stripe)
- [AI Model APIs](#ai-model-apis)
- [Application Settings](#application-settings)
- [Development vs Production](#development-vs-production)
- [Complete Configuration Examples](#complete-configuration-examples)

## 🗄️ Database Configuration

### Required Variables

| Variable | Description | Example |
|----------|-------------|---------|
| `DATABASE_URL` | PostgreSQL connection string via Supabase/Prisma | `postgresql://username:password@localhost:5432/prmbr` |

### Development Setup
```bash
# Local PostgreSQL
DATABASE_URL="postgresql://username:password@localhost:5432/prmbr?schema=public"

# Supabase (Recommended)
DATABASE_URL="postgresql://postgres:[PASSWORD]@[PROJECT_REF].supabase.co:5432/postgres"

# Prisma Accelerate (For Cloudflare Workers)
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=your_api_key"
```

## 🔐 Authentication (Supabase)

### Required Variables

| Variable | Description | Where to Find |
|----------|-------------|---------------|
| `NEXT_PUBLIC_SUPABASE_URL` | Supabase project URL | Project Settings > API |
| `NEXT_PUBLIC_SUPABASE_ANON_KEY` | Supabase anonymous key | Project Settings > API |
| `SUPABASE_SERVICE_ROLE_KEY` | Supabase service role key | Project Settings > API |

### Configuration
```bash
# Get these from your Supabase project dashboard
NEXT_PUBLIC_SUPABASE_URL="https://your-project-id.supabase.co"
NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
```

### Setup Instructions
1. Create a Supabase project at [supabase.com](https://supabase.com)
2. Go to Project Settings > API
3. Copy the Project URL and API keys
4. Enable Google OAuth in Authentication > Providers (optional)

## 📁 File Storage (Cloudflare R2)

### Required Variables

| Variable | Description | Where to Find |
|----------|-------------|---------------|
| `R2_ACCESS_KEY_ID` | R2 access key ID | R2 > Manage R2 API tokens |
| `R2_SECRET_ACCESS_KEY` | R2 secret access key | R2 > Manage R2 API tokens |
| `R2_ENDPOINT` | R2 S3-compatible endpoint | R2 > Settings |
| `R2_BUCKET_NAME` | R2 bucket name | R2 > Buckets |

### Configuration
```bash
# Cloudflare R2 Configuration
R2_ACCESS_KEY_ID="f1234567890abcdef1234567890abcde"
R2_SECRET_ACCESS_KEY="abc123def456ghi789jkl012mno345pqr678stu901"
R2_ENDPOINT="https://1234567890abcdef.r2.cloudflarestorage.com"
R2_BUCKET_NAME="prmbr-storage"
```

### Setup Instructions
1. Go to Cloudflare Dashboard > R2 Object Storage
2. Create a new R2 bucket
3. Generate R2 API tokens with read/write permissions
4. Note the endpoint URL from bucket settings

## 💳 Payment Processing (Stripe)

### Required Variables

| Variable | Description | Where to Find |
|----------|-------------|---------------|
| `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` | Stripe publishable key | Stripe Dashboard > API keys |
| `STRIPE_SECRET_KEY` | Stripe secret key | Stripe Dashboard > API keys |
| `STRIPE_WEBHOOK_SECRET` | Stripe webhook endpoint secret | Stripe Dashboard > Webhooks |
| `NEXT_PUBLIC_STRIPE_PRO_PRICE_ID` | Stripe price ID for Pro plan | Stripe Dashboard > Products |

### Configuration
```bash
# Stripe Configuration
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_live_51234567890abcdefghijklmnopqrstuvwxyz"
STRIPE_SECRET_KEY="sk_live_51234567890abcdefghijklmnopqrstuvwxyz"
STRIPE_WEBHOOK_SECRET="whsec_1234567890abcdefghijklmnopqrstuvwxyz"
NEXT_PUBLIC_STRIPE_PRO_PRICE_ID="price_1234567890abcdefghijk"
```

### Setup Instructions
1. Create a Stripe account at [stripe.com](https://stripe.com)
2. Go to Dashboard > API keys and copy the keys
3. Create a webhook endpoint pointing to `/api/webhooks/stripe`
4. Create products and pricing plans in Stripe Dashboard
5. Copy the price ID for your Pro subscription plan

### Webhook Events to Listen
Configure your Stripe webhook to listen for these events:
- `checkout.session.completed`
- `customer.subscription.created`
- `customer.subscription.updated`
- `customer.subscription.deleted`
- `invoice.payment_succeeded`
- `invoice.payment_failed`

## 🤖 AI Model APIs

### OpenRouter (Text Models)

| Variable | Description | Where to Get |
|----------|-------------|--------------|
| `OPENROUTER_API_KEY` | OpenRouter API key | [openrouter.ai](https://openrouter.ai) |

```bash
OPENROUTER_API_KEY="sk-or-v1-1234567890abcdefghijklmnopqrstuvwxyz"
```

### Replicate (Image/Video/Audio Models)

| Variable | Description | Where to Get |
|----------|-------------|--------------|
| `REPLICATE_API_TOKEN` | Replicate API token | [replicate.com](https://replicate.com) |

```bash
REPLICATE_API_TOKEN="r8_1234567890abcdefghijklmnopqrstuvwxyz"
```

### UniAPI (Multi-modal Models)

| Variable | Description | Where to Get |
|----------|-------------|--------------|
| `UNIAPI_API_KEY` | UniAPI API key | [uniapi.ai](https://uniapi.ai) |

```bash
UNIAPI_API_KEY="uniapi-1234567890abcdefghijklmnopqrstuvwxyz"
```

### Fal.ai (AI Generation Models)

| Variable | Description | Where to Get |
|----------|-------------|--------------|
| `FAL_API_KEY` | Fal.ai API key | [fal.ai](https://fal.ai) |

```bash
FAL_API_KEY="fal-1234567890abcdefghijklmnopqrstuvwxyz"
```

### API Key Setup Instructions

#### OpenRouter
1. Visit [openrouter.ai](https://openrouter.ai)
2. Sign up and go to API Keys
3. Create a new API key with appropriate credits

#### Replicate
1. Visit [replicate.com](https://replicate.com)
2. Sign up and go to Account > API tokens
3. Create a new token

#### UniAPI
1. Visit [uniapi.ai](https://uniapi.ai)
2. Sign up and get your API key from the dashboard
3. Add credits to your account

#### Fal.ai
1. Visit [fal.ai](https://fal.ai)
2. Sign up and get your API key from the dashboard
3. Add credits to your account

## ⚙️ Application Settings

### Required Variables

| Variable | Description | Example |
|----------|-------------|---------|
| `NEXT_PUBLIC_APP_URL` | Application URL | `https://prmbr.com` |
| `NEXTAUTH_URL` | NextAuth URL (same as app URL) | `https://prmbr.com` |
| `NEXTAUTH_SECRET` | NextAuth secret for JWT signing | Random 32-character string |

### Configuration
```bash
# Application Settings
NEXT_PUBLIC_APP_URL="https://prmbr.com"
NEXTAUTH_URL="https://prmbr.com"
NEXTAUTH_SECRET="your-super-secret-nextauth-secret-32chars"
```

### Generating NEXTAUTH_SECRET
```bash
# Generate a random secret
openssl rand -base64 32
```

## 🔄 Development vs Production

### Development Environment (.env.local)
```bash
# Use test/development keys
STRIPE_SECRET_KEY="sk_test_..."
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_..."
NEXT_PUBLIC_APP_URL="http://localhost:3000"
NEXTAUTH_URL="http://localhost:3000"
```

### Production Environment
```bash
# Use live/production keys
STRIPE_SECRET_KEY="sk_live_..."
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_live_..."
NEXT_PUBLIC_APP_URL="https://prmbr.com"
NEXTAUTH_URL="https://prmbr.com"
```

## 📝 Complete Configuration Examples

### 🚀 Full Development Configuration

Create a `.env.local` file:

```bash
# ===========================================
# PRMBR - AI PROMPT STUDIO
# Development Environment Configuration
# ===========================================

# Database
DATABASE_URL="postgresql://postgres:your_password@db.your-project.supabase.co:5432/postgres"

# Supabase Authentication
NEXT_PUBLIC_SUPABASE_URL="https://your-project-id.supabase.co"
NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlvdXItcHJvamVjdC1pZCIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNjc5MzE2MDAwLCJleHAiOjE5OTQ4OTIwMDB9.example"
SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlvdXItcHJvamVjdC1pZCIsInJvbGUiOiJzZXJ2aWNlX3JvbGUiLCJpYXQiOjE2NzkzMTYwMDAsImV4cCI6MTk5NDg5MjAwMH0.example"

# Cloudflare R2 Storage
R2_ACCESS_KEY_ID="f1234567890abcdef1234567890abcde"
R2_SECRET_ACCESS_KEY="abc123def456ghi789jkl012mno345pqr678stu901"
R2_ENDPOINT="https://1234567890abcdef.r2.cloudflarestorage.com"
R2_BUCKET_NAME="prmbr-dev-storage"

# Stripe Payment (Test Keys)
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_51ABC123def456ghi789jkl012mno345PQR678stu901vwx234YZA567bcd890EFG"
STRIPE_SECRET_KEY="sk_test_51ABC123def456ghi789jkl012mno345PQR678stu901vwx234YZA567bcd890EFG"
STRIPE_WEBHOOK_SECRET="whsec_1234567890abcdefghijklmnopqrstuvwxyz"
NEXT_PUBLIC_STRIPE_PRO_PRICE_ID="price_1ABC123def456ghi789jkl01"

# AI Model APIs
OPENROUTER_API_KEY="sk-or-v1-1234567890abcdefghijklmnopqrstuvwxyzABCDEF1234567890"
REPLICATE_API_TOKEN="r8_1234567890abcdefghijklmnopqrstuvwxyzABCDEF"
UNIAPI_API_KEY="uniapi-1234567890abcdefghijklmnopqrstuvwxyzABCDEF"
FAL_API_KEY="fal-1234567890abcdefghijklmnopqrstuvwxyzABCDEF"

# Application Settings
NEXT_PUBLIC_APP_URL="http://localhost:3000"
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="super-secret-nextauth-development-key-32-chars-long"
```

### 🌐 Full Production Configuration

For production deployment (Vercel/Cloudflare):

```bash
# ===========================================
# PRMBR - AI PROMPT STUDIO
# Production Environment Configuration
# ===========================================

# Database
DATABASE_URL="postgresql://postgres:your_password@db.your-project.supabase.co:5432/postgres"

# Supabase Authentication
NEXT_PUBLIC_SUPABASE_URL="https://your-project-id.supabase.co"
NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlvdXItcHJvamVjdC1pZCIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNjc5MzE2MDAwLCJleHAiOjE5OTQ4OTIwMDB9.production"
SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlvdXItcHJvamVjdC1pZCIsInJvbGUiOiJzZXJ2aWNlX3JvbGUiLCJpYXQiOjE2NzkzMTYwMDAsImV4cCI6MTk5NDg5MjAwMH0.production"

# Cloudflare R2 Storage
R2_ACCESS_KEY_ID="f1234567890abcdef1234567890abcde"
R2_SECRET_ACCESS_KEY="abc123def456ghi789jkl012mno345pqr678stu901"
R2_ENDPOINT="https://1234567890abcdef.r2.cloudflarestorage.com"
R2_BUCKET_NAME="prmbr-production-storage"

# Stripe Payment (Live Keys)
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_live_51ABC123def456ghi789jkl012mno345PQR678stu901vwx234YZA567bcd890EFG"
STRIPE_SECRET_KEY="sk_live_51ABC123def456ghi789jkl012mno345PQR678stu901vwx234YZA567bcd890EFG"
STRIPE_WEBHOOK_SECRET="whsec_production_1234567890abcdefghijklmnopqrstuvwxyz"
NEXT_PUBLIC_STRIPE_PRO_PRICE_ID="price_1ABC123def456ghi789jkl01"

# AI Model APIs
OPENROUTER_API_KEY="sk-or-v1-production-1234567890abcdefghijklmnopqrstuvwxyzABCDEF"
REPLICATE_API_TOKEN="r8_production_1234567890abcdefghijklmnopqrstuvwxyz"
UNIAPI_API_KEY="uniapi-production-1234567890abcdefghijklmnopqrstuvwxyz"
FAL_API_KEY="fal-production-1234567890abcdefghijklmnopqrstuvwxyz"

# Application Settings
NEXT_PUBLIC_APP_URL="https://prmbr.com"
NEXTAUTH_URL="https://prmbr.com"
NEXTAUTH_SECRET="super-secret-production-nextauth-key-32-chars-long-secure"
```

## 🔒 Security Best Practices

### 1. Never commit secrets to version control
```bash
# Add to .gitignore
.env.local
.env.production
.env
```

### 2. Use different keys for development and production

### 3. Rotate API keys regularly

### 4. Use environment variable managers in production
- Vercel: Project Settings > Environment Variables
- Cloudflare Workers: wrangler secret put
- Docker: Use secrets or environment files

### 5. Validate environment variables on startup
The application includes validation that checks for required environment variables and fails fast if any are missing.

## 🚨 Troubleshooting

### Common Issues

1. **Database Connection Fails**
   - Check DATABASE_URL format
   - Verify database server is running
   - Check firewall settings

2. **Supabase Authentication Issues**
   - Verify SUPABASE_URL and keys are correct
   - Check if the keys match the project
   - Ensure RLS policies are configured

3. **Stripe Webhook Issues**
   - Verify webhook endpoint is accessible
   - Check webhook secret matches
   - Ensure events are configured correctly

4. **AI API Issues**
   - Verify API keys are valid and have credits
   - Check rate limits
   - Ensure correct API endpoints

### Environment Variable Validation

The application validates all required environment variables on startup. If any are missing, you'll see specific error messages in the console.

## 📞 Support

For configuration help:
- Email: qsongtianlun@gmail.com
- Check the [project documentation](../README.md)
- Review the [CLAUDE.md](../CLAUDE.md) for development guidance

---

**⚠️ Important**: Keep all API keys and secrets secure. Never share them publicly or commit them to version control.