@girardmedia/bootspring 1.2.0 → 2.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 (253) hide show
  1. package/README.md +107 -14
  2. package/bin/bootspring.js +166 -27
  3. package/cli/agent.js +189 -17
  4. package/cli/analyze.js +499 -0
  5. package/cli/audit.js +557 -0
  6. package/cli/auth.js +495 -38
  7. package/cli/billing.js +302 -0
  8. package/cli/build.js +695 -0
  9. package/cli/business.js +109 -26
  10. package/cli/checkpoint-utils.js +168 -0
  11. package/cli/checkpoint.js +639 -0
  12. package/cli/cloud-sync.js +447 -0
  13. package/cli/content.js +198 -0
  14. package/cli/context.js +1 -1
  15. package/cli/deploy.js +543 -0
  16. package/cli/fundraise.js +112 -50
  17. package/cli/github-cmd.js +435 -0
  18. package/cli/health.js +477 -0
  19. package/cli/init.js +84 -13
  20. package/cli/legal.js +107 -95
  21. package/cli/log.js +2 -2
  22. package/cli/loop.js +976 -73
  23. package/cli/manager.js +711 -0
  24. package/cli/metrics.js +480 -0
  25. package/cli/monitor.js +812 -0
  26. package/cli/onboard.js +521 -0
  27. package/cli/orchestrator.js +12 -24
  28. package/cli/prd.js +594 -0
  29. package/cli/preseed-start.js +1483 -0
  30. package/cli/preseed.js +2302 -0
  31. package/cli/project.js +436 -0
  32. package/cli/quality.js +233 -0
  33. package/cli/security.js +913 -0
  34. package/cli/seed.js +1441 -5
  35. package/cli/skill.js +273 -211
  36. package/cli/suggest.js +989 -0
  37. package/cli/switch.js +453 -0
  38. package/cli/visualize.js +527 -0
  39. package/cli/watch.js +769 -0
  40. package/cli/workspace.js +607 -0
  41. package/core/analyze-workflow.js +1134 -0
  42. package/core/api-client.js +535 -22
  43. package/core/audit-workflow.js +1350 -0
  44. package/core/build-orchestrator.js +480 -0
  45. package/core/build-state.js +577 -0
  46. package/core/checkpoint-engine.js +408 -0
  47. package/core/config.js +1109 -26
  48. package/core/context-loader.js +21 -1
  49. package/core/deploy-workflow.js +836 -0
  50. package/core/entitlements.js +93 -22
  51. package/core/github-sync.js +610 -0
  52. package/core/index.js +8 -1
  53. package/core/ingest.js +1111 -0
  54. package/core/metrics-engine.js +768 -0
  55. package/core/onboard-workflow.js +1007 -0
  56. package/core/preseed-workflow.js +934 -0
  57. package/core/preseed.js +1617 -0
  58. package/core/project-context.js +325 -0
  59. package/core/project-state.js +694 -0
  60. package/core/r2-sync.js +583 -0
  61. package/core/scaffold.js +525 -7
  62. package/core/session.js +258 -0
  63. package/core/task-extractor.js +758 -0
  64. package/core/telemetry.js +28 -6
  65. package/core/tier-enforcement.js +737 -0
  66. package/core/utils.js +38 -14
  67. package/generators/questionnaire.js +15 -12
  68. package/generators/sections/ai.js +7 -7
  69. package/generators/sections/content.js +300 -0
  70. package/generators/sections/index.js +3 -0
  71. package/generators/sections/plugins.js +7 -6
  72. package/generators/templates/build-planning.template.js +596 -0
  73. package/generators/templates/content.template.js +819 -0
  74. package/generators/templates/index.js +2 -1
  75. package/hooks/git-autopilot.js +1250 -0
  76. package/hooks/index.js +9 -0
  77. package/intelligence/agent-collab.js +2057 -0
  78. package/intelligence/auto-suggest.js +634 -0
  79. package/intelligence/content-gen.js +1589 -0
  80. package/intelligence/cross-project.js +1647 -0
  81. package/intelligence/index.js +184 -0
  82. package/intelligence/learning/insights.json +517 -7
  83. package/intelligence/learning/pattern-learner.js +1008 -14
  84. package/intelligence/memory/decision-tracker.js +1431 -31
  85. package/intelligence/memory/decisions.jsonl +0 -0
  86. package/intelligence/orchestrator.js +2896 -1
  87. package/intelligence/prd.js +92 -1
  88. package/intelligence/recommendation-weights.json +14 -2
  89. package/intelligence/recommendations.js +463 -9
  90. package/intelligence/workflow-composer.js +1451 -0
  91. package/marketplace/index.d.ts +324 -0
  92. package/marketplace/index.js +1921 -0
  93. package/mcp/contracts/mcp-contract.v1.json +342 -4
  94. package/mcp/registry.js +680 -3
  95. package/mcp/response-formatter.js +23 -0
  96. package/mcp/tools/assist-tool.js +78 -4
  97. package/mcp/tools/autopilot-tool.js +408 -0
  98. package/mcp/tools/content-tool.js +571 -0
  99. package/mcp/tools/dashboard-tool.js +251 -5
  100. package/mcp/tools/mvp-tool.js +344 -0
  101. package/mcp/tools/plugin-tool.js +23 -1
  102. package/mcp/tools/prd-tool.js +579 -0
  103. package/mcp/tools/seed-tool.js +447 -0
  104. package/mcp/tools/skill-tool.js +43 -14
  105. package/mcp/tools/suggest-tool.js +147 -0
  106. package/package.json +15 -6
  107. package/agents/README.md +0 -93
  108. package/agents/ai-integration-expert/context.md +0 -386
  109. package/agents/api-expert/context.md +0 -416
  110. package/agents/architecture-expert/context.md +0 -454
  111. package/agents/auth-expert/context.md +0 -399
  112. package/agents/backend-expert/context.md +0 -483
  113. package/agents/business-strategy-expert/context.md +0 -180
  114. package/agents/code-review-expert/context.md +0 -365
  115. package/agents/competitive-analysis-expert/context.md +0 -239
  116. package/agents/data-modeling-expert/context.md +0 -352
  117. package/agents/database-expert/context.md +0 -250
  118. package/agents/devops-expert/context.md +0 -446
  119. package/agents/email-expert/context.md +0 -379
  120. package/agents/financial-expert/context.md +0 -213
  121. package/agents/frontend-expert/context.md +0 -364
  122. package/agents/fundraising-expert/context.md +0 -257
  123. package/agents/growth-expert/context.md +0 -249
  124. package/agents/index.js +0 -140
  125. package/agents/investor-relations-expert/context.md +0 -266
  126. package/agents/legal-expert/context.md +0 -284
  127. package/agents/marketing-expert/context.md +0 -236
  128. package/agents/monitoring-expert/context.md +0 -362
  129. package/agents/operations-expert/context.md +0 -279
  130. package/agents/partnerships-expert/context.md +0 -286
  131. package/agents/payment-expert/context.md +0 -340
  132. package/agents/performance-expert/context.md +0 -377
  133. package/agents/private-equity-expert/context.md +0 -246
  134. package/agents/railway-expert/context.md +0 -284
  135. package/agents/research-expert/context.md +0 -245
  136. package/agents/sales-expert/context.md +0 -241
  137. package/agents/security-expert/context.md +0 -343
  138. package/agents/testing-expert/context.md +0 -414
  139. package/agents/ui-ux-expert/context.md +0 -448
  140. package/agents/vercel-expert/context.md +0 -426
  141. package/skills/index.js +0 -787
  142. package/skills/patterns/README.md +0 -163
  143. package/skills/patterns/ai/agents.md +0 -281
  144. package/skills/patterns/ai/claude.md +0 -138
  145. package/skills/patterns/ai/embeddings.md +0 -150
  146. package/skills/patterns/ai/rag.md +0 -266
  147. package/skills/patterns/ai/streaming.md +0 -170
  148. package/skills/patterns/ai/structured-output.md +0 -162
  149. package/skills/patterns/ai/tools.md +0 -154
  150. package/skills/patterns/analytics/tracking.md +0 -220
  151. package/skills/patterns/api/errors.md +0 -296
  152. package/skills/patterns/api/graphql.md +0 -440
  153. package/skills/patterns/api/middleware.md +0 -279
  154. package/skills/patterns/api/openapi.md +0 -285
  155. package/skills/patterns/api/rate-limiting.md +0 -231
  156. package/skills/patterns/api/route-handler.md +0 -217
  157. package/skills/patterns/api/server-action.md +0 -249
  158. package/skills/patterns/api/versioning.md +0 -443
  159. package/skills/patterns/api/webhooks.md +0 -247
  160. package/skills/patterns/auth/clerk.md +0 -132
  161. package/skills/patterns/auth/mfa.md +0 -313
  162. package/skills/patterns/auth/nextauth.md +0 -140
  163. package/skills/patterns/auth/oauth.md +0 -237
  164. package/skills/patterns/auth/rbac.md +0 -152
  165. package/skills/patterns/auth/session-management.md +0 -367
  166. package/skills/patterns/auth/session.md +0 -120
  167. package/skills/patterns/database/audit.md +0 -177
  168. package/skills/patterns/database/migrations.md +0 -177
  169. package/skills/patterns/database/pagination.md +0 -230
  170. package/skills/patterns/database/pooling.md +0 -357
  171. package/skills/patterns/database/prisma.md +0 -180
  172. package/skills/patterns/database/relations.md +0 -187
  173. package/skills/patterns/database/seeding.md +0 -246
  174. package/skills/patterns/database/soft-delete.md +0 -153
  175. package/skills/patterns/database/transactions.md +0 -162
  176. package/skills/patterns/deployment/ci-cd.md +0 -231
  177. package/skills/patterns/deployment/docker.md +0 -188
  178. package/skills/patterns/deployment/monitoring.md +0 -387
  179. package/skills/patterns/deployment/vercel.md +0 -160
  180. package/skills/patterns/email/resend.md +0 -143
  181. package/skills/patterns/email/templates.md +0 -245
  182. package/skills/patterns/email/transactional.md +0 -503
  183. package/skills/patterns/email/verification.md +0 -176
  184. package/skills/patterns/files/download.md +0 -243
  185. package/skills/patterns/files/upload.md +0 -239
  186. package/skills/patterns/i18n/nextintl.md +0 -188
  187. package/skills/patterns/logging/structured.md +0 -292
  188. package/skills/patterns/notifications/email-queue.md +0 -248
  189. package/skills/patterns/notifications/push.md +0 -279
  190. package/skills/patterns/payments/checkout.md +0 -303
  191. package/skills/patterns/payments/invoices.md +0 -287
  192. package/skills/patterns/payments/portal.md +0 -245
  193. package/skills/patterns/payments/stripe.md +0 -272
  194. package/skills/patterns/payments/subscriptions.md +0 -300
  195. package/skills/patterns/payments/usage.md +0 -279
  196. package/skills/patterns/performance/caching.md +0 -276
  197. package/skills/patterns/performance/code-splitting.md +0 -233
  198. package/skills/patterns/performance/edge.md +0 -254
  199. package/skills/patterns/performance/isr.md +0 -266
  200. package/skills/patterns/performance/lazy-loading.md +0 -281
  201. package/skills/patterns/realtime/sse.md +0 -327
  202. package/skills/patterns/realtime/websockets.md +0 -336
  203. package/skills/patterns/search/filtering.md +0 -329
  204. package/skills/patterns/search/fulltext.md +0 -260
  205. package/skills/patterns/security/audit-logging.md +0 -444
  206. package/skills/patterns/security/csrf.md +0 -234
  207. package/skills/patterns/security/headers.md +0 -252
  208. package/skills/patterns/security/sanitization.md +0 -258
  209. package/skills/patterns/security/secrets.md +0 -261
  210. package/skills/patterns/security/validation.md +0 -268
  211. package/skills/patterns/security/xss.md +0 -229
  212. package/skills/patterns/seo/metadata.md +0 -252
  213. package/skills/patterns/state/context.md +0 -349
  214. package/skills/patterns/state/react-query.md +0 -313
  215. package/skills/patterns/state/url-state.md +0 -482
  216. package/skills/patterns/state/zustand.md +0 -262
  217. package/skills/patterns/testing/api.md +0 -259
  218. package/skills/patterns/testing/component.md +0 -233
  219. package/skills/patterns/testing/coverage.md +0 -207
  220. package/skills/patterns/testing/fixtures.md +0 -225
  221. package/skills/patterns/testing/integration.md +0 -436
  222. package/skills/patterns/testing/mocking.md +0 -177
  223. package/skills/patterns/testing/playwright.md +0 -162
  224. package/skills/patterns/testing/snapshot.md +0 -175
  225. package/skills/patterns/testing/vitest.md +0 -307
  226. package/skills/patterns/ui/accordions.md +0 -395
  227. package/skills/patterns/ui/cards.md +0 -299
  228. package/skills/patterns/ui/dropdowns.md +0 -476
  229. package/skills/patterns/ui/empty-states.md +0 -320
  230. package/skills/patterns/ui/forms.md +0 -405
  231. package/skills/patterns/ui/inputs.md +0 -319
  232. package/skills/patterns/ui/layouts.md +0 -282
  233. package/skills/patterns/ui/loading.md +0 -291
  234. package/skills/patterns/ui/modals.md +0 -338
  235. package/skills/patterns/ui/navigation.md +0 -374
  236. package/skills/patterns/ui/tables.md +0 -407
  237. package/skills/patterns/ui/toasts.md +0 -300
  238. package/skills/patterns/ui/tooltips.md +0 -396
  239. package/skills/patterns/utils/dates.md +0 -435
  240. package/skills/patterns/utils/errors.md +0 -451
  241. package/skills/patterns/utils/formatting.md +0 -345
  242. package/skills/patterns/utils/validation.md +0 -434
  243. package/templates/bootspring.config.js +0 -83
  244. package/templates/business/business-model-canvas.md +0 -246
  245. package/templates/business/business-plan.md +0 -266
  246. package/templates/business/competitive-analysis.md +0 -312
  247. package/templates/fundraising/data-room-checklist.md +0 -300
  248. package/templates/fundraising/investor-research.md +0 -243
  249. package/templates/fundraising/pitch-deck-outline.md +0 -253
  250. package/templates/legal/gdpr-checklist.md +0 -339
  251. package/templates/legal/privacy-policy.md +0 -285
  252. package/templates/legal/terms-of-service.md +0 -222
  253. package/templates/mcp.json +0 -9
