---
name: vercel-prod-checklist
description: 'Vercel production deployment checklist with rollback and promotion procedures.

  Use when deploying to production, preparing for launch,

  or implementing go-live and instant rollback procedures.

  Trigger with phrases like "vercel production", "deploy vercel prod",

  "vercel go-live", "vercel launch checklist", "vercel promote".

  '
allowed-tools: Read, Bash(vercel:*), Bash(curl:*), Grep
version: 1.0.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- vercel
- deployment
- production
- checklist
compatibility: Designed for Claude Code, also compatible with Codex and OpenClaw
---
# Vercel Prod Checklist

## Overview

Complete pre-production checklist for Vercel deployments covering environment variables, domain configuration, performance, security, monitoring, and instant rollback procedures.

## Prerequisites

- Staging deployment tested and verified
- Production domain DNS configured
- Production environment variables set
- Monitoring and alerting configured

## Instructions

### Step 1: Pre-Deploy Verification

```bash
# Verify production env vars are set
vercel env ls --environment=production

# Required production variables (example):
# DATABASE_URL — production database
# API_SECRET — production API key (type: sensitive)
# NEXT_PUBLIC_API_URL — public API endpoint
# SENTRY_DSN — error tracking

# Build locally to catch errors before deploying
vercel build --prod

# Run test suite
npm test
```

### Step 2: Production Deploy

```bash
# Option A: Deploy directly to production
vercel --prod

# Option B: Promote an existing preview deployment
vercel promote https://my-app-git-main-team.vercel.app

# Option C: Deploy via API
curl -X POST "https://api.vercel.com/v13/deployments" \
  -H "Authorization: Bearer $VERCEL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-app",
    "target": "production",
    "gitSource": {
      "type": "github",
      "repoId": "123456789",
      "ref": "main",
      "sha": "abc123"
    }
  }'
```

### Step 3: Domain Configuration

```bash
# Add production domain
vercel domains add yourdomain.com

# Verify domain DNS
vercel domains inspect yourdomain.com

# DNS setup for apex domain (yourdomain.com):
# A record → 76.76.21.21
# AAAA record → (Vercel provides)

# DNS setup for subdomain (www.yourdomain.com):
# CNAME → cname.vercel-dns.com

# SSL is automatically provisioned after DNS verification
```

### Step 4: Post-Deploy Health Checks

```bash
# Verify production is responding
curl -sI https://yourdomain.com | head -5

# Test API endpoints
curl -s https://yourdomain.com/api/health | jq .

# Check SSL certificate
curl -vI https://yourdomain.com 2>&1 | grep "SSL certificate"

# Verify security headers
curl -sI https://yourdomain.com | grep -i "strict-transport\|x-frame\|x-content-type"

# Test from multiple regions (using Vercel's edge)
for region in iad1 sfo1 cdg1 hnd1; do
  echo "Region: $region"
  curl -s -H "x-vercel-ip-country: US" https://yourdomain.com/api/health
done
```

### Step 5: Instant Rollback Procedure

```bash
# If something goes wrong — instant rollback (no rebuild needed)
vercel rollback

# Or rollback to a specific deployment
vercel rollback dpl_xxxxxxxxxxxx

# Or via API
curl -X POST "https://api.vercel.com/v9/projects/my-app/promote" \
  -H "Authorization: Bearer $VERCEL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"deploymentId": "dpl_previous_good_deployment"}'

# Verify rollback succeeded
vercel ls --prod
curl -s https://yourdomain.com/api/health
```

### Step 6: Configure Function Regions and Limits

```json
// vercel.json — production optimization
{
  "regions": ["iad1"],
  "functions": {
    "api/**/*.ts": {
      "memory": 1024,
      "maxDuration": 30
    },
    "api/heavy-compute.ts": {
      "memory": 3008,
      "maxDuration": 60
    }
  }
}
```

## Production Checklist

### Build & Deploy

- [ ] `npm run build` succeeds locally
- [ ] All tests passing
- [ ] No TypeScript errors (`npx tsc --noEmit`)
- [ ] Preview deployment tested by team
- [ ] `vercel --prod` or promotion executed

### Environment Variables

- [ ] All required vars set for Production environment
- [ ] Secrets typed as `sensitive` (hidden in logs)
- [ ] No `NEXT_PUBLIC_` prefix on secrets
- [ ] Database URLs point to production instances

### Domain & SSL

- [ ] Custom domain added and DNS verified
- [ ] SSL certificate auto-provisioned and valid
- [ ] `www` subdomain redirects correctly
- [ ] HSTS header enabled

### Security

- [ ] Security headers configured (CSP, X-Frame-Options, etc.)
- [ ] Preview deployment protection enabled
- [ ] API routes require authentication
- [ ] CORS configured for production origins only

### Performance

- [ ] Function regions set closest to your database
- [ ] `maxDuration` set appropriately per function
- [ ] Cache-Control headers configured
- [ ] Bundle size within budget (check with `vercel inspect`)
- [ ] Core Web Vitals in green (LCP < 2.5s, CLS < 0.1)

### Monitoring

- [ ] Error tracking configured (Sentry, Datadog, etc.)
- [ ] Vercel Analytics enabled in dashboard
- [ ] Runtime logs accessible
- [ ] Alert on error rate spikes

### Rollback

- [ ] Previous production deployment identified for rollback
- [ ] `vercel rollback` tested in staging
- [ ] Team knows rollback procedure

## Output

- Production deployment live on custom domain
- Health checks passing
- Security headers verified
- Rollback procedure documented and tested

## Error Handling

| Error | Cause | Solution |
|-------|-------|----------|
| `DEPLOYMENT_BLOCKED` | Branch protection or deployment freeze | Check team settings in dashboard |
| SSL not provisioned | DNS not propagated | Wait for DNS propagation, verify records |
| Env var undefined | Not scoped to Production | Add via `vercel env add <key> production` |
| Function cold starts in prod | No warm-up traffic | Enable concurrency scaling or use edge functions |
| Rollback fails | Previous deployment expired | Redeploy from known good commit |

## Resources

- [Production Deployments](https://vercel.com/docs/deployments)
- [Instant Rollback](https://vercel.com/docs/instant-rollback)
- [Promoting Deployments](https://vercel.com/docs/deployments/promoting-a-deployment)
- [Custom Domains](https://vercel.com/docs/domains/working-with-domains)
- [Function Configuration](https://vercel.com/docs/functions/configuring-functions)

## Next Steps

For version upgrades, see `vercel-upgrade-migration`.
