vercel-hello-world

'Create a minimal working Vercel deployment with a serverless API route.

7 Tools
vercel-pack Plugin
saas packs Category

Allowed Tools

ReadWriteEditBash(vercel:*)Bash(npm:*)Bash(npx:*)Bash(curl:*)

Provided by Plugin

vercel-pack

Claude Code skill pack for Vercel (30 skills)

saas packs v1.0.0
View Plugin

Installation

This skill is included in the vercel-pack plugin:

/plugin install vercel-pack@claude-code-plugins-plus

Click to copy

Instructions

Vercel Hello World

Overview

Deploy a minimal project to Vercel with a static page and a serverless API route. Confirms your CLI auth, project structure, and deployment pipeline work end to end.

Prerequisites

  • Completed vercel-install-auth setup
  • Vercel CLI installed and authenticated
  • Node.js 18+

Instructions

Step 1: Create Project Structure


mkdir my-vercel-app && cd my-vercel-app
npm init -y

Create the static landing page:


<!-- public/index.html -->
<!DOCTYPE html>
<html>
<head><title>Hello Vercel</title></head>
<body>
  <h1>Hello from Vercel</h1>
  <p id="result">Loading...</p>
  <script>
    fetch('/api/hello')
      .then(r => r.json())
      .then(d => document.getElementById('result').textContent = d.message);
  </script>
</body>
</html>

Step 2: Create Serverless API Route


// api/hello.ts
import type { VercelRequest, VercelResponse } from '@vercel/node';

export default function handler(req: VercelRequest, res: VercelResponse) {
  res.status(200).json({
    message: 'Hello from Vercel Serverless Function!',
    timestamp: new Date().toISOString(),
    region: process.env.VERCEL_REGION || 'local',
  });
}

Install the types:


npm install --save-dev @vercel/node typescript

Step 3: Add vercel.json Configuration


{
  "rewrites": [
    { "source": "/api/(.*)", "destination": "/api/$1" }
  ],
  "headers": [
    {
      "source": "/api/(.*)",
      "headers": [
        { "key": "Cache-Control", "value": "s-maxage=0, stale-while-revalidate" }
      ]
    }
  ]
}

Step 4: Deploy Preview


# Deploy to a preview URL (not production)
vercel

# Output:
# Vercel CLI 39.x.x
# đź”— Linked to your-team/my-vercel-app
# 🔍 Inspect: https://vercel.com/your-team/my-vercel-app/xxx
# âś… Preview: https://my-vercel-app-xxx.vercel.app

Step 5: Test the Deployment


# Test static page
curl -s https://my-vercel-app-xxx.vercel.app/ | head -5

# Test API route
curl -s https://my-vercel-app-xxx.vercel.app/api/hello | jq .
# {
#   "message": "Hello from Vercel Serverless Function!",
#   "timestamp": "2026-03-22T12:00:00.000Z",
#   "region": "iad1"
# }

Step 6: Promote to Production


# Deploy directly to production
vercel --prod

# Or promote the preview deployment
vercel promote https://my-vercel-app-xxx.vercel.app

Vercel System Environment Variables

These are available in every function at runtime:

Variable Value
VERCEL "1" — always set on Vercel
VERCEL_ENV "production", "preview", or "development"
VERCEL_URL Deployment URL (no protocol)
VERCEL_REGION Function region (e.g., iad1)
VERCELGITCOMMIT_SHA Git commit hash
VERCELGITCOMMIT_MESSAGE Git commit message

Output

  • Static page served from Vercel CDN
  • Serverless API route returning JSON at /api/hello
  • Preview URL for testing before production
  • Production deployment live on your domain

Error Handling

Error Cause Solution
404 NOT_FOUND on /api/hello File not in api/ directory Move file to project root api/ folder
FUNCTIONINVOCATIONFAILED Runtime error in handler Check function logs: vercel logs
BUILD_FAILED TypeScript compilation error Run npx tsc --noEmit locally first
NORESPONSEFROM_FUNCTION Handler didn't call res.send/json Ensure all code paths return a response
FUNCTIONPAYLOADTOO_LARGE Response body > 4.5 MB Paginate or stream the response

Resources

Next Steps

Proceed to vercel-local-dev-loop for development workflow setup.

Ready to use vercel-pack?