@intentsolutionsio/vercel-pack 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +67 -44
  3. package/package.json +4 -4
  4. package/skills/vercel-advanced-troubleshooting/SKILL.md +185 -195
  5. package/skills/vercel-advanced-troubleshooting/references/errors.md +11 -0
  6. package/skills/vercel-advanced-troubleshooting/references/evidence-collection-framework.md +34 -0
  7. package/skills/vercel-advanced-troubleshooting/references/examples.md +11 -0
  8. package/skills/vercel-advanced-troubleshooting/references/systematic-isolation.md +56 -0
  9. package/skills/vercel-advanced-troubleshooting/references/timing-analysis.md +35 -0
  10. package/skills/vercel-architecture-variants/SKILL.md +227 -216
  11. package/skills/vercel-architecture-variants/references/errors.md +11 -0
  12. package/skills/vercel-architecture-variants/references/examples.md +12 -0
  13. package/skills/vercel-architecture-variants/references/variant-a-monolith-(simple).md +44 -0
  14. package/skills/vercel-architecture-variants/references/variant-b-service-layer-(moderate).md +72 -0
  15. package/skills/vercel-architecture-variants/references/variant-c-microservice-(complex).md +81 -0
  16. package/skills/vercel-ci-integration/SKILL.md +183 -73
  17. package/skills/vercel-ci-integration/references/errors.md +10 -0
  18. package/skills/vercel-ci-integration/references/examples.md +36 -0
  19. package/skills/vercel-ci-integration/references/implementation.md +54 -0
  20. package/skills/vercel-common-errors/SKILL.md +164 -60
  21. package/skills/vercel-common-errors/references/errors.md +53 -0
  22. package/skills/vercel-common-errors/references/examples.md +23 -0
  23. package/skills/vercel-cost-tuning/SKILL.md +158 -145
  24. package/skills/vercel-cost-tuning/references/cost-estimation.md +34 -0
  25. package/skills/vercel-cost-tuning/references/cost-reduction-strategies.md +40 -0
  26. package/skills/vercel-cost-tuning/references/errors.md +11 -0
  27. package/skills/vercel-cost-tuning/references/examples.md +15 -0
  28. package/skills/vercel-data-handling/SKILL.md +202 -155
  29. package/skills/vercel-data-handling/references/errors.md +11 -0
  30. package/skills/vercel-data-handling/references/examples.md +27 -0
  31. package/skills/vercel-data-handling/references/implementation.md +223 -0
  32. package/skills/vercel-debug-bundle/SKILL.md +163 -67
  33. package/skills/vercel-debug-bundle/references/errors.md +12 -0
  34. package/skills/vercel-debug-bundle/references/examples.md +24 -0
  35. package/skills/vercel-debug-bundle/references/implementation.md +54 -0
  36. package/skills/vercel-deploy-integration/SKILL.md +163 -156
  37. package/skills/vercel-deploy-integration/references/errors.md +11 -0
  38. package/skills/vercel-deploy-integration/references/examples.md +21 -0
  39. package/skills/vercel-deploy-integration/references/google-cloud-run.md +36 -0
  40. package/skills/vercel-deploy-integration/references/vercel-deployment.md +35 -0
  41. package/skills/vercel-deploy-preview/SKILL.md +164 -39
  42. package/skills/vercel-edge-functions/SKILL.md +185 -37
  43. package/skills/vercel-enterprise-rbac/SKILL.md +185 -170
  44. package/skills/vercel-enterprise-rbac/references/errors.md +11 -0
  45. package/skills/vercel-enterprise-rbac/references/examples.md +12 -0
  46. package/skills/vercel-enterprise-rbac/references/role-implementation.md +33 -0
  47. package/skills/vercel-enterprise-rbac/references/sso-integration.md +35 -0
  48. package/skills/vercel-hello-world/SKILL.md +141 -55
  49. package/skills/vercel-incident-runbook/SKILL.md +186 -138
  50. package/skills/vercel-incident-runbook/references/errors.md +11 -0
  51. package/skills/vercel-incident-runbook/references/examples.md +10 -0
  52. package/skills/vercel-incident-runbook/references/immediate-actions-by-error-type.md +41 -0
  53. package/skills/vercel-install-auth/SKILL.md +130 -53
  54. package/skills/vercel-known-pitfalls/SKILL.md +235 -233
  55. package/skills/vercel-known-pitfalls/references/errors.md +11 -0
  56. package/skills/vercel-known-pitfalls/references/examples.md +12 -0
  57. package/skills/vercel-load-scale/SKILL.md +197 -204
  58. package/skills/vercel-load-scale/references/capacity-planning.md +47 -0
  59. package/skills/vercel-load-scale/references/errors.md +11 -0
  60. package/skills/vercel-load-scale/references/examples.md +26 -0
  61. package/skills/vercel-load-scale/references/load-testing-with-k6.md +59 -0
  62. package/skills/vercel-load-scale/references/scaling-patterns.md +65 -0
  63. package/skills/vercel-local-dev-loop/SKILL.md +159 -71
  64. package/skills/vercel-local-dev-loop/references/errors.md +11 -0
  65. package/skills/vercel-local-dev-loop/references/examples.md +21 -0
  66. package/skills/vercel-local-dev-loop/references/implementation.md +60 -0
  67. package/skills/vercel-migration-deep-dive/SKILL.md +202 -187
  68. package/skills/vercel-migration-deep-dive/references/errors.md +11 -0
  69. package/skills/vercel-migration-deep-dive/references/examples.md +12 -0
  70. package/skills/vercel-migration-deep-dive/references/implementation-plan.md +80 -0
  71. package/skills/vercel-migration-deep-dive/references/pre-migration-assessment.md +39 -0
  72. package/skills/vercel-multi-env-setup/SKILL.md +167 -164
  73. package/skills/vercel-multi-env-setup/references/configuration-structure.md +59 -0
  74. package/skills/vercel-multi-env-setup/references/errors.md +11 -0
  75. package/skills/vercel-multi-env-setup/references/examples.md +11 -0
  76. package/skills/vercel-observability/SKILL.md +205 -195
  77. package/skills/vercel-observability/references/alert-configuration.md +40 -0
  78. package/skills/vercel-observability/references/errors.md +11 -0
  79. package/skills/vercel-observability/references/examples.md +13 -0
  80. package/skills/vercel-observability/references/metrics-collection.md +65 -0
  81. package/skills/vercel-performance-tuning/SKILL.md +212 -156
  82. package/skills/vercel-performance-tuning/references/caching-strategy.md +49 -0
  83. package/skills/vercel-performance-tuning/references/errors.md +11 -0
  84. package/skills/vercel-performance-tuning/references/examples.md +13 -0
  85. package/skills/vercel-policy-guardrails/SKILL.md +276 -193
  86. package/skills/vercel-policy-guardrails/references/errors.md +11 -0
  87. package/skills/vercel-policy-guardrails/references/eslint-rules.md +46 -0
  88. package/skills/vercel-policy-guardrails/references/examples.md +10 -0
  89. package/skills/vercel-prod-checklist/SKILL.md +219 -94
  90. package/skills/vercel-prod-checklist/references/errors.md +11 -0
  91. package/skills/vercel-prod-checklist/references/examples.md +25 -0
  92. package/skills/vercel-prod-checklist/references/implementation.md +60 -0
  93. package/skills/vercel-rate-limits/SKILL.md +187 -100
  94. package/skills/vercel-rate-limits/references/errors.md +11 -0
  95. package/skills/vercel-rate-limits/references/examples.md +46 -0
  96. package/skills/vercel-rate-limits/references/implementation.md +66 -0
  97. package/skills/vercel-reference-architecture/SKILL.md +226 -180
  98. package/skills/vercel-reference-architecture/references/errors.md +11 -0
  99. package/skills/vercel-reference-architecture/references/examples.md +13 -0
  100. package/skills/vercel-reference-architecture/references/key-components.md +65 -0
  101. package/skills/vercel-reference-architecture/references/project-structure.md +40 -0
  102. package/skills/vercel-reliability-patterns/SKILL.md +272 -211
  103. package/skills/vercel-reliability-patterns/references/circuit-breaker.md +36 -0
  104. package/skills/vercel-reliability-patterns/references/dead-letter-queue.md +48 -0
  105. package/skills/vercel-reliability-patterns/references/errors.md +11 -0
  106. package/skills/vercel-reliability-patterns/references/examples.md +11 -0
  107. package/skills/vercel-reliability-patterns/references/idempotency-keys.md +36 -0
  108. package/skills/vercel-sdk-patterns/SKILL.md +264 -92
  109. package/skills/vercel-sdk-patterns/references/errors.md +11 -0
  110. package/skills/vercel-sdk-patterns/references/examples.md +45 -0
  111. package/skills/vercel-sdk-patterns/references/implementation.md +67 -0
  112. package/skills/vercel-security-basics/SKILL.md +186 -96
  113. package/skills/vercel-security-basics/references/errors.md +10 -0
  114. package/skills/vercel-security-basics/references/examples.md +70 -0
  115. package/skills/vercel-security-basics/references/implementation.md +39 -0
  116. package/skills/vercel-upgrade-migration/SKILL.md +167 -67
  117. package/skills/vercel-upgrade-migration/references/errors.md +10 -0
  118. package/skills/vercel-upgrade-migration/references/examples.md +51 -0
  119. package/skills/vercel-upgrade-migration/references/implementation.md +29 -0
  120. package/skills/vercel-webhooks-events/SKILL.md +208 -132
  121. package/skills/vercel-webhooks-events/references/errors.md +11 -0
  122. package/skills/vercel-webhooks-events/references/event-handler-pattern.md +37 -0
  123. package/skills/vercel-webhooks-events/references/examples.md +16 -0
  124. package/skills/vercel-webhooks-events/references/signature-verification.md +33 -0
