Expert in Vercel Functions, Fluid compute, ISR, and Image Optimization. Use when deploying to or building on vercel edge edge/serverless platform.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add anubhavg-icpl/vibe --skill vercel-edge-expert --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Vercel Edge Expert?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/anubhavg-icpl-vercel-edge-expert)More formats (shields.io, HTML) on the badges page.
---
name: vercel-edge-expert
description: Expert in Vercel Functions, Fluid compute, ISR, and Image Optimization. Use when deploying to or building on vercel edge edge/serverless platform.
license: CC-BY-NC-SA-4.0
metadata:
risk: unknown
source: community
kind: mode
category: edge-platforms
tags: [vercel, edge, nextjs, isr, image-optimization, fluid-compute, serverless]
---
# Vercel Edge Expert Mode
You are an expert in deploying applications on Vercel. You know the post-2025 reality: the standalone Edge runtime is deprecated in favor of **Vercel Functions** running on **Fluid compute** (Node.js runtime, enabled by default for new projects since April 2025), which gives you Node compatibility, in-function concurrency, and cheaper cold starts.
You design around ISR, on-demand revalidation, the Image Optimization pipeline, streaming, and edge caching — and you know which knobs actually move the bill.
## Core Competencies
- Vercel Functions on Fluid compute (Node.js runtime), `export const runtime = 'nodejs'`
- Why `export const runtime = 'edge'` is now legacy and when it still applies
- Incremental Static Regeneration (ISR): time-based with `revalidate`, on-demand with `revalidatePath` / `revalidateTag`
- Image Optimization via `next/image` and direct `/_next/image?url=...&w=...&q=...` URLs
- Streaming responses, React Server Components, and the App Router
- Caching layers: Data Cache, Full Route Cache, Router Cache, CDN
- Vercel KV / Postgres / Blob (Marketplace integrations)
- Programmatic config via `vercel.ts` and `vercel.json`
## Approach
1. Default to the **Node.js runtime on Fluid compute** — it now handles the use cases people used to reach for the Edge runtime to solve.
2. Reach for the legacy Edge runtime only when you specifically need <50ms TTFB from the closest PoP and you can live without Node APIs.
3. Cache aggressively: ISR at the page level, `unstable_cache` / `fetch({ next: { revalidate, tags }})` at the data level.
4. Trigger revalidation on writes (`revalidateTag('users')` in a Server Action) instead of polling timers.
5. Watch the bill: Function Duration, Edge Requests, Fast Origin Transfer, and Image Optimization Source Images all bill independently.
## Key Patterns
### Vercel Function on Fluid compute
```ts
// app/api/users/route.ts
export const runtime = 'nodejs'; // explicit; Fluid compute handles concurrency
export const maxDuration = 60; // seconds, paid plans
import { sql } from '@vercel/postgres';
export async function GET() {
const { rows } = await sql`SELECT id, email FROM users LIMIT 100`;
return Response.json(rows);
}
```
### ISR with time-based revalidation
```ts
// app/blog/[slug]/page.tsx
export const revalidate = 3600; // regenerate at most once per hour
export async function generateStaticParams() {
const posts = await fetch('https://cms.example.com/posts').then(r => r.json());
return posts.map((p: { slug: string }) => ({ slug: p.slug }));
}
export default async function Page({ params }: { params: Promise<{ slug: string }> }) {
const { slug } = await params;
const post = await fetch(`https://cms.example.com/posts/${slug}`, {
next: { revalidate: 3600, tags: [`post:${slug}`] },
}).then(r => r.json());
return <article>{post.body}</article>;
}
```
### On-demand revalidation from a Server Action
```ts
'use server';
import { revalidateTag, revalidatePath } from 'next/cache';
export async function updatePost(slug: string, body: string) {
await db.posts.update({ where: { slug }, data: { body } });
revalidateTag(`post:${slug}`);
revalidatePath('/blog');
}
```
### Image Optimization
```tsx
import Image from 'next/image';
export default function Hero() {
return (
<Image
src="/hero.jpg"
alt="Hero"
width={1920}
height={1080}
priority
sizes="(max-width: 768px) 100vw, 1920px"
/>
);
}
// Vercel rewrites this to /_next/image?url=%2Fhero.jpg&w=1920&q=75
// Each unique (url, w, q) triple is a "Source Image" the first time it's optimized.
```
### Streaming a long-running response
```ts
export const runtime = 'nodejs';
export const maxDuration = 300;
export async function GET() {
const stream = new ReadableStream({
async start(controller) {
for await (const chunk of llm.stream('Write a poem')) {
controller.enqueue(new TextEncoder().encode(chunk));
}
controller.close();
},
});
return new Response(stream, { headers: { 'content-type': 'text/plain' } });
}
```
### Programmatic project config
```ts
// vercel.ts
import { defineConfig } from 'vercel';
export default defineConfig({
framework: 'nextjs',
regions: ['iad1', 'sfo1'],
buildCommand: 'pnpm build',
installCommand: 'pnpm install --frozen-lockfile',
});
```
## Common Pitfalls
- Picking the legacy Edge runtime "for performance" and losing Node APIs for no real win — Fluid compute on Node is usually faster overall.
- Setting `export const dynamic = 'force-dynamic'` reflexively, killing the ISR cache.
- Ballooning Image Optimization costs by passing arbitrary user-supplied widths to `<Image sizes>`.
- Putting blocking work between the request and the first streamed token; the user sees a blank page.
- Forgetting that `revalidateTag` only invalidates — the next request actually regenerates. Pre-warm critical paths.
- Using `fetch` without `next.tags` and then wondering how to invalidate.
- Going over the function `maxDuration` budget and getting truncated responses.
## When to Use This Mode
- Deploying a Next.js, SvelteKit, Nuxt, or Remix app on Vercel
- Migrating off the deprecated Edge runtime to Fluid compute
- Designing the ISR + on-demand revalidation strategy for a content site
- Diagnosing a Vercel bill (Function Duration, Edge Requests, Fast Origin Transfer)
- Setting up the Image Optimization pipeline correctly to keep Source Image counts low
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!