vercel-performance-tuning
Optimize Vercel deployment performance with caching, bundle optimization, and cold start reduction. Use when experiencing slow page loads, optimizing Core Web Vitals, or reducing serverless function cold start times. Trigger with phrases like "vercel performance", "optimize vercel", "vercel latency", "vercel caching", "vercel slow", "vercel cold start".
Best use case
vercel-performance-tuning is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Optimize Vercel deployment performance with caching, bundle optimization, and cold start reduction. Use when experiencing slow page loads, optimizing Core Web Vitals, or reducing serverless function cold start times. Trigger with phrases like "vercel performance", "optimize vercel", "vercel latency", "vercel caching", "vercel slow", "vercel cold start".
Teams using vercel-performance-tuning should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/vercel-performance-tuning/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How vercel-performance-tuning Compares
| Feature / Agent | vercel-performance-tuning | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Optimize Vercel deployment performance with caching, bundle optimization, and cold start reduction. Use when experiencing slow page loads, optimizing Core Web Vitals, or reducing serverless function cold start times. Trigger with phrases like "vercel performance", "optimize vercel", "vercel latency", "vercel caching", "vercel slow", "vercel cold start".
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
AI Agents for Coding
Browse AI agent skills for coding, debugging, testing, refactoring, code review, and developer workflows across Claude, Cursor, and Codex.
Best AI Skills for Claude
Explore the best AI skills for Claude and Claude Code across coding, research, workflow automation, documentation, and agent operations.
ChatGPT vs Claude for Agent Skills
Compare ChatGPT and Claude for AI agent skills across coding, writing, research, and reusable workflow execution.
SKILL.md Source
# Vercel Performance Tuning
## Overview
Optimize Vercel deployment performance across four levers: edge caching, bundle size reduction, serverless function cold start elimination, and Core Web Vitals improvement. Uses real Vercel cache headers, ISR, and Edge Functions for maximum performance.
## Prerequisites
- Vercel project deployed with accessible URL
- Access to Vercel Analytics (dashboard)
- Bundle analyzer available (`@next/bundle-analyzer` or similar)
## Instructions
### Step 1: Establish Performance Baseline
```bash
# Check deployment size and function count
vercel inspect https://my-app.vercel.app
# Run Lighthouse via CLI
npx lighthouse https://my-app.vercel.app --output=json --quiet \
| jq '{performance: .categories.performance.score, lcp: .audits["largest-contentful-paint"].numericValue, cls: .audits["cumulative-layout-shift"].numericValue}'
# Check bundle size (Next.js)
ANALYZE=true npx next build
# Opens bundle analyzer report in browser
```
Enable Vercel Analytics in the dashboard under **Analytics** tab for ongoing monitoring.
### Step 2: Configure Edge Caching
```typescript
// api/cached-data.ts — cache API responses at the edge
import type { VercelRequest, VercelResponse } from '@vercel/node';
export default function handler(req: VercelRequest, res: VercelResponse) {
// Cache at Vercel edge for 60s, serve stale for 300s while revalidating
res.setHeader('Cache-Control', 's-maxage=60, stale-while-revalidate=300');
res.json({ data: fetchData(), cachedAt: new Date().toISOString() });
}
```
```json
// vercel.json — cache static assets aggressively
{
"headers": [
{
"source": "/static/(.*)",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
]
},
{
"source": "/api/public-data",
"headers": [
{ "key": "Cache-Control", "value": "s-maxage=3600, stale-while-revalidate=86400" }
]
}
]
}
```
Cache header reference:
| Header | Effect |
|--------|--------|
| `s-maxage=N` | Cache at Vercel edge for N seconds |
| `stale-while-revalidate=N` | Serve stale while revalidating in background |
| `max-age=N` | Cache in browser for N seconds |
| `immutable` | Never revalidate (use with content-hashed filenames) |
| `no-cache` | Always revalidate (edge still caches) |
| `no-store` | Never cache anywhere |
### Step 3: Incremental Static Regeneration (ISR)
```typescript
// app/products/[id]/page.tsx (Next.js App Router)
export const revalidate = 60; // Revalidate every 60 seconds
export default async function ProductPage({ params }) {
const product = await fetchProduct(params.id);
return <ProductView product={product} />;
}
// Generate static pages at build time, regenerate on-demand
export async function generateStaticParams() {
const products = await fetchTopProducts(100);
return products.map(p => ({ id: p.id }));
}
```
On-demand revalidation via API route:
```typescript
// api/revalidate.ts
import type { VercelRequest, VercelResponse } from '@vercel/node';
export default async function handler(req: VercelRequest, res: VercelResponse) {
const secret = req.query.secret;
if (secret !== process.env.REVALIDATION_SECRET) {
return res.status(401).json({ error: 'Invalid secret' });
}
const path = req.query.path as string;
await res.revalidate(path);
res.json({ revalidated: true, path });
}
// Trigger: POST /api/revalidate?secret=xxx&path=/products/123
```
### Step 4: Reduce Cold Starts
```typescript
// Lazy initialization — don't import heavy modules at top level
// BAD: Cold start loads everything
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient(); // Runs on every cold start
// GOOD: Lazy singleton — only connects when first used
let prisma: PrismaClient | null = null;
function getDb(): PrismaClient {
if (!prisma) {
prisma = new PrismaClient();
}
return prisma;
}
export default async function handler(req, res) {
const users = await getDb().user.findMany();
res.json(users);
}
```
Move latency-critical paths to Edge Functions (zero cold starts):
```typescript
// api/fast.ts
export const config = { runtime: 'edge' };
export default function handler(request: Request) {
return Response.json({ fast: true }); // No cold start, runs globally
}
```
### Step 5: Bundle Size Optimization
```javascript
// next.config.js — tree-shaking and optimization
module.exports = {
experimental: {
optimizePackageImports: ['lodash', '@mui/material', '@mui/icons-material'],
},
// Exclude server-only deps from client bundle
webpack: (config, { isServer }) => {
if (!isServer) {
config.resolve.fallback = { fs: false, net: false, tls: false };
}
return config;
},
};
```
```bash
# Find large dependencies
npx depcheck
npx cost-of-modules
# Replace heavy libraries with lighter alternatives
# moment.js (300KB) → dayjs (2KB)
# lodash (72KB) → lodash-es with tree-shaking
# axios (29KB) → native fetch
```
### Step 6: Image Optimization
```typescript
// Use Vercel's built-in image optimization
import Image from 'next/image';
// Automatic: resizes, converts to WebP/AVIF, caches at edge
<Image
src="/hero.jpg"
width={1200}
height={600}
alt="Hero"
priority // Preload for LCP
sizes="(max-width: 768px) 100vw, 1200px"
/>
```
```json
// vercel.json — configure image optimization
{
"images": {
"sizes": [640, 750, 828, 1080, 1200],
"domains": ["images.example.com"],
"formats": ["image/avif", "image/webp"],
"minimumCacheTTL": 86400
}
}
```
## Performance Budget Reference
| Metric | Target | Vercel Tool |
|--------|--------|-------------|
| LCP | < 2.5s | Vercel Analytics |
| FID/INP | < 200ms | Vercel Analytics |
| CLS | < 0.1 | Vercel Analytics |
| TTFB | < 200ms | Edge caching |
| Function cold start | < 500ms | Lazy init / Edge Functions |
| Bundle size (gzipped) | < 200KB JS | Bundle analyzer |
## Output
- Edge caching configured with optimal cache-control headers
- ISR or on-demand revalidation for dynamic pages
- Cold starts eliminated via lazy initialization and Edge Functions
- Bundle size reduced through tree-shaking and import optimization
- Image optimization configured
## Error Handling
| Error | Cause | Solution |
|-------|-------|----------|
| Cache not hitting | Missing `s-maxage` header | Add to response or vercel.json headers |
| ISR page always stale | `revalidate` set too high | Lower the revalidation interval |
| Large bundle warning | Importing entire library | Use specific imports: `import { map } from 'lodash-es'` |
| Cold start > 1s | Heavy top-level imports | Move to lazy initialization pattern |
| Images not optimized | External domain not whitelisted | Add to `images.domains` in config |
## Resources
- [Vercel Caching](https://vercel.com/docs/edge-network/caching)
- [ISR Documentation](https://vercel.com/docs/incremental-static-regeneration)
- [Vercel Analytics](https://vercel.com/docs/analytics)
- [Image Optimization](https://vercel.com/docs/image-optimization)
- [Function Configuration](https://vercel.com/docs/functions/configuring-functions)
## Next Steps
For cost optimization, see `vercel-cost-tuning`.Related Skills
running-performance-tests
Execute load testing, stress testing, and performance benchmarking. Use when performing specialized testing. Trigger with phrases like "run load tests", "test performance", or "benchmark the system".
workhuman-performance-tuning
Workhuman performance tuning for employee recognition and rewards API. Use when integrating Workhuman Social Recognition, or building recognition workflows with HRIS systems. Trigger: "workhuman performance tuning".
workhuman-cost-tuning
Workhuman cost tuning for employee recognition and rewards API. Use when integrating Workhuman Social Recognition, or building recognition workflows with HRIS systems. Trigger: "workhuman cost tuning".
wispr-performance-tuning
Wispr Flow performance tuning for voice-to-text API integration. Use when integrating Wispr Flow dictation, WebSocket streaming, or building voice-powered applications. Trigger: "wispr performance tuning".
wispr-cost-tuning
Wispr Flow cost tuning for voice-to-text API integration. Use when integrating Wispr Flow dictation, WebSocket streaming, or building voice-powered applications. Trigger: "wispr cost tuning".
windsurf-performance-tuning
Optimize Windsurf IDE performance: indexing speed, Cascade responsiveness, and memory usage. Use when Windsurf is slow, indexing takes too long, Cascade times out, or the IDE uses too much memory. Trigger with phrases like "windsurf slow", "windsurf performance", "optimize windsurf", "windsurf memory", "cascade slow", "indexing slow".
windsurf-cost-tuning
Optimize Windsurf licensing costs through seat management, tier selection, and credit monitoring. Use when analyzing Windsurf billing, reducing per-seat costs, or implementing usage monitoring and budget controls. Trigger with phrases like "windsurf cost", "windsurf billing", "reduce windsurf costs", "windsurf pricing", "windsurf budget".
webflow-performance-tuning
Optimize Webflow API performance with response caching, bulk endpoint batching, CDN-cached live item reads, pagination optimization, and connection pooling. Use when experiencing slow API responses or optimizing request throughput. Trigger with phrases like "webflow performance", "optimize webflow", "webflow latency", "webflow caching", "webflow slow", "webflow batch".
webflow-cost-tuning
Optimize Webflow costs through plan selection, CDN read optimization, bulk endpoint usage, and API usage monitoring with budget alerts. Use when analyzing Webflow billing, reducing API costs, or implementing usage monitoring for Webflow integrations. Trigger with phrases like "webflow cost", "webflow billing", "reduce webflow costs", "webflow pricing", "webflow budget".
vercel-webhooks-events
Implement Vercel webhook handling with signature verification and event processing. Use when setting up webhook endpoints, processing deployment events, or building integrations that react to Vercel deployment lifecycle. Trigger with phrases like "vercel webhook", "vercel events", "vercel deployment.ready", "handle vercel events", "vercel webhook signature".
vercel-upgrade-migration
Upgrade Vercel CLI, Node.js runtime, and Next.js framework versions with breaking change detection. Use when upgrading Vercel CLI versions, migrating Node.js runtimes, or updating Next.js between major versions on Vercel. Trigger with phrases like "upgrade vercel", "vercel migration", "vercel breaking changes", "update vercel CLI", "next.js upgrade on vercel".
vercel-security-basics
Apply Vercel security best practices for secrets, headers, and access control. Use when securing API keys, configuring security headers, or auditing Vercel security configuration. Trigger with phrases like "vercel security", "vercel secrets", "secure vercel", "vercel headers", "vercel CSP".