@@ -1,214 +1,270 @@
1
1
  ---
2
2
  name: vercel-performance-tuning
3
- description: |
4
- Optimize Vercel API performance with caching, batching, and connection pooling.
5
- Use when experiencing slow API responses, implementing caching strategies,
6
- or optimizing request throughput for Vercel integrations.
3
+ description: 'Optimize Vercel deployment performance with caching, bundle optimization,
4
+ and cold start reduction.
5
+
6
+ Use when experiencing slow page loads, optimizing Core Web Vitals,
7
+
8
+ or reducing serverless function cold start times.
9
+
7
10
  Trigger with phrases like "vercel performance", "optimize vercel",
8
- "vercel latency", "vercel caching", "vercel slow", "vercel batch".
9
- allowed-tools: Read, Write, Edit
11
+
12
+ "vercel latency", "vercel caching", "vercel slow", "vercel cold start".
13
+
14
+ '
15
+ allowed-tools: Read, Write, Edit, Bash(vercel:*), Bash(npx:*)
10
16
  version: 1.0.0
11
17
  license: MIT
12
18
  author: Jeremy Longshore <jeremy@intentsolutions.io>
19
+ tags:
20
+ - saas
21
+ - vercel
22
+ - performance
23
+ - caching
24
+ - optimization
25
+ compatibility: Designed for Claude Code, also compatible with Codex and OpenClaw
13
26
  ---
