Skip to main content

Vercel Deployment

Deploy your AutoDeployBase project to Vercel with zero configuration.

Quick Deploy​

Using Vercel CLI​

# Install Vercel CLI
npm i -g vercel

# Deploy
vercel

That's it! Vercel auto-detects your framework and configures the build.

Using Git Integration​

  1. Push your project to GitHub, GitLab, or Bitbucket
  2. Import the repository in Vercel Dashboard
  3. Vercel automatically deploys on every push

Environment Variables​

Set environment variables in the Vercel dashboard or CLI:

Dashboard​

  1. Go to Project Settings → Environment Variables
  2. Add each variable for Production, Preview, and Development

CLI​

# Add a secret
vercel env add DATABASE_URL

# Pull to local .env
vercel env pull

Required Variables​

# Database
DATABASE_URL="postgresql://..."

# Authentication
JWT_SECRET="your-secure-secret"

# App URL
NEXT_PUBLIC_APP_URL="https://your-app.vercel.app"

Plugin Variables​

# Stripe
STRIPE_SECRET_KEY="sk_live_..."
STRIPE_PUBLISHABLE_KEY="pk_live_..."
STRIPE_WEBHOOK_SECRET="whsec_..."

# Email
RESEND_API_KEY="re_..."

# Storage
S3_ACCESS_KEY="..."
S3_SECRET_KEY="..."

Database Configuration​

Vercel Postgres​

Use Vercel's managed PostgreSQL:

# Create database in dashboard or CLI
vercel postgres create my-db

The DATABASE_URL is automatically added to your environment.

External Databases​

For external databases, ensure they're accessible from Vercel's edge:

  • Neon: Serverless PostgreSQL (recommended)
  • PlanetScale: MySQL-compatible
  • Supabase: PostgreSQL with extras
  • Railway: Any database
# Neon
DATABASE_URL="postgresql://user:pass@ep-xxx.us-east-2.aws.neon.tech/mydb?sslmode=require"

Build Configuration​

vercel.json​

Customize your deployment:

vercel.json
{
"framework": "nextjs",
"buildCommand": "prisma generate && next build",
"installCommand": "npm install",
"regions": ["iad1"],
"functions": {
"api/**/*.ts": {
"maxDuration": 30
}
},
"headers": [
{
"source": "/api/(.*)",
"headers": [
{
"key": "Access-Control-Allow-Origin",
"value": "*"
}
]
}
]
}

Custom Build Command​

For Prisma projects:

{
"buildCommand": "prisma generate && prisma migrate deploy && next build"
}

Edge Functions​

Deploy API routes to the edge for lower latency:

src/app/api/hello/route.ts
export const runtime = 'edge';

export async function GET() {
return Response.json({ hello: 'world' });
}

Cron Jobs​

Schedule recurring tasks:

vercel.json
{
"crons": [
{
"path": "/api/cron/cleanup",
"schedule": "0 0 * * *"
},
{
"path": "/api/cron/reports",
"schedule": "0 9 * * 1"
}
]
}
src/app/api/cron/cleanup/route.ts
export async function GET(request: Request) {
// Verify it's from Vercel Cron
const authHeader = request.headers.get('authorization');
if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {
return Response.json({ error: 'Unauthorized' }, { status: 401 });
}

// Your cleanup logic
await cleanupOldSessions();

return Response.json({ success: true });
}

Preview Deployments​

Every pull request gets a preview URL:

https://my-app-git-feature-branch-team.vercel.app

Preview Environment Variables​

Set preview-specific variables:

# Preview only
DATABASE_URL="postgresql://...preview-db..."
NEXT_PUBLIC_APP_URL="https://preview.myapp.com"

Production Domains​

Add Custom Domain​

vercel domains add myapp.com

Configure DNS​

Add the DNS records shown in the Vercel dashboard:

Type  Name    Value
A @ 76.76.21.21
CNAME www cname.vercel-dns.com

Monorepo Support​

For monorepos, set the root directory:

vercel.json
{
"framework": "nextjs",
"outputDirectory": "apps/web/.next"
}

Or in dashboard: Settings → General → Root Directory

Troubleshooting​

Build Failures​

Check the build logs:

vercel logs

Common issues:

  1. Missing env vars: Ensure all required variables are set
  2. Prisma: Add prisma generate to build command
  3. Node version: Set in package.json or vercel.json
package.json
{
"engines": {
"node": "20.x"
}
}

Database Connection Issues​

For serverless, use connection pooling:

DATABASE_URL="postgresql://...?pgbouncer=true&connection_limit=1"

Large Bundles​

Analyze your bundle:

ANALYZE=true npm run build

GitHub Actions Integration​

Deploy via GitHub Actions:

.github/workflows/deploy.yml
name: Deploy to Vercel

on:
push:
branches: [main]

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Deploy to Vercel
uses: amondnet/vercel-action@v25
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
vercel-args: '--prod'

Cost Optimization​

Function Invocations​

  • Use export const revalidate = 3600 for caching
  • Implement proper error boundaries
  • Use Edge Runtime when possible

Bandwidth​

  • Optimize images with next/image
  • Enable compression
  • Use CDN for static assets

Database​

  • Connection pooling (PgBouncer, Prisma Data Proxy)
  • Query optimization
  • Proper indexing