| name | vercel-deployment |
| description | Vercel deployment using Vercel CLI for Next.js, React, Vue, static sites, and serverless functions. Includes project validation, deployment orchestration, environment management, domain configuration, and analytics integration. Use when deploying frontend applications, static sites, or serverless APIs, or when user mentions Vercel, Next.js deployment, serverless functions, or edge network. |
| allowed-tools | Bash, Read, Write, Edit |
Vercel Deployment Skill
This skill provides comprehensive deployment lifecycle management for applications deployed to Vercel using the Vercel CLI.
Overview
The deployment lifecycle consists of five phases:
- Pre-Deployment Validation - Application readiness, framework detection, build validation
- Project Configuration - vercel.json generation, build settings, environment variables
- Deployment - Deploy to preview or production, manage builds
- Domain & Environment Management - Custom domains, environment variables, aliases
- Post-Deployment Verification - Health checks, deployment status, analytics
Supported Application Types
- Next.js: App Router, Pages Router, API Routes, Middleware
- React: Create React App, Vite, custom builds
- Vue: Vue 3, Nuxt, Vite
- Static Sites: HTML/CSS/JS, Gatsby, Astro, Hugo, Jekyll
- Serverless Functions: Node.js, Python, Go, Ruby serverless APIs
- Monorepos: Turborepo, Nx, pnpm workspaces
Available Scripts
1. Application Validation
Script: scripts/validate-app.sh <app-path>
Purpose: Validates application is ready for Vercel deployment
Checks:
- Framework detection (Next.js, React, Vue, static)
- package.json or build configuration present
- Build command specified or detectable
- Output directory configured
- No hardcoded secrets in code
- Environment configuration present
- Node.js version compatibility
Usage:
# Validate Next.js app
./scripts/validate-app.sh /path/to/nextjs-app
# Validate React app
./scripts/validate-app.sh /path/to/react-app
# Validate static site
STATIC_SITE=true ./scripts/validate-app.sh /path/to/static-site
# Verbose mode
VERBOSE=1 ./scripts/validate-app.sh .
Exit Codes:
0: Validation passed1: Validation failed (must fix before deployment)
2. Deploy to Vercel
Script: scripts/deploy-to-vercel.sh <app-path> [environment]
Purpose: Deploys application to Vercel
Actions:
- Validates Vercel CLI authentication
- Detects project framework and settings
- Links project to Vercel (if first deployment)
- Builds and deploys application
- Configures environment variables
- Captures deployment URL
- Monitors deployment status
Usage:
# Deploy to preview (automatic for branches)
./scripts/deploy-to-vercel.sh /path/to/app
# Deploy to production
./scripts/deploy-to-vercel.sh /path/to/app production
# Deploy with custom name
PROJECT_NAME=my-app ./scripts/deploy-to-vercel.sh /path/to/app
# Deploy and wait for completion
WAIT=true ./scripts/deploy-to-vercel.sh /path/to/app production
# Deploy with specific build command
BUILD_CMD="npm run build:prod" ./scripts/deploy-to-vercel.sh /path/to/app
Environment Variables:
VERCEL_TOKEN: Vercel authentication tokenVERCEL_ORG_ID: Organization ID (for team projects)VERCEL_PROJECT_ID: Project ID (for existing projects)PROJECT_NAME: Custom project nameBUILD_CMD: Custom build commandOUTPUT_DIR: Custom output directoryWAIT: Set totrueto wait for deployment completionPROD: Set totruefor production deployment
Exit Codes:
0: Deployment successful1: Deployment failed
3. Update Environment Variables
Script: scripts/update-env-vars.sh <project-name> <environment>
Purpose: Updates environment variables for Vercel project
Actions:
- Retrieves current environment variables
- Prompts for updated variables
- Supports development, preview, production scopes
- Triggers redeployment if needed
- Verifies variables applied
Usage:
# Update production env vars
./scripts/update-env-vars.sh my-app production
# Update from .env file
ENV_FILE=.env.production ./scripts/update-env-vars.sh my-app production
# Update specific variables
API_KEY=new_key DATABASE_URL=new_url ./scripts/update-env-vars.sh my-app production
# Update for all environments
ENV_SCOPE=all ./scripts/update-env-vars.sh my-app
Exit Codes:
0: Environment variables updated successfully1: Update failed
4. Configure Domain
Script: scripts/configure-domain.sh <project-name> <domain>
Purpose: Configures custom domain for Vercel project
Actions:
- Adds domain to Vercel project
- Configures SSL/TLS certificate (automatic)
- Sets up DNS records
- Configures redirects (www, apex)
- Verifies domain is accessible
Usage:
# Add custom domain
./scripts/configure-domain.sh my-app myapp.com
# Add with www redirect
WWW_REDIRECT=true ./scripts/configure-domain.sh my-app myapp.com
# Add subdomain
./scripts/configure-domain.sh my-app api.myapp.com
# Force HTTPS redirect
FORCE_HTTPS=true ./scripts/configure-domain.sh my-app myapp.com
Exit Codes:
0: Domain configured successfully1: Configuration failed
5. Manage Deployments
Script: scripts/manage-deployment.sh <action> <project-name>
Purpose: Manage Vercel deployments and project
Actions:
list: List recent deploymentsinspect: Show deployment detailslogs: View deployment logsrollback: Rollback to previous deploymentpromote: Promote preview to productionremove: Remove deploymentalias: Manage aliases
Usage:
# List deployments
./scripts/manage-deployment.sh list my-app
# Inspect specific deployment
./scripts/manage-deployment.sh inspect my-app <deployment-url>
# View logs
./scripts/manage-deployment.sh logs my-app <deployment-url>
# Rollback to previous
./scripts/manage-deployment.sh rollback my-app
# Promote preview to production
./scripts/manage-deployment.sh promote my-app <preview-url>
# Remove deployment
./scripts/manage-deployment.sh remove my-app <deployment-url>
6. Health Check
Script: scripts/health-check.sh <deployment-url>
Purpose: Validates Vercel deployment health
Checks:
- Deployment status (ready/building/error)
- HTTP endpoint accessibility
- SSL certificate validity
- Build logs for errors
- Performance metrics
- Edge network propagation
- DNS resolution
Usage:
# Check deployment health
./scripts/health-check.sh https://my-app.vercel.app
# Continuous monitoring (runs every 30s)
MONITOR=true ./scripts/health-check.sh https://my-app.vercel.app
# Detailed health report
DETAILED=true ./scripts/health-check.sh https://my-app.vercel.app
Exit Codes:
0: All health checks passed1: One or more health checks failed
7. Project Setup
Script: scripts/setup-project.sh <app-path> <project-name>
Purpose: Initialize Vercel project configuration
Actions:
- Creates vercel.json configuration
- Links project to Vercel
- Sets up environment variables
- Configures build settings
- Sets up Git integration
Usage:
# Setup new project
./scripts/setup-project.sh /path/to/app my-app
# Setup with custom settings
FRAMEWORK=nextjs ./scripts/setup-project.sh /path/to/app my-app
# Setup for team
TEAM=my-team ./scripts/setup-project.sh /path/to/app my-app
Available Templates
1. Next.js Configuration
File: templates/vercel-nextjs.json
Purpose: vercel.json for Next.js applications
Example:
{
"version": 2,
"framework": "nextjs",
"buildCommand": "npm run build",
"outputDirectory": ".next",
"installCommand": "npm install",
"devCommand": "npm run dev",
"env": {
"NEXT_PUBLIC_API_URL": "your_api_url_here"
},
"build": {
"env": {
"DATABASE_URL": "@database-url"
}
}
}
2. React/Vite Configuration
File: templates/vercel-react.json
Purpose: vercel.json for React applications
Example:
{
"version": 2,
"buildCommand": "npm run build",
"outputDirectory": "dist",
"installCommand": "npm install",
"devCommand": "npm run dev",
"framework": "vite",
"routes": [
{
"src": "/api/(.*)",
"dest": "/api/$1"
},
{
"src": "/(.*)",
"dest": "/index.html"
}
]
}
3. Static Site Configuration
File: templates/vercel-static.json
Purpose: vercel.json for static sites
Example:
{
"version": 2,
"buildCommand": "npm run build",
"outputDirectory": "public",
"routes": [
{
"src": "/(.*)",
"dest": "/$1"
}
],
"headers": [
{
"source": "/(.*)",
"headers": [
{
"key": "Cache-Control",
"value": "public, max-age=31536000, immutable"
}
]
}
]
}
4. Serverless Functions Configuration
File: templates/vercel-serverless.json
Purpose: vercel.json for serverless API
Example:
{
"version": 2,
"functions": {
"api/**/*.js": {
"runtime": "nodejs18.x",
"memory": 1024,
"maxDuration": 10
}
},
"rewrites": [
{
"source": "/api/(.*)",
"destination": "/api/$1"
}
]
}
5. Environment Variables Template
File: templates/.env.example
Purpose: Environment variable template
Example:
# Public variables (exposed to browser)
NEXT_PUBLIC_API_URL=your_api_url_here
NEXT_PUBLIC_ANALYTICS_ID=your_analytics_id_here
# Server-only variables (not exposed)
DATABASE_URL=your_database_url_here
API_SECRET=your_api_secret_here
STRIPE_SECRET_KEY=your_stripe_key_here
# Vercel system variables (automatically provided)
# VERCEL=1
# VERCEL_URL=<deployment-url>
# VERCEL_ENV=production|preview|development
Deployment Workflow
Initial Deployment
Validate Application:
./scripts/validate-app.sh /path/to/appSetup Project:
./scripts/setup-project.sh /path/to/app my-appDeploy to Preview:
./scripts/deploy-to-vercel.sh /path/to/appVerify Deployment:
./scripts/health-check.sh https://my-app-preview.vercel.appDeploy to Production:
./scripts/deploy-to-vercel.sh /path/to/app production
Update Deployment
Deploy Updates:
./scripts/deploy-to-vercel.sh /path/to/app productionVerify Health:
./scripts/health-check.sh https://my-app.com
Update Environment Variables
Update Variables:
./scripts/update-env-vars.sh my-app productionRedeploy (automatic after env var changes)
Configure Custom Domain
Add Domain:
./scripts/configure-domain.sh my-app myapp.comUpdate DNS (follow Vercel instructions)
Verify Domain:
./scripts/health-check.sh https://myapp.com
Security Best Practices
- Never Hardcode Secrets: Always use environment variables
- Use Vercel Secrets: Encrypt sensitive values with
vercel secrets add - Scope Variables: Use appropriate target (development, preview, production)
- Prefix Public Variables: Use
NEXT_PUBLIC_for browser-exposed variables - Rotate Secrets: Regularly update API keys and tokens
- Enable Protection: Use Vercel's deployment protection features
- Monitor Logs: Regularly check deployment and runtime logs
- Use Teams: Manage access with Vercel teams for collaboration
Framework-Specific Features
Next.js
- App Router: Full support for Next.js 13+ App Router
- API Routes: Serverless API endpoints
- Middleware: Edge middleware support
- ISR: Incremental Static Regeneration
- Image Optimization: Automatic image optimization
- Font Optimization: Automatic font optimization
React/Vite
- SPA Mode: Single Page Application routing
- API Proxying: Proxy API requests to avoid CORS
- Code Splitting: Automatic code splitting
- Fast Refresh: Hot module replacement
Static Sites
- CDN: Global edge network
- Asset Optimization: Automatic compression
- Headers: Custom header configuration
- Redirects: URL redirect management
Serverless Functions
- Edge Functions: Ultra-low latency edge runtime
- Node.js: Full Node.js runtime support
- Python: Python serverless functions
- Go: Go serverless functions
Vercel vs Other Platforms
| Feature | Vercel | App Platform | Droplets |
|---|---|---|---|
| Framework Focus | Frontend/Fullstack | Any | Any |
| Edge Network | Global | CDN available | Manual |
| Serverless | Built-in | No | Manual |
| Git Integration | Native | Native | Manual |
| Build Time | Fast | Medium | N/A |
| Cost (Small) | Free-$20/mo | $5-12/mo | $4-6/mo |
| Best For | Next.js, React, Vue | Docker apps | Custom servers |
Troubleshooting
Build Failures
# View build logs
./scripts/manage-deployment.sh logs my-app <deployment-url>
# Common issues:
# - Missing dependencies in package.json
# - Incorrect build command
# - Node.js version mismatch
# - Environment variables missing at build time
Deployment Failures
# Check deployment status
vercel inspect <deployment-url>
# View runtime logs
vercel logs <deployment-url>
# Common issues:
# - Serverless function timeout
# - Memory limit exceeded
# - Missing environment variables
# - API route errors
Domain Issues
# Check domain configuration
vercel domains ls
# Verify DNS
dig myapp.com
# Common issues:
# - DNS not propagated (wait 24-48 hours)
# - Incorrect DNS records
# - SSL certificate provisioning (automatic, wait a few minutes)
Cost Optimization
Free Tier
- Hobby Plan: Free forever
- Bandwidth: 100GB/month
- Build Time: 100 hours/month
- Serverless Executions: 100GB-hours
- Edge Requests: Unlimited
Pro Tier ($20/month)
- Bandwidth: 1TB/month
- Build Time: Unlimited
- Team Collaboration: Yes
- Password Protection: Yes
- Analytics: Advanced
Tips
- Use ISR to reduce build times
- Optimize images with Next.js Image
- Cache static assets
- Use Edge Functions for low latency
Integration with Dev Lifecycle
This skill integrates with:
/deployment:prepare- Pre-deployment validation/deployment:deploy- Execute Vercel deployment/deployment:validate- Post-deployment verification/deployment:rollback- Rollback to previous deployment
Vercel CLI Commands Reference
# Authentication
vercel login
vercel logout
# Deployment
vercel # Deploy to preview
vercel --prod # Deploy to production
vercel --name my-app # Deploy with custom name
# Project Management
vercel list # List projects
vercel inspect <url> # Inspect deployment
vercel logs <url> # View logs
vercel remove <url> # Remove deployment
# Environment Variables
vercel env ls # List env vars
vercel env add # Add env var
vercel env rm # Remove env var
# Domains
vercel domains ls # List domains
vercel domains add # Add domain
vercel domains rm # Remove domain
# Aliases
vercel alias ls # List aliases
vercel alias set # Set alias
vercel alias rm # Remove alias
Example Use Cases
Next.js E-commerce Site
- Deploy with ISR for product pages
- Use Edge Functions for cart API
- Configure custom domain
- Set up analytics
- Cost: Free-$20/month
React Dashboard
- Deploy with SPA routing
- Proxy API to backend
- Configure preview deployments
- Password protect staging
- Cost: Free-$20/month
Serverless API
- Deploy API routes
- Configure rate limiting
- Set up monitoring
- Use Edge network
- Cost: Free (within limits)
Multi-tenant SaaS
- Deploy with preview environments
- Configure per-tenant domains
- Use deployment protection
- Set up team access
- Cost: $20+/month