vercel-multi-env-setup
Guides the configuration of scoped environment variables and branch-based deployment isolation on Vercel.
Install
mkdir -p .claude/skills/vercel-multi-env-setup && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/3371" && unzip -o skill.zip -d .claude/skills/vercel-multi-env-setup && rm skill.zipInstalls to .claude/skills/vercel-multi-env-setup
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Configure Vercel across development, preview, and production environmentsKey capabilities
- →Scope environment variables to Development, Preview, and Production environments
- →Add environment variables using the Vercel CLI
- →Manage environment variables programmatically via the Vercel REST API
- →Create custom environments for staging or QA
- →Assign custom domains to specific Git branches
- →Detect the current Vercel environment within application code
How it works
The skill uses Vercel CLI commands and REST API calls to scope environment variables, create custom environments, and assign branch-specific domains. It also provides code examples for detecting the active environment at runtime.
Inputs & outputs
When to use vercel-multi-env-setup
- →Configure production-specific database secrets
- →Set up staging environment variables
- →Isolate dev/preview configurations
- →Manage environment variable overrides
About this skill
Vercel Multi-Env Setup
Overview
Configure Vercel's three built-in environments (Development, Preview, Production) with scoped environment variables, branch-specific preview URLs, and custom environments for staging. Uses Vercel's native environment system and the REST API for automation.
Prerequisites
- Vercel project linked and deployed
- Separate database instances per environment (recommended)
- Access to Vercel dashboard or VERCEL_TOKEN for API
Instructions
Step 1: Understand Vercel's Environment Model
Vercel provides three built-in environments:
| Environment | Trigger | URL Pattern | Use Case |
|---|---|---|---|
| Production | Push to production branch | yourdomain.com | Live traffic |
| Preview | Push to any other branch | project-git-branch-team.vercel.app | PR review |
| Development | vercel dev locally | localhost:3000 | Local dev |
Step 2: Scope Environment Variables
# Add a variable scoped to Production only
vercel env add DATABASE_URL production
# Enter: postgres://prod-host:5432/myapp
# Add a variable scoped to Preview only
vercel env add DATABASE_URL preview
# Enter: postgres://staging-host:5432/myapp_staging
# Add a variable scoped to Development only
vercel env add DATABASE_URL development
# Enter: postgres://localhost:5432/myapp_dev
# Add a variable available in ALL environments
vercel env add NEXT_PUBLIC_APP_NAME production preview development
# Enter: My App
# List all env vars with their scopes
vercel env ls
Step 3: Via REST API (Automation)
# Create env vars with specific scoping
curl -X POST "https://api.vercel.com/v9/projects/my-app/env" \
-H "Authorization: Bearer $VERCEL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"key": "DATABASE_URL",
"value": "postgres://prod-host:5432/myapp",
"type": "encrypted",
"target": ["production"]
}'
# Upsert — update if exists, create if not
curl -X POST "https://api.vercel.com/v9/projects/my-app/env?upsert=true" \
-H "Authorization: Bearer $VERCEL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"key": "DATABASE_URL",
"value": "postgres://staging-host:5432/myapp_staging",
"type": "encrypted",
"target": ["preview"]
}'
# List all env vars for a project
curl -s -H "Authorization: Bearer $VERCEL_TOKEN" \
"https://api.vercel.com/v9/projects/my-app/env" \
| jq '.envs[] | {key, target, type}'
Step 4: Custom Environments (Beyond Dev/Preview/Prod)
Vercel supports custom environments for staging, QA, etc.:
# Create a custom environment via API
curl -X POST "https://api.vercel.com/v1/projects/my-app/custom-environments" \
-H "Authorization: Bearer $VERCEL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Staging",
"slug": "staging",
"branchPattern": "staging"
}'
Or in the dashboard: Settings > Environments > Create Environment
Custom environments let you:
- Link a specific Git branch to the environment
- Scope environment variables to it
- Assign a custom domain (e.g.,
staging.yourdomain.com)
Step 5: Branch-Specific Preview Domains
# Assign a custom domain to a specific branch
# In dashboard: Settings > Domains > Add
# Set Git Branch: "staging"
# Domain: staging.yourdomain.com
# Via API — add domain to project with branch targeting
curl -X POST "https://api.vercel.com/v9/projects/my-app/domains" \
-H "Authorization: Bearer $VERCEL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "staging.yourdomain.com",
"gitBranch": "staging"
}'
Step 6: Environment Detection in Code
// src/lib/env.ts — detect environment at runtime
export function getEnvironment(): 'production' | 'preview' | 'development' {
return (process.env.VERCEL_ENV as any) ?? 'development';
}
// Environment-specific behavior
export function getApiBaseUrl(): string {
switch (getEnvironment()) {
case 'production':
return 'https://api.yourdomain.com';
case 'preview':
return `https://${process.env.VERCEL_URL}`;
case 'development':
return 'http://localhost:3000';
}
}
// Production safeguards
export function assertNotProduction(operation: string): void {
if (getEnvironment() === 'production') {
throw new Error(`Dangerous operation "${operation}" blocked in production`);
}
}
Step 7: Pull Env Vars for Local Development
# Pull Development-scoped vars to local file
vercel env pull .env.development.local
# Pull Preview-scoped vars (for testing preview behavior locally)
vercel env pull --environment=preview .env.preview.local
# .gitignore these files
echo '.env*.local' >> .gitignore
Environment Variable Types
| Type | Dashboard Visibility | Log Visibility | Use Case |
|---|---|---|---|
plain | Visible | Visible | Non-sensitive config |
encrypted | Hidden after save | Hidden | API keys, secrets |
sensitive | Always hidden | Hidden | High-security secrets |
system | Auto-set by Vercel | Visible | VERCEL_ENV, VERCEL_URL |
Output
- Environment variables scoped per environment (dev/preview/prod)
- Custom staging environment with dedicated branch and domain
- Environment detection logic for runtime behavior switching
- Local development env vars pulled from Vercel
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Env var undefined in preview | Not scoped to Preview target | Re-add with Preview in target array |
| Wrong database in production | Preview DB URL used in prod | Check env var scoping per environment |
vercel env pull empty | No Development-scoped vars | Add vars with Development target |
| Custom env not triggering | Branch pattern doesn't match | Check branch name matches environment slug |
| Sensitive var can't be read | type=sensitive hides value | Re-add the var if value is lost |
Resources
- Environment Variables
- Environments
- System Environment Variables
- Managing Environment Variables
- REST API: Environment Variables
Next Steps
For observability and monitoring, see vercel-observability.
Prerequisites
Limitations
- →Environment variables may be undefined if not scoped to the correct target
- →Wrong database in production can occur if Preview DB URL is used in prod
- →`vercel env pull` may be empty if no Development-scoped variables exist
How it compares
This skill provides a structured approach to configuring Vercel's multi-environment features using both CLI and API, offering more control and automation than manual dashboard configuration.
Compared to similar skills
vercel-multi-env-setup side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| vercel-multi-env-setup (this skill) | 1 | 27d | Caution | Intermediate |
| workflow | 4 | 2mo | Review | Intermediate |
| langfuse-deploy-integration | 1 | 27d | Review | Intermediate |
| inngest | 0 | 6mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
workflow
vercel
Creates durable, resumable workflows using Vercel's Workflow DevKit. Use when building workflows that need to survive restarts, pause for external events, retry on failure, or coordinate multi-step operations over time. Triggers on mentions of "workflow", "durable functions", "resumable", "workflow devkit", or step-based orchestration.
langfuse-deploy-integration
jeremylongshore
Deploy Langfuse with your application across different platforms. Use when deploying Langfuse to Vercel, AWS, GCP, or Docker, or integrating Langfuse into your deployment pipeline. Trigger with phrases like "deploy langfuse", "langfuse Vercel", "langfuse AWS", "langfuse Docker", "langfuse production deploy".
inngest
davila7
Inngest expert for serverless-first background jobs, event-driven workflows, and durable execution without managing queues or workers. Use when: inngest, serverless background job, event-driven workflow, step function, durable execution.
development
diegosouzapw
Comprehensive web, mobile, and backend development workflow bundling frontend, backend, full-stack, and mobile development skills for end-to-end application delivery.
nx
TerminalSkills
>-
flow-nexus-platform
ruvnet
Comprehensive Flow Nexus platform management - authentication, sandboxes, app deployment, payments, and challenges