VE

vercel-performance-tuning

Improves Vercel deployment performance through strategic caching and function optimization.

Install

mkdir -p .claude/skills/vercel-performance-tuning && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/7837" && unzip -o skill.zip -d .claude/skills/vercel-performance-tuning && rm skill.zip

Installs to .claude/skills/vercel-performance-tuning

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Optimize Vercel deployment performance with caching, bundle optimization,
73 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Establish a performance baseline using `vercel inspect` and Lighthouse
  • Configure edge caching with `Cache-Control` headers in API routes and `vercel.json`
  • Implement Incremental Static Regeneration (ISR) for dynamic pages
  • Reduce serverless function cold starts through lazy initialization and Edge Functions
  • Optimize bundle size using tree-shaking and package import optimization

How it works

This skill applies various techniques like edge caching, ISR, lazy initialization, and bundle optimization to improve Vercel deployment performance.

Inputs & outputs

You give it
Vercel project URL and configuration files (`vercel.json`, API routes)
You get back
Optimized Vercel deployment with improved Core Web Vitals, reduced cold starts, and smaller bundle size

When to use vercel-performance-tuning

  • Analyze deployment performance
  • Reduce serverless cold start times
  • Implement ISR and edge caching for Vercel apps

About this skill

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

# 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

// 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() });
}
// 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:

HeaderEffect
s-maxage=NCache at Vercel edge for N seconds
stale-while-revalidate=NServe stale while revalidating in background
max-age=NCache in browser for N seconds
immutableNever revalidate (use with content-hashed filenames)
no-cacheAlways revalidate (edge still caches)
no-storeNever cache anywhere

Step 3: Incremental Static Regeneration (ISR)

// 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:

// 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

// 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):

// 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

// 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;
  },
};
# 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

// 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"
/>
// 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

MetricTargetVercel Tool
LCP< 2.5sVercel Analytics
FID/INP< 200msVercel Analytics
CLS< 0.1Vercel Analytics
TTFB< 200msEdge caching
Function cold start< 500msLazy init / Edge Functions
Bundle size (gzipped)< 200KB JSBundle 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

ErrorCauseSolution
Cache not hittingMissing s-maxage headerAdd to response or vercel.json headers
ISR page always stalerevalidate set too highLower the revalidation interval
Large bundle warningImporting entire libraryUse specific imports: import { map } from 'lodash-es'
Cold start > 1sHeavy top-level importsMove to lazy initialization pattern
Images not optimizedExternal domain not whitelistedAdd to images.domains in config

Resources

Next Steps

For cost optimization, see vercel-cost-tuning.

When not to use it

  • When the application is not deployed on Vercel
  • When performance optimization is not a current priority
  • When the project does not have access to Vercel Analytics

Prerequisites

Vercel project deployed with accessible URLAccess to Vercel Analytics (dashboard)Bundle analyzer available (`@next/bundle-analyzer` or similar)

Limitations

  • The skill's effectiveness depends on the specific Vercel project architecture and existing optimizations.
  • The skill requires access to Vercel Analytics for ongoing performance monitoring.
  • The skill's image optimization relies on Vercel's built-in capabilities and configuration.

How it compares

This skill provides specific Vercel-centric performance tuning strategies, unlike general web optimization advice that may not account for Vercel's platform features like Edge Functions or ISR.

Compared to similar skills

vercel-performance-tuning side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
vercel-performance-tuning (this skill)127dCautionIntermediate
nextjs-developer3282moNo flagsAdvanced
frontend-developer274moNo flagsIntermediate
senior-frontend157moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

You might also like

nextjs-developer

zenobi-us

Expert Next.js developer mastering Next.js 14+ with App Router and full-stack features. Specializes in server components, server actions, performance optimization, and production deployment with focus on building fast, SEO-friendly applications.

328531

frontend-developer

sickn33

Build React components, implement responsive layouts, and handle client-side state management. Masters React 19, Next.js 15, and modern frontend architecture. Optimizes performance and ensures accessibility. Use PROACTIVELY when creating UI components or fixing frontend issues.

2782

senior-frontend

davila7

Comprehensive frontend development skill for building modern, performant web applications using ReactJS, NextJS, TypeScript, Tailwind CSS. Includes component scaffolding, performance optimization, bundle analysis, and UI best practices. Use when developing frontend features, optimizing performance, implementing UI/UX designs, managing state, or reviewing frontend code.

1545

nextjs-app-router-patterns

wshobson

Master Next.js 14+ App Router with Server Components, streaming, parallel routes, and advanced data fetching. Use when building Next.js applications, implementing SSR/SSG, or optimizing React Server Components.

347

perf-astro

tech-leads-club

Astro-specific performance optimizations for 95+ Lighthouse scores. Covers critical CSS inlining, compression, font loading, and LCP optimization. Triggers on: astro performance, astro lighthouse, astro optimization, astro-critters.

334

bundle-dynamic-imports

TheOrcDev

Use next/dynamic for lazy-loading heavy components. Apply when importing large components like editors, charts, or rich text editors that aren't needed on initial render.

13

Search skills

Search the agent skills registry