14
-
15
27
  # Vercel Performance Tuning
16
28
 
17
29
  ## Overview
18
- Optimize Vercel API performance with caching, batching, and connection pooling.
30
+
31
+ 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.
19
32
 
20
33
  ## Prerequisites
21
- - Vercel SDK installed
22
- - Understanding of async patterns
23
- - Redis or in-memory cache available (optional)
24
- - Performance monitoring in place
25
34
 
26
- ## Latency Benchmarks
35
+ - Vercel project deployed with accessible URL
36
+ - Access to Vercel Analytics (dashboard)
37
+ - Bundle analyzer available (`@next/bundle-analyzer` or similar)
27
38
 
28
- | Operation | P50 | P95 | P99 |
29
- |-----------|-----|-----|-----|
30
- | Cold Start (Serverless) | 250ms | 500ms | 1000ms |
31
- | Cold Start (Edge) | 5ms | 25ms | 50ms |
32
- | Build Time | 30s | 120s | 300s |
39
+ ## Instructions
33
40
 
34
- ## Caching Strategy
41
+ ### Step 1: Establish Performance Baseline
35
42
 
36
- ### Response Caching
37
- ```typescript
38
- import { LRUCache } from 'lru-cache';
39
-
40
- const cache = new LRUCache<string, any>({
41
- max: 1000,
42
- ttl: 31536000000, // 1 minute
43
- updateAgeOnGet: true,
44
- });
45
-
46
- async function cachedVercelRequest<T>(
47
- key: string,
48
- fetcher: () => Promise<T>,
49
- ttl?: number
50
- ): Promise<T> {
51
- const cached = cache.get(key);
52
- if (cached) return cached as T;
53
-
54
- const result = await fetcher();
55
- cache.set(key, result, { ttl });
56
- return result;
57
- }
43
+ ```bash
44
+ # Check deployment size and function count
45
+ vercel inspect https://my-app.vercel.app
46
+
47
+ # Run Lighthouse via CLI
48
+ npx lighthouse https://my-app.vercel.app --output=json --quiet \
49
+ | jq '{performance: .categories.performance.score, lcp: .audits["largest-contentful-paint"].numericValue, cls: .audits["cumulative-layout-shift"].numericValue}'
50
+
51
+ # Check bundle size (Next.js)
52
+ ANALYZE=true npx next build
53
+ # Opens bundle analyzer report in browser
58
54
  ```
59
55
 
60
- ### Redis Caching (Distributed)
61
- ```typescript
62
- import Redis from 'ioredis';
56
+ Enable Vercel Analytics in the dashboard under **Analytics** tab for ongoing monitoring.
57
+
58
+ ### Step 2: Configure Edge Caching
63
59
 