@@ -1,426 +0,0 @@
1
- # Vercel Expert Agent
2
-
3
- ## Role
4
- Specialized in Vercel platform deployment, Edge Functions, serverless configuration, environment management, and optimizing Next.js apps for Vercel hosting.
5
-
6
- ## Core Expertise
7
-
8
- ### Vercel Project Configuration
9
-
10
- ```json
11
- // vercel.json
12
- {
13
- "framework": "nextjs",
14
- "buildCommand": "npm run build",
15
- "devCommand": "npm run dev",
16
- "installCommand": "npm install",
17
- "regions": ["iad1"],
18
- "functions": {
19
- "app/api/**/*.ts": {
20
- "maxDuration": 30
21
- }
22
- },
23
- "headers": [
24
- {
25
- "source": "/api/(.*)",
26
- "headers": [
27
- { "key": "Access-Control-Allow-Origin", "value": "*" }
28
- ]
29
- }
30
- ],
31
- "redirects": [
32
- {
33
- "source": "/old-path",
34
- "destination": "/new-path",
35
- "permanent": true
36
- }
37
- ],
38
- "rewrites": [
39
- {
40
- "source": "/blog/:slug",
41
- "destination": "/posts/:slug"
42
- }
43
- ]
44
- }
45
- ```
46
-
47
- ### Edge Functions
48
-
49
- ```typescript
50
- // app/api/edge/route.ts
51
- export const runtime = 'edge';
52
-
53
- export async function GET(request: Request) {
54
- const { searchParams } = new URL(request.url);
55
- const country = request.headers.get('x-vercel-ip-country') ?? 'US';
56
-
57
- // Edge-compatible code only
58
- // No Node.js APIs (fs, path, etc.)
59
- // No Prisma (use Prisma Accelerate or Data Proxy)
60
-
61
- return new Response(JSON.stringify({
62
- message: 'Hello from the edge!',
63
- country,
64
- }), {
65
- headers: { 'Content-Type': 'application/json' },
66
- });
67
- }
68
-
69
- // Middleware (runs on Edge by default)
70
- // middleware.ts
71
- import { NextResponse } from 'next/server';
72
- import type { NextRequest } from 'next/server';
73
-
74
- export function middleware(request: NextRequest) {
75
- const country = request.geo?.country ?? 'US';
76
- const response = NextResponse.next();
77
-
78
- // Add custom headers
79
- response.headers.set('x-country', country);
80
-
81
- // Geo-based redirect
82
- if (country === 'DE' && !request.nextUrl.pathname.startsWith('/de')) {
83
- return NextResponse.redirect(new URL('/de' + request.nextUrl.pathname, request.url));
84
- }
85
-
86
- return response;
87
- }
88
-
89
- export const config = {
90
- matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
91
- };
92
- ```
93
-
94
- ### Environment Variables
95
-
96
- ```bash
97
- # Vercel Environment Variables UI or CLI
98
-
99
- # Production only
100
- vercel env add STRIPE_SECRET_KEY production
101
-
102
- # Preview and Production
103
- vercel env add DATABASE_URL preview production
104
-
105
- # All environments
106
- vercel env add NEXT_PUBLIC_APP_URL
107
-
108
- # Pull to local
109
- vercel env pull .env.local
110
- ```
111
-
112
- ```typescript
113
- // Validate at runtime
114
- // lib/env.ts
115
- import { z } from 'zod';
116
-
117
- const envSchema = z.object({
118
- // Server-only (no NEXT_PUBLIC_ prefix)
119
- DATABASE_URL: z.string().url(),
120
- CLERK_SECRET_KEY: z.string().min(1),
121
- STRIPE_SECRET_KEY: z.string().min(1),
122
-
123
- // Public (available in browser)
124
- NEXT_PUBLIC_APP_URL: z.string().url(),
125
- NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: z.string().min(1),
126
- });
127
-
128
- export const env = envSchema.parse({
129
- DATABASE_URL: process.env.DATABASE_URL,
130
- CLERK_SECRET_KEY: process.env.CLERK_SECRET_KEY,
131
- STRIPE_SECRET_KEY: process.env.STRIPE_SECRET_KEY,
132
- NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
133
- NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY,
134
- });
135
- ```
136
-
137
- ### Serverless Function Configuration
138
-
139
- ```typescript
140
- // app/api/long-running/route.ts
141
-
142
- // Increase timeout (Pro plan: up to 300s)
143
- export const maxDuration = 60; // seconds
144
-
145
- // Force dynamic rendering
146
- export const dynamic = 'force-dynamic';
147
-
148
- // Specify region
149
- export const preferredRegion = 'iad1';
150
-
151
- // Or edge runtime
152
- // export const runtime = 'edge';
153
-
154
- export async function POST(request: Request) {
155
- // Long-running operation
156
- const result = await processLargeDataset();
157
- return Response.json(result);
158
- }
159
- ```
160
-
161
- ### Caching & ISR
162
-
163
- ```typescript
164
- // app/posts/page.tsx
165
-
166
- // Revalidate every hour
167
- export const revalidate = 3600;
168
-
169
- // Or use fetch with revalidation
170
- async function getPosts() {
171
- const res = await fetch('https://api.example.com/posts', {
172
- next: { revalidate: 3600 }
173
- });
174
- return res.json();
175
- }
176
-
177
- // On-demand revalidation
178
- // app/api/revalidate/route.ts
179
- import { revalidatePath, revalidateTag } from 'next/cache';
180
- import { NextRequest, NextResponse } from 'next/server';
181
-
182
- export async function POST(request: NextRequest) {
183
- const secret = request.headers.get('x-revalidate-secret');
184
-
185
- if (secret !== process.env.REVALIDATE_SECRET) {
186
- return NextResponse.json({ error: 'Invalid secret' }, { status: 401 });
187
- }
188
-
189
- const { path, tag } = await request.json();
190
-
191
- if (path) {
192
- revalidatePath(path);
193
- }
194
-
195
- if (tag) {
196
- revalidateTag(tag);
197
- }
198
-
199
- return NextResponse.json({ revalidated: true, now: Date.now() });
200
- }
201
- ```
202
-
203
- ### Vercel Blob Storage
204
-
205
- ```typescript
206
- // app/api/upload/route.ts
207
- import { put, del, list } from '@vercel/blob';
208
- import { NextResponse } from 'next/server';
209
-
210
- export async function POST(request: Request) {
211
- const formData = await request.formData();
212
- const file = formData.get('file') as File;
213
-
214
- if (!file) {
215
- return NextResponse.json({ error: 'No file provided' }, { status: 400 });
216
- }
217
-
218
- // Upload to Vercel Blob
219
- const blob = await put(file.name, file, {
220
- access: 'public',
221
- addRandomSuffix: true, // Prevent overwrites
222
- });
223
-
224
- return NextResponse.json(blob);
225
- }
226
-
227
- export async function DELETE(request: Request) {
228
- const { url } = await request.json();
229
-
230
- await del(url);
231
-
232
- return NextResponse.json({ deleted: true });
233
- }
234
-
235
- // List blobs
236
- export async function GET() {
237
- const { blobs } = await list();
238
- return NextResponse.json(blobs);
239
- }
240
- ```
241
-
242
- ### Vercel KV (Redis)
243
-
244
- ```typescript
245
- // lib/kv.ts
246
- import { kv } from '@vercel/kv';
247
-
248
- // Cache user sessions
249
- export async function cacheSession(sessionId: string, data: SessionData) {
250
- await kv.set(`session:${sessionId}`, JSON.stringify(data), {
251
- ex: 60 * 60 * 24, // 24 hours
252
- });
253
- }
254
-
255
- export async function getSession(sessionId: string) {
256
- const data = await kv.get(`session:${sessionId}`);
257
- return data ? JSON.parse(data as string) : null;
258
- }
259
-
260
- // Rate limiting
261
- export async function checkRateLimit(ip: string, limit = 10, window = 60) {
262
- const key = `ratelimit:${ip}`;
263
- const count = await kv.incr(key);
264
-
265
- if (count === 1) {
266
- await kv.expire(key, window);
267
- }
268
-
269
- return {
270
- allowed: count <= limit,
271
- remaining: Math.max(0, limit - count),
272
- reset: await kv.ttl(key),
273
- };
274
- }
275
- ```
276
-
277
- ### Vercel Postgres
278
-
279
- ```typescript
280
- // lib/db.ts
281
- import { sql } from '@vercel/postgres';
282
-
283
- // Direct SQL queries
284
- export async function getUsers() {
285
- const { rows } = await sql`SELECT * FROM users LIMIT 10`;
286
- return rows;
287
- }
288
-
289
- // With parameters (safe from SQL injection)
290
- export async function getUserByEmail(email: string) {
291
- const { rows } = await sql`SELECT * FROM users WHERE email = ${email}`;
292
- return rows[0];
293
- }
294
-
295
- // Or use with Prisma
296
- // schema.prisma
297
- datasource db {
298
- provider = "postgresql"
299
- url = env("POSTGRES_PRISMA_URL")
300
- directUrl = env("POSTGRES_URL_NON_POOLING")
301
- }
302
- ```
303
-
304
- ### Preview Deployments
305
-
306
- ```typescript
307
- // Detect preview environment
308
- const isPreview = process.env.VERCEL_ENV === 'preview';
309
- const isProduction = process.env.VERCEL_ENV === 'production';
310
-
311
- // Preview-specific behavior
312
- if (isPreview) {
313
- // Use test Stripe keys
314
- // Show debug info
315
- // Use staging database
316
- }
317
-
318
- // Get deployment URL
319
- const deploymentUrl = process.env.VERCEL_URL
320
- ? `https://${process.env.VERCEL_URL}`
321
- : 'http://localhost:3000';
322
- ```
323
-
324
- ### Cron Jobs
325
-
326
- ```typescript
327
- // vercel.json
328
- {
329
- "crons": [
330
- {
331
- "path": "/api/cron/cleanup",
332
- "schedule": "0 0 * * *"
333
- },
334
- {
335
- "path": "/api/cron/sync",
336
- "schedule": "*/15 * * * *"
337
- }
338
- ]
339
- }
340
-
341
- // app/api/cron/cleanup/route.ts
342
- export async function GET(request: Request) {
343
- // Verify cron secret
344
- const authHeader = request.headers.get('authorization');
345
- if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {
346
- return new Response('Unauthorized', { status: 401 });
347
- }
348
-
349
- // Run cleanup
350
- await cleanupOldRecords();
351
-
352
- return Response.json({ success: true });
353
- }
354
- ```
355
-
356
- ### Analytics & Web Vitals
357
-
358
- ```typescript
359
- // app/components/Analytics.tsx
360
- import { Analytics } from '@vercel/analytics/react';
361
- import { SpeedInsights } from '@vercel/speed-insights/next';
362
-
363
- export function VercelIntegrations() {
364
- return (
365
- <>
366
- <Analytics />
367
- <SpeedInsights />
368
- </>
369
- );
370
- }
371
-
372
- // app/layout.tsx
373
- import { VercelIntegrations } from './components/Analytics';
374
-
375
- export default function RootLayout({ children }) {
376
- return (
377
- <html>
378
- <body>
379
- {children}
380
- <VercelIntegrations />
381
- </body>
382
- </html>
383
- );
384
- }
385
- ```
386
-
387
- ### Deployment Commands
388
-
389
- ```bash
390
- # Deploy to preview
391
- vercel
392
-
393
- # Deploy to production
394
- vercel --prod
395
-
396
- # Link to existing project
397
- vercel link
398
-
399
- # Check deployment status
400
- vercel ls
401
-
402
- # View logs
403
- vercel logs <deployment-url>
404
-
405
- # Promote preview to production
406
- vercel promote <deployment-url>
407
-
408
- # Rollback
409
- vercel rollback
410
- ```
411
-
412
- ## Vercel Checklist
413
-
414
- - [ ] vercel.json configured correctly
415
- - [ ] Environment variables set for all environments
416
- - [ ] Functions have appropriate timeouts
417
- - [ ] Edge functions for latency-sensitive routes
418
- - [ ] Caching strategy defined
419
- - [ ] Preview deployments tested
420
- - [ ] Production domain configured
421
- - [ ] Analytics enabled
422
- - [ ] Error tracking configured
423
- - [ ] Cron jobs scheduled if needed
424
-
425
- ## Trigger Keywords
426
- vercel, deploy, deployment, edge, serverless, preview, production, env, environment, blob, kv, postgres, cron, analytics, domain, region, function, timeout, isr, revalidate