64
- const redis = new Redis(process.env.REDIS_URL);
60
+ ```typescript
61
+ // api/cached-data.ts — cache API responses at the edge
62
+ import type { VercelRequest, VercelResponse } from '@vercel/node';
65
63
 
66
- async function cachedWithRedis<T>(
67
- key: string,
68
- fetcher: () => Promise<T>,
69
- ttlSeconds = 60
70
- ): Promise<T> {
71
- const cached = await redis.get(key);
72
- if (cached) return JSON.parse(cached);
64
+ export default function handler(req: VercelRequest, res: VercelResponse) {
65
+ // Cache at Vercel edge for 60s, serve stale for 300s while revalidating
66
+ res.setHeader('Cache-Control', 's-maxage=60, stale-while-revalidate=300');
67
+ res.json({ data: fetchData(), cachedAt: new Date().toISOString() });
68
+ }
69
+ ```
73
70
 
74
- const result = await fetcher();
75
- await redis.setex(key, ttlSeconds, JSON.stringify(result));
76
- return result;
71
+ ```json
72
+ // vercel.json cache static assets aggressively
73
+ {
74
+ "headers": [
75
+ {
76
+ "source": "/static/(.*)",
77
+ "headers": [
78
+ { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
79
+ ]
80
+ },
81
+ {
82
+ "source": "/api/public-data",
83
+ "headers": [
84
+ { "key": "Cache-Control", "value": "s-maxage=3600, stale-while-revalidate=86400" }
85
+ ]
86
+ }
87
+ ]
77
88
  }
78
89
  ```
79
90
 
80
- ## Request Batching
91
+ Cache header reference:
92
+
93
+ | Header | Effect |
94
+ |--------|--------|
95
+ | `s-maxage=N` | Cache at Vercel edge for N seconds |
96
+ | `stale-while-revalidate=N` | Serve stale while revalidating in background |
97
+ | `max-age=N` | Cache in browser for N seconds |
98
+ | `immutable` | Never revalidate (use with content-hashed filenames) |
99
+ | `no-cache` | Always revalidate (edge still caches) |
100
+ | `no-store` | Never cache anywhere |
101
+
102
+ ### Step 3: Incremental Static Regeneration (ISR)
81
103
 
82
104
  ```typescript
83
- import DataLoader from 'dataloader';
105
+ // app/products/[id]/page.tsx (Next.js App Router)
106
+ export const revalidate = 60; // Revalidate every 60 seconds
84
107
 
85
- const vercelLoader = new DataLoader<string, any>(
86
- async (ids) => {
87
- // Batch fetch from Vercel
88
- const results = await vercelClient.batchGet(ids);
89
- return ids.map(id => results.find(r => r.id === id) || null);
90
- },
91
- {
92
- maxBatchSize: 100,
93
- batchScheduleFn: callback => setTimeout(callback, 10),
94
- }
95
- );
96
-
97
- // Usage - automatically batched
98
- const [item1, item2, item3] = await Promise.all([
99
- vercelLoader.load('id-1'),
100
- vercelLoader.load('id-2'),
101
- vercelLoader.load('id-3'),
102
- ]);
108
+ export default async function ProductPage({ params }) {
109
+ const product = await fetchProduct(params.id);
110
+ return <ProductView product={product} />;
111
+ }
112
+
113
+ // Generate static pages at build time, regenerate on-demand
114
+ export async function generateStaticParams() {
115
+ const products = await fetchTopProducts(100);
116
+ return products.map(p => ({ id: p.id }));
117
+ }
103
118
  ```
104
119
 
105
- ## Connection Optimization
120
+ On-demand revalidation via API route:
106
121
 
107
122
  ```typescript
108
- import { Agent } from 'https';
109
-
110
- // Keep-alive connection pooling
111
- const agent = new Agent({
112
- keepAlive: true,
113
- maxSockets: None,
114
- maxFreeSockets: 5,
115
- timeout: 10000,
116
- });
117
-
118
- const client = new VercelClient({
119
- apiKey: process.env.VERCEL_API_KEY!,
120
- httpAgent: agent,
121
- });
123
+ // api/revalidate.ts
124
+ import type { VercelRequest, VercelResponse } from '@vercel/node';
125
+
126
+ export default async function handler(req: VercelRequest, res: VercelResponse) {
127
+ const secret = req.query.secret;
128
+ if (secret !== process.env.REVALIDATION_SECRET) {
129
+ return res.status(401).json({ error: 'Invalid secret' });
130
+ }
131
+
132
+ const path = req.query.path as string;
133
+ await res.revalidate(path);
134
+ res.json({ revalidated: true, path });
135
+ }
136
+ // Trigger: POST /api/revalidate?secret=xxx&path=/products/123
122
137
  ```
123
138
 
124
- ## Pagination Optimization
139
+ ### Step 4: Reduce Cold Starts
125
140
 
126
141
  ```typescript
127
- async function* paginatedVercelList<T>(
128
- fetcher: (cursor?: string) => Promise<{ data: T[]; nextCursor?: string }>
129
- ): AsyncGenerator<T> {
130
- let cursor: string | undefined;
131
-
132
- do {
133
- const { data, nextCursor } = await fetcher(cursor);
134
- for (const item of data) {
135
- yield item;
136
- }
137
- cursor = nextCursor;
138
- } while (cursor);
142
+ // Lazy initialization — don't import heavy modules at top level
143
+ // BAD: Cold start loads everything
144
+ import { PrismaClient } from '@prisma/client';
145
+ const prisma = new PrismaClient(); // Runs on every cold start
146
+
147
+ // GOOD: Lazy singleton — only connects when first used
148
+ let prisma: PrismaClient | null = null;
149
+ function getDb(): PrismaClient {
150
+ if (!prisma) {
151
+ prisma = new PrismaClient();
152
+ }
153
+ return prisma;
139
154
  }
140
155
 
141
- // Usage
142
- for await (const item of paginatedVercelList(cursor =>
143
- vercelClient.list({ cursor, limit: 100 })
144
- )) {
145
- await process(item);
156
+ export default async function handler(req, res) {
157
+ const users = await getDb().user.findMany();
158
+ res.json(users);
146
159
  }
147
160
  ```
148
161
 
149
- ## Performance Monitoring
162
+ Move latency-critical paths to Edge Functions (zero cold starts):
150
163
 
151
164
  ```typescript
152
- async function measuredVercelCall<T>(
153
- operation: string,
154
- fn: () => Promise<T>
155
- ): Promise<T> {
156
- const start = performance.now();
157
- try {
158
- const result = await fn();
159
- const duration = performance.now() - start;
160
- console.log({ operation, duration, status: 'success' });
161
- return result;
162
- } catch (error) {
163
- const duration = performance.now() - start;
164
- console.error({ operation, duration, status: 'error', error });
165
- throw error;
166
- }
165
+ // api/fast.ts
166
+ export const config = { runtime: 'edge' };
167
+
168
+ export default function handler(request: Request) {
169
+ return Response.json({ fast: true }); // No cold start, runs globally
167
170
  }
168
171
  ```
169
172
 
170
- ## Instructions
173
+ ### Step 5: Bundle Size Optimization
174
+
175
+ ```javascript
176
+ // next.config.js — tree-shaking and optimization
177
+ module.exports = {
178
+ experimental: {
179
+ optimizePackageImports: ['lodash', '@mui/material', '@mui/icons-material'],
180
+ },
181
+ // Exclude server-only deps from client bundle
182
+ webpack: (config, { isServer }) => {
183
+ if (!isServer) {
184
+ config.resolve.fallback = { fs: false, net: false, tls: false };
185
+ }
186
+ return config;
187
+ },
188
+ };
189
+ ```
190
+
191
+ ```bash
192
+ # Find large dependencies
193
+ npx depcheck
194
+ npx cost-of-modules
195
+
196
+ # Replace heavy libraries with lighter alternatives
197
+ # moment.js (300KB) → dayjs (2KB)
198
+ # lodash (72KB) → lodash-es with tree-shaking
199
+ # axios (29KB) → native fetch
200
+ ```
171
201
 
172
- ### Step 1: Establish Baseline
173
- Measure current latency for critical Vercel operations.
202
+ ### Step 6: Image Optimization
174
203
 
175
- ### Step 2: Implement Caching
176
- Add response caching for frequently accessed data.
204
+ ```typescript
205
+ // Use Vercel's built-in image optimization
206
+ import Image from 'next/image';
207
+
208
+ // Automatic: resizes, converts to WebP/AVIF, caches at edge
209
+ <Image
210
+ src="/hero.jpg"
211
+ width={1200}
212
+ height={600}
213
+ alt="Hero"
214
+ priority // Preload for LCP
215
+ sizes="(max-width: 768px) 100vw, 1200px"
216
+ />
217
+ ```
177
218
 
178
- ### Step 3: Enable Batching
179
- Use DataLoader or similar for automatic request batching.
219
+ ```json
220
+ // vercel.json configure image optimization
221
+ {
222
+ "images": {
223
+ "sizes": [640, 750, 828, 1080, 1200],
224
+ "domains": ["images.example.com"],
225
+ "formats": ["image/avif", "image/webp"],
226
+ "minimumCacheTTL": 86400
227
+ }
228
+ }
229
+ ```
230
+
231
+ ## Performance Budget Reference
180
232
 
181
- ### Step 4: Optimize Connections
182
- Configure connection pooling with keep-alive.
233
+ | Metric | Target | Vercel Tool |
234
+ |--------|--------|-------------|
235
+ | LCP | < 2.5s | Vercel Analytics |
236
+ | FID/INP | < 200ms | Vercel Analytics |
237
+ | CLS | < 0.1 | Vercel Analytics |
238
+ | TTFB | < 200ms | Edge caching |
239
+ | Function cold start | < 500ms | Lazy init / Edge Functions |
240
+ | Bundle size (gzipped) | < 200KB JS | Bundle analyzer |
183
241
 
184
242
  ## Output
185
- - Reduced API latency
186
- - Caching layer implemented
187
- - Request batching enabled
188
- - Connection pooling configured
189
243
 
190
- ## Error Handling
191
- | Issue | Cause | Solution |
192
- |-------|-------|----------|
193
- | Cache miss storm | TTL expired | Use stale-while-revalidate |
194
- | Batch timeout | Too many items | Reduce batch size |
195
- | Connection exhausted | No pooling | Configure max sockets |
196
- | Memory pressure | Cache too large | Set max cache entries |
244
+ - Edge caching configured with optimal cache-control headers
245
+ - ISR or on-demand revalidation for dynamic pages
246
+ - Cold starts eliminated via lazy initialization and Edge Functions
247
+ - Bundle size reduced through tree-shaking and import optimization
248
+ - Image optimization configured
197
249
 
198
- ## Examples
250
+ ## Error Handling
199
251
 
200
- ### Quick Performance Wrapper
201
- ```typescript
202
- const withPerformance = <T>(name: string, fn: () => Promise<T>) =>
203
- measuredVercelCall(name, () =>
204
- cachedVercelRequest(`cache:${name}`, fn)
205
- );
206
- ```
252
+ | Error | Cause | Solution |
253
+ |-------|-------|----------|
254
+ | Cache not hitting | Missing `s-maxage` header | Add to response or vercel.json headers |
255
+ | ISR page always stale | `revalidate` set too high | Lower the revalidation interval |
256
+ | Large bundle warning | Importing entire library | Use specific imports: `import { map } from 'lodash-es'` |
257
+ | Cold start > 1s | Heavy top-level imports | Move to lazy initialization pattern |
258
+ | Images not optimized | External domain not whitelisted | Add to `images.domains` in config |
207
259
 
208
260
  ## Resources
209
- - [Vercel Performance Guide](https://vercel.com/docs/performance)
210
- - [DataLoader Documentation](https://github.com/graphql/dataloader)
211
- - [LRU Cache Documentation](https://github.com/isaacs/node-lru-cache)
261
+
262
+ - [Vercel Caching](https://vercel.com/docs/edge-network/caching)
263
+ - [ISR Documentation](https://vercel.com/docs/incremental-static-regeneration)
264
+ - [Vercel Analytics](https://vercel.com/docs/analytics)
265
+ - [Image Optimization](https://vercel.com/docs/image-optimization)
266
+ - [Function Configuration](https://vercel.com/docs/functions/configuring-functions)
212
267
 
213
268
  ## Next Steps
214
- For cost optimization, see `vercel-cost-tuning`.
269
+
270
+ For cost optimization, see `vercel-cost-tuning`.
@@ -0,0 +1,49 @@
1
+ # Caching Strategy
2
+
3
+ ## Caching Strategy
4
+
5
+ ### Response Caching
6
+
7
+ ```typescript
8
+ import { LRUCache } from 'lru-cache';
9
+
10
+ const cache = new LRUCache<string, any>({
11
+ max: 1000,
12
+ ttl: 31536000000, // 1 minute
13
+ updateAgeOnGet: true,
14
+ });
15
+
16
+ async function cachedVercelRequest<T>(
17
+ key: string,
18
+ fetcher: () => Promise<T>,
19
+ ttl?: number
20
+ ): Promise<T> {
21
+ const cached = cache.get(key);
22
+ if (cached) return cached as T;
23
+
24
+ const result = await fetcher();
25
+ cache.set(key, result, { ttl });
26
+ return result;
27
+ }
28
+ ```
29
+
30
+ ### Redis Caching (Distributed)
31
+
32
+ ```typescript
33
+ import Redis from 'ioredis';
34
+
35
+ const redis = new Redis(process.env.REDIS_URL);
36
+
37
+ async function cachedWithRedis<T>(
38
+ key: string,
39
+ fetcher: () => Promise<T>,
40
+ ttlSeconds = 60
41
+ ): Promise<T> {
42
+ const cached = await redis.get(key);
43
+ if (cached) return JSON.parse(cached);
44
+
45
+ const result = await fetcher();
46
+ await redis.setex(key, ttlSeconds, JSON.stringify(result));
47
+ return result;
48
+ }
49
+ ```
@@ -0,0 +1,11 @@
1
+ # Error Handling Reference
2
+
3
+ | Issue | Cause | Solution |
4
+ |-------|-------|----------|
5
+ | Cache miss storm | TTL expired | Use stale-while-revalidate |
6
+ | Batch timeout | Too many items | Reduce batch size |
7
+ | Connection exhausted | No pooling | Configure max sockets |
8
+ | Memory pressure | Cache too large | Set max cache entries |
9
+
10
+ ---
11
+ *[Tons of Skills](https://tonsofskills.com) by [Intent Solutions](https://intentsolutions.io) | [jeremylongshore.com](https://jeremylongshore.com)*
@@ -0,0 +1,13 @@
1
+ ## Examples
2
+
3
+ ### Quick Performance Wrapper
4
+
5
+ ```typescript
6
+ const withPerformance = <T>(name: string, fn: () => Promise<T>) =>
7
+ measuredVercelCall(name, () =>
8
+ cachedVercelRequest(`cache:${name}`, fn)
9
+ );
10
+ ```
11
+
12
+ ---
13
+ *[Tons of Skills](https://tonsofskills.com) by [Intent Solutions](https://intentsolutions.io) | [jeremylongshore.com](https://jeremylongshore.com)*