@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.
- package/LICENSE +1 -1
- package/README.md +67 -44
- package/package.json +4 -4
- package/skills/vercel-advanced-troubleshooting/SKILL.md +185 -195
- package/skills/vercel-advanced-troubleshooting/references/errors.md +11 -0
- package/skills/vercel-advanced-troubleshooting/references/evidence-collection-framework.md +34 -0
- package/skills/vercel-advanced-troubleshooting/references/examples.md +11 -0
- package/skills/vercel-advanced-troubleshooting/references/systematic-isolation.md +56 -0
- package/skills/vercel-advanced-troubleshooting/references/timing-analysis.md +35 -0
- package/skills/vercel-architecture-variants/SKILL.md +227 -216
- package/skills/vercel-architecture-variants/references/errors.md +11 -0
- package/skills/vercel-architecture-variants/references/examples.md +12 -0
- package/skills/vercel-architecture-variants/references/variant-a-monolith-(simple).md +44 -0
- package/skills/vercel-architecture-variants/references/variant-b-service-layer-(moderate).md +72 -0
- package/skills/vercel-architecture-variants/references/variant-c-microservice-(complex).md +81 -0
- package/skills/vercel-ci-integration/SKILL.md +183 -73
- package/skills/vercel-ci-integration/references/errors.md +10 -0
- package/skills/vercel-ci-integration/references/examples.md +36 -0
- package/skills/vercel-ci-integration/references/implementation.md +54 -0
- package/skills/vercel-common-errors/SKILL.md +164 -60
- package/skills/vercel-common-errors/references/errors.md +53 -0
- package/skills/vercel-common-errors/references/examples.md +23 -0
- package/skills/vercel-cost-tuning/SKILL.md +158 -145
- package/skills/vercel-cost-tuning/references/cost-estimation.md +34 -0
- package/skills/vercel-cost-tuning/references/cost-reduction-strategies.md +40 -0
- package/skills/vercel-cost-tuning/references/errors.md +11 -0
- package/skills/vercel-cost-tuning/references/examples.md +15 -0
- package/skills/vercel-data-handling/SKILL.md +202 -155
- package/skills/vercel-data-handling/references/errors.md +11 -0
- package/skills/vercel-data-handling/references/examples.md +27 -0
- package/skills/vercel-data-handling/references/implementation.md +223 -0
- package/skills/vercel-debug-bundle/SKILL.md +163 -67
- package/skills/vercel-debug-bundle/references/errors.md +12 -0
- package/skills/vercel-debug-bundle/references/examples.md +24 -0
- package/skills/vercel-debug-bundle/references/implementation.md +54 -0
- package/skills/vercel-deploy-integration/SKILL.md +163 -156
- package/skills/vercel-deploy-integration/references/errors.md +11 -0
- package/skills/vercel-deploy-integration/references/examples.md +21 -0
- package/skills/vercel-deploy-integration/references/google-cloud-run.md +36 -0
- package/skills/vercel-deploy-integration/references/vercel-deployment.md +35 -0
- package/skills/vercel-deploy-preview/SKILL.md +164 -39
- package/skills/vercel-edge-functions/SKILL.md +185 -37
- package/skills/vercel-enterprise-rbac/SKILL.md +185 -170
- package/skills/vercel-enterprise-rbac/references/errors.md +11 -0
- package/skills/vercel-enterprise-rbac/references/examples.md +12 -0
- package/skills/vercel-enterprise-rbac/references/role-implementation.md +33 -0
- package/skills/vercel-enterprise-rbac/references/sso-integration.md +35 -0
- package/skills/vercel-hello-world/SKILL.md +141 -55
- package/skills/vercel-incident-runbook/SKILL.md +186 -138
- package/skills/vercel-incident-runbook/references/errors.md +11 -0
- package/skills/vercel-incident-runbook/references/examples.md +10 -0
- package/skills/vercel-incident-runbook/references/immediate-actions-by-error-type.md +41 -0
- package/skills/vercel-install-auth/SKILL.md +130 -53
- package/skills/vercel-known-pitfalls/SKILL.md +235 -233
- package/skills/vercel-known-pitfalls/references/errors.md +11 -0
- package/skills/vercel-known-pitfalls/references/examples.md +12 -0
- package/skills/vercel-load-scale/SKILL.md +197 -204
- package/skills/vercel-load-scale/references/capacity-planning.md +47 -0
- package/skills/vercel-load-scale/references/errors.md +11 -0
- package/skills/vercel-load-scale/references/examples.md +26 -0
- package/skills/vercel-load-scale/references/load-testing-with-k6.md +59 -0
- package/skills/vercel-load-scale/references/scaling-patterns.md +65 -0
- package/skills/vercel-local-dev-loop/SKILL.md +159 -71
- package/skills/vercel-local-dev-loop/references/errors.md +11 -0
- package/skills/vercel-local-dev-loop/references/examples.md +21 -0
- package/skills/vercel-local-dev-loop/references/implementation.md +60 -0
- package/skills/vercel-migration-deep-dive/SKILL.md +202 -187
- package/skills/vercel-migration-deep-dive/references/errors.md +11 -0
- package/skills/vercel-migration-deep-dive/references/examples.md +12 -0
- package/skills/vercel-migration-deep-dive/references/implementation-plan.md +80 -0
- package/skills/vercel-migration-deep-dive/references/pre-migration-assessment.md +39 -0
- package/skills/vercel-multi-env-setup/SKILL.md +167 -164
- package/skills/vercel-multi-env-setup/references/configuration-structure.md +59 -0
- package/skills/vercel-multi-env-setup/references/errors.md +11 -0
- package/skills/vercel-multi-env-setup/references/examples.md +11 -0
- package/skills/vercel-observability/SKILL.md +205 -195
- package/skills/vercel-observability/references/alert-configuration.md +40 -0
- package/skills/vercel-observability/references/errors.md +11 -0
- package/skills/vercel-observability/references/examples.md +13 -0
- package/skills/vercel-observability/references/metrics-collection.md +65 -0
- package/skills/vercel-performance-tuning/SKILL.md +212 -156
- package/skills/vercel-performance-tuning/references/caching-strategy.md +49 -0
- package/skills/vercel-performance-tuning/references/errors.md +11 -0
- package/skills/vercel-performance-tuning/references/examples.md +13 -0
- package/skills/vercel-policy-guardrails/SKILL.md +276 -193
- package/skills/vercel-policy-guardrails/references/errors.md +11 -0
- package/skills/vercel-policy-guardrails/references/eslint-rules.md +46 -0
- package/skills/vercel-policy-guardrails/references/examples.md +10 -0
- package/skills/vercel-prod-checklist/SKILL.md +219 -94
- package/skills/vercel-prod-checklist/references/errors.md +11 -0
- package/skills/vercel-prod-checklist/references/examples.md +25 -0
- package/skills/vercel-prod-checklist/references/implementation.md +60 -0
- package/skills/vercel-rate-limits/SKILL.md +187 -100
- package/skills/vercel-rate-limits/references/errors.md +11 -0
- package/skills/vercel-rate-limits/references/examples.md +46 -0
- package/skills/vercel-rate-limits/references/implementation.md +66 -0
- package/skills/vercel-reference-architecture/SKILL.md +226 -180
- package/skills/vercel-reference-architecture/references/errors.md +11 -0
- package/skills/vercel-reference-architecture/references/examples.md +13 -0
- package/skills/vercel-reference-architecture/references/key-components.md +65 -0
- package/skills/vercel-reference-architecture/references/project-structure.md +40 -0
- package/skills/vercel-reliability-patterns/SKILL.md +272 -211
- package/skills/vercel-reliability-patterns/references/circuit-breaker.md +36 -0
- package/skills/vercel-reliability-patterns/references/dead-letter-queue.md +48 -0
- package/skills/vercel-reliability-patterns/references/errors.md +11 -0
- package/skills/vercel-reliability-patterns/references/examples.md +11 -0
- package/skills/vercel-reliability-patterns/references/idempotency-keys.md +36 -0
- package/skills/vercel-sdk-patterns/SKILL.md +264 -92
- package/skills/vercel-sdk-patterns/references/errors.md +11 -0
- package/skills/vercel-sdk-patterns/references/examples.md +45 -0
- package/skills/vercel-sdk-patterns/references/implementation.md +67 -0
- package/skills/vercel-security-basics/SKILL.md +186 -96
- package/skills/vercel-security-basics/references/errors.md +10 -0
- package/skills/vercel-security-basics/references/examples.md +70 -0
- package/skills/vercel-security-basics/references/implementation.md +39 -0
- package/skills/vercel-upgrade-migration/SKILL.md +167 -67
- package/skills/vercel-upgrade-migration/references/errors.md +10 -0
- package/skills/vercel-upgrade-migration/references/examples.md +51 -0
- package/skills/vercel-upgrade-migration/references/implementation.md +29 -0
- package/skills/vercel-webhooks-events/SKILL.md +208 -132
- package/skills/vercel-webhooks-events/references/errors.md +11 -0
- package/skills/vercel-webhooks-events/references/event-handler-pattern.md +37 -0
- package/skills/vercel-webhooks-events/references/examples.md +16 -0
- package/skills/vercel-webhooks-events/references/signature-verification.md +33 -0
|
@@ -1,244 +1,259 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vercel-migration-deep-dive
|
|
3
|
-
description:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
description: 'Migrate to Vercel from other platforms or re-architecture existing Vercel
|
|
4
|
+
deployments.
|
|
5
|
+
|
|
6
|
+
Use when migrating from Netlify, AWS, or Cloudflare to Vercel,
|
|
7
|
+
|
|
8
|
+
or when re-platforming an existing Vercel application.
|
|
9
|
+
|
|
10
|
+
Trigger with phrases like "migrate to vercel", "vercel migration",
|
|
11
|
+
|
|
12
|
+
"switch to vercel", "netlify to vercel", "aws to vercel", "vercel replatform".
|
|
13
|
+
|
|
14
|
+
'
|
|
15
|
+
allowed-tools: Read, Write, Edit, Bash(vercel:*), Bash(npm:*), 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
|
+
- migration
|
|
23
|
+
- replatform
|
|
24
|
+
compatibility: Designed for Claude Code, also compatible with Codex and OpenClaw
|
|
13
25
|
---
|
|
14
|
-
|
|
15
26
|
# Vercel Migration Deep Dive
|
|
16
27
|
|
|
17
28
|
## Overview
|
|
18
|
-
Comprehensive guide for migrating to or from Vercel, or major version upgrades.
|
|
19
29
|
|
|
20
|
-
|
|
21
|
-
- Current system documentation
|
|
22
|
-
- Vercel SDK installed
|
|
23
|
-
- Feature flag infrastructure
|
|
24
|
-
- Rollback strategy tested
|
|
30
|
+
Migrate applications to Vercel from Netlify, AWS (Lambda/CloudFront/S3), Cloudflare Workers, or traditional hosting. Covers configuration mapping, DNS cutover, feature parity validation, and incremental migration with the strangler fig pattern.
|
|
25
31
|
|
|
26
|
-
##
|
|
32
|
+
## Current State
|
|
27
33
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
| Fresh install | Low | Days | Low |
|
|
31
|
-
| From competitor | Medium | Weeks | Medium |
|
|
32
|
-
| Major version | Medium | Weeks | Medium |
|
|
33
|
-
| Full replatform | High | Months | High |
|
|
34
|
+
!`vercel --version 2>/dev/null || echo 'Vercel CLI not installed'`
|
|
35
|
+
!`cat package.json 2>/dev/null | jq -r '.name // "no package.json"' 2>/dev/null || echo 'N/A'`
|
|
34
36
|
|
|
35
|
-
##
|
|
36
|
-
|
|
37
|
-
### Step 1: Current State Analysis
|
|
38
|
-
```bash
|
|
39
|
-
# Document current implementation
|
|
40
|
-
find . -name "*.ts" -o -name "*.py" | xargs grep -l "vercel" > vercel-files.txt
|
|
37
|
+
## Prerequisites
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
- Access to current hosting platform
|
|
40
|
+
- Git repository with application source
|
|
41
|
+
- DNS management access for domain cutover
|
|
42
|
+
- Vercel account (Pro recommended for production)
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
npm list | grep vercel
|
|
47
|
-
pip freeze | grep vercel
|
|
48
|
-
```
|
|
44
|
+
## Instructions
|
|
49
45
|
|
|
50
|
-
### Step
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
46
|
+
### Step 1: Configuration Mapping
|
|
47
|
+
|
|
48
|
+
**From Netlify:**
|
|
49
|
+
|
|
50
|
+
| Netlify | Vercel Equivalent |
|
|
51
|
+
|---------|-------------------|
|
|
52
|
+
| `netlify.toml` | `vercel.json` |
|
|
53
|
+
| `_redirects` / `_headers` | `vercel.json` redirects/headers |
|
|
54
|
+
| Netlify Functions (`netlify/functions/`) | API routes (`api/`) |
|
|
55
|
+
| Netlify Edge Functions | Edge Middleware or Edge Functions |
|
|
56
|
+
| `NETLIFY_ENV` | `VERCEL_ENV` |
|
|
57
|
+
| Deploy previews | Preview deployments (automatic) |
|
|
58
|
+
| Branch deploys | Branch preview URLs |
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
// Netlify _redirects → vercel.json
|
|
62
|
+
// FROM: /old-page /new-page 301
|
|
63
|
+
// TO:
|
|
64
|
+
{
|
|
65
|
+
"redirects": [
|
|
66
|
+
{ "source": "/old-page", "destination": "/new-page", "permanent": true }
|
|
67
|
+
]
|
|
58
68
|
}
|
|
59
69
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
// Netlify _headers → vercel.json
|
|
71
|
+
// FROM: /* X-Frame-Options: DENY
|
|
72
|
+
// TO:
|
|
73
|
+
{
|
|
74
|
+
"headers": [
|
|
75
|
+
{
|
|
76
|
+
"source": "/(.*)",
|
|
77
|
+
"headers": [
|
|
78
|
+
{ "key": "X-Frame-Options", "value": "DENY" }
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
]
|
|
68
82
|
}
|
|
69
83
|
```
|
|
70
84
|
|
|
71
|
-
|
|
85
|
+
**From AWS (Lambda + CloudFront + S3):**
|
|
72
86
|
|
|
87
|
+
| AWS | Vercel Equivalent |
|
|
88
|
+
|-----|-------------------|
|
|
89
|
+
| Lambda functions | Serverless Functions (`api/`) |
|
|
90
|
+
| Lambda@Edge | Edge Functions / Middleware |
|
|
91
|
+
| CloudFront distributions | Automatic CDN |
|
|
92
|
+
| S3 static hosting | `public/` directory |
|
|
93
|
+
| API Gateway | Automatic routing |
|
|
94
|
+
| CloudFront behaviors | `vercel.json` rewrites |
|
|
95
|
+
| AWS SAM/CDK | `vercel.json` |
|
|
96
|
+
| Secrets Manager | Environment Variables |
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
// AWS Lambda handler → Vercel Function
|
|
100
|
+
// FROM:
|
|
101
|
+
export const handler = async (event) => {
|
|
102
|
+
return { statusCode: 200, body: JSON.stringify({ hello: 'world' }) };
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// TO:
|
|
106
|
+
import type { VercelRequest, VercelResponse } from '@vercel/node';
|
|
107
|
+
export default function handler(req: VercelRequest, res: VercelResponse) {
|
|
108
|
+
res.status(200).json({ hello: 'world' });
|
|
109
|
+
}
|
|
73
110
|
```
|
|
74
|
-
Phase 1: Parallel Run
|
|
75
|
-
┌─────────────┐ ┌─────────────┐
|
|
76
|
-
│ Old │ │ New │
|
|
77
|
-
│ System │ ──▶ │ Vercel │
|
|
78
|
-
│ (100%) │ │ (0%) │
|
|
79
|
-
└─────────────┘ └─────────────┘
|
|
80
|
-
|
|
81
|
-
Phase 2: Gradual Shift
|
|
82
|
-
┌─────────────┐ ┌─────────────┐
|
|
83
|
-
│ Old │ │ New │
|
|
84
|
-
│ (50%) │ ──▶ │ (50%) │
|
|
85
|
-
└─────────────┘ └─────────────┘
|
|
86
|
-
|
|
87
|
-
Phase 3: Complete
|
|
88
|
-
┌─────────────┐ ┌─────────────┐
|
|
89
|
-
│ Old │ │ New │
|
|
90
|
-
│ (0%) │ ──▶ │ (100%) │
|
|
91
|
-
└─────────────┘ └─────────────┘
|
|
92
|
-
```
|
|
93
111
|
|
|
94
|
-
|
|
112
|
+
**From Cloudflare Workers/Pages:**
|
|
113
|
+
|
|
114
|
+
| Cloudflare | Vercel Equivalent |
|
|
115
|
+
|------------|-------------------|
|
|
116
|
+
| Workers | Edge Functions |
|
|
117
|
+
| Pages Functions | API routes |
|
|
118
|
+
| KV | Vercel KV or Edge Config |
|
|
119
|
+
| R2 | Vercel Blob |
|
|
120
|
+
| D1 | Vercel Postgres |
|
|
121
|
+
| `wrangler.toml` | `vercel.json` |
|
|
122
|
+
|
|
123
|
+
### Step 2: Migrate Functions
|
|
95
124
|
|
|
96
|
-
### Phase 1: Setup (Week 1-2)
|
|
97
125
|
```bash
|
|
98
|
-
#
|
|
99
|
-
|
|
126
|
+
# Create Vercel project
|
|
127
|
+
vercel link
|
|
100
128
|
|
|
101
|
-
#
|
|
102
|
-
|
|
103
|
-
#
|
|
129
|
+
# Move function files to api/ directory
|
|
130
|
+
mkdir -p api
|
|
131
|
+
# Convert each function to Vercel format
|
|
104
132
|
|
|
105
|
-
#
|
|
106
|
-
|
|
133
|
+
# Install Vercel types
|
|
134
|
+
npm install --save-dev @vercel/node
|
|
107
135
|
```
|
|
108
136
|
|
|
109
|
-
###
|
|
110
|
-
```typescript
|
|
111
|
-
// src/adapters/vercel.ts
|
|
112
|
-
interface ServiceAdapter {
|
|
113
|
-
create(data: CreateInput): Promise<Resource>;
|
|
114
|
-
read(id: string): Promise<Resource>;
|
|
115
|
-
update(id: string, data: UpdateInput): Promise<Resource>;
|
|
116
|
-
delete(id: string): Promise<void>;
|
|
117
|
-
}
|
|
137
|
+
### Step 3: Migrate Environment Variables
|
|
118
138
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
139
|
+
```bash
|
|
140
|
+
# Export from current platform, add to Vercel
|
|
141
|
+
# Netlify:
|
|
142
|
+
netlify env:list --json | jq -r '.[] | "\(.key)=\(.values[0].value)"' > .env.migration
|
|
124
143
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
```
|
|
144
|
+
# Add each to Vercel with proper scoping
|
|
145
|
+
while IFS='=' read -r key value; do
|
|
146
|
+
echo "$value" | vercel env add "$key" production preview development
|
|
147
|
+
done < .env.migration
|
|
130
148
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const batchSize = 100;
|
|
135
|
-
let processed = 0;
|
|
136
|
-
let errors: MigrationError[] = [];
|
|
137
|
-
|
|
138
|
-
for await (const batch of oldSystem.iterateBatches(batchSize)) {
|
|
139
|
-
try {
|
|
140
|
-
const transformed = batch.map(transform);
|
|
141
|
-
await vercelClient.batchCreate(transformed);
|
|
142
|
-
processed += batch.length;
|
|
143
|
-
} catch (error) {
|
|
144
|
-
errors.push({ batch, error });
|
|
145
|
-
}
|
|
149
|
+
# Verify
|
|
150
|
+
vercel env ls
|
|
151
|
+
```
|
|
146
152
|
|
|
147
|
-
|
|
148
|
-
console.log(`Migrated ${processed} records`);
|
|
149
|
-
}
|
|
153
|
+
### Step 4: Incremental Migration (Strangler Fig)
|
|
150
154
|
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
```
|
|
155
|
+
Route traffic incrementally from old platform to Vercel:
|
|
154
156
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
const vercelPercentage = getFeatureFlag('vercel_migration_percentage');
|
|
157
|
+
```json
|
|
158
|
+
// Phase 1: Route /api/* to Vercel, keep everything else on old platform
|
|
159
|
+
// On old platform, add a rewrite/proxy:
|
|
160
|
+
// /api/* → https://my-app.vercel.app/api/*
|
|
160
161
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
// Phase 2: Move static pages to Vercel
|
|
163
|
+
// Update DNS for staging subdomain first:
|
|
164
|
+
// staging.example.com → cname.vercel-dns.com
|
|
164
165
|
|
|
165
|
-
|
|
166
|
-
|
|
166
|
+
// Phase 3: Move production
|
|
167
|
+
// Update DNS A record: example.com → 76.76.21.21
|
|
167
168
|
```
|
|
168
169
|
|
|
169
|
-
|
|
170
|
+
### Step 5: DNS Cutover
|
|
170
171
|
|
|
171
172
|
```bash
|
|
172
|
-
#
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
#
|
|
180
|
-
|
|
173
|
+
# Add domain to Vercel
|
|
174
|
+
vercel domains add example.com
|
|
175
|
+
|
|
176
|
+
# Verify domain ownership
|
|
177
|
+
vercel domains inspect example.com
|
|
178
|
+
|
|
179
|
+
# DNS records to set:
|
|
180
|
+
# Apex domain (example.com):
|
|
181
|
+
# A → 76.76.21.21
|
|
182
|
+
#
|
|
183
|
+
# Subdomain (www.example.com):
|
|
184
|
+
# CNAME → cname.vercel-dns.com
|
|
185
|
+
#
|
|
186
|
+
# Or transfer nameservers to Vercel:
|
|
187
|
+
# NS → ns1.vercel-dns.com
|
|
188
|
+
# NS → ns2.vercel-dns.com
|
|
189
|
+
|
|
190
|
+
# Wait for DNS propagation (check with dig)
|
|
191
|
+
dig example.com A +short
|
|
192
|
+
# Should return 76.76.21.21
|
|
193
|
+
|
|
194
|
+
# SSL certificate auto-provisions after DNS verification
|
|
181
195
|
```
|
|
182
196
|
|
|
183
|
-
|
|
197
|
+
### Step 6: Validate Feature Parity
|
|
184
198
|
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
199
|
+
```bash
|
|
200
|
+
# Compare old and new deployments
|
|
201
|
+
# Test all routes
|
|
202
|
+
for path in "/" "/about" "/api/health" "/api/users"; do
|
|
203
|
+
echo "=== $path ==="
|
|
204
|
+
echo "Old:"
|
|
205
|
+
curl -sI "https://old.example.com${path}" | head -3
|
|
206
|
+
echo "New:"
|
|
207
|
+
curl -sI "https://my-app.vercel.app${path}" | head -3
|
|
208
|
+
done
|
|
209
|
+
|
|
210
|
+
# Compare headers
|
|
211
|
+
diff <(curl -sI https://old.example.com/ | sort) \
|
|
212
|
+
<(curl -sI https://my-app.vercel.app/ | sort)
|
|
213
|
+
|
|
214
|
+
# Check redirects still work
|
|
215
|
+
curl -sI https://my-app.vercel.app/old-page | grep Location
|
|
200
216
|
```
|
|
201
217
|
|
|
202
|
-
##
|
|
203
|
-
|
|
204
|
-
### Step 1: Assess Current State
|
|
205
|
-
Document existing implementation and data inventory.
|
|
206
|
-
|
|
207
|
-
### Step 2: Build Adapter Layer
|
|
208
|
-
Create abstraction layer for gradual migration.
|
|
218
|
+
## Migration Checklist
|
|
209
219
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
220
|
+
| Step | Validated |
|
|
221
|
+
|------|-----------|
|
|
222
|
+
| All functions converted to Vercel format | Required |
|
|
223
|
+
| Environment variables migrated with correct scoping | Required |
|
|
224
|
+
| Redirects and headers ported to vercel.json | Required |
|
|
225
|
+
| DNS configured and SSL provisioned | Required |
|
|
226
|
+
| Preview deployment tested end-to-end | Required |
|
|
227
|
+
| Performance baseline compared (old vs new) | Recommended |
|
|
228
|
+
| Monitoring and alerting configured | Required |
|
|
229
|
+
| Rollback plan documented (DNS revert) | Required |
|
|
230
|
+
| Old platform kept running during validation period | Recommended |
|
|
215
231
|
|
|
216
232
|
## Output
|
|
217
|
-
- Migration assessment complete
|
|
218
|
-
- Adapter layer implemented
|
|
219
|
-
- Data migrated successfully
|
|
220
|
-
- Traffic fully shifted to Vercel
|
|
221
233
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
| Rollback triggered | Errors spiked | Reduce traffic percentage |
|
|
228
|
-
| Validation failed | Missing data | Check batch processing |
|
|
234
|
+
- Configuration mapped from source platform to Vercel
|
|
235
|
+
- Functions converted to Vercel serverless/edge format
|
|
236
|
+
- Environment variables migrated with proper scoping
|
|
237
|
+
- DNS cutover completed with SSL auto-provisioning
|
|
238
|
+
- Feature parity validated
|
|
229
239
|
|
|
230
|
-
##
|
|
240
|
+
## Error Handling
|
|
231
241
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
242
|
+
| Error | Cause | Solution |
|
|
243
|
+
|-------|-------|----------|
|
|
244
|
+
| Function format mismatch | AWS/Netlify handler signature | Convert to `(req, res)` or Web API format |
|
|
245
|
+
| Missing env var after migration | Not added to correct environment | Re-add with `vercel env add` |
|
|
246
|
+
| DNS not resolving | Propagation delay | Wait 24-48 hours, check with `dig` |
|
|
247
|
+
| SSL not provisioning | DNS records incorrect | Verify A/CNAME records match Vercel's requirements |
|
|
248
|
+
| 404 on migrated routes | Different path conventions | Add rewrites in vercel.json |
|
|
238
249
|
|
|
239
250
|
## Resources
|
|
251
|
+
|
|
252
|
+
- [Migrate to Vercel from Netlify](https://vercel.com/docs/getting-started/migration/netlify)
|
|
253
|
+
- [Migrate to Vercel from Cloudflare](https://vercel.com/docs/getting-started/migration/cloudflare)
|
|
254
|
+
- [Working with Domains](https://vercel.com/docs/domains/working-with-domains)
|
|
240
255
|
- [Strangler Fig Pattern](https://martinfowler.com/bliki/StranglerFigApplication.html)
|
|
241
|
-
- [Vercel Migration Guide](https://vercel.com/docs/migration)
|
|
242
256
|
|
|
243
|
-
##
|
|
244
|
-
|
|
257
|
+
## Next Steps
|
|
258
|
+
|
|
259
|
+
For advanced troubleshooting, see `vercel-advanced-troubleshooting`.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Error Handling Reference
|
|
2
|
+
|
|
3
|
+
| Issue | Cause | Solution |
|
|
4
|
+
|-------|-------|----------|
|
|
5
|
+
| Data mismatch | Transform errors | Validate transform logic |
|
|
6
|
+
| Performance drop | No caching | Add caching layer |
|
|
7
|
+
| Rollback triggered | Errors spiked | Reduce traffic percentage |
|
|
8
|
+
| Validation failed | Missing data | Check batch processing |
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
*[Tons of Skills](https://tonsofskills.com) by [Intent Solutions](https://intentsolutions.io) | [jeremylongshore.com](https://jeremylongshore.com)*
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
## Examples
|
|
2
|
+
|
|
3
|
+
### Quick Migration Status
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
const status = await validateVercelMigration();
|
|
7
|
+
console.log(`Migration ${status.passed ? 'PASSED' : 'FAILED'}`);
|
|
8
|
+
status.checks.forEach(c => console.log(` ${c.name}: ${c.result.success}`));
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
*[Tons of Skills](https://tonsofskills.com) by [Intent Solutions](https://intentsolutions.io) | [jeremylongshore.com](https://jeremylongshore.com)*
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Implementation Plan
|
|
2
|
+
|
|
3
|
+
## Implementation Plan
|
|
4
|
+
|
|
5
|
+
### Phase 1: Setup (Week 1-2)
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Install Vercel SDK
|
|
9
|
+
npm install vercel
|
|
10
|
+
|
|
11
|
+
# Configure credentials
|
|
12
|
+
cp .env.example .env.vercel
|
|
13
|
+
# Edit with new credentials
|
|
14
|
+
|
|
15
|
+
# Verify connectivity
|
|
16
|
+
node -e "require('vercel').ping()"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Phase 2: Adapter Layer (Week 3-4)
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// src/adapters/vercel.ts
|
|
23
|
+
interface ServiceAdapter {
|
|
24
|
+
create(data: CreateInput): Promise<Resource>;
|
|
25
|
+
read(id: string): Promise<Resource>;
|
|
26
|
+
update(id: string, data: UpdateInput): Promise<Resource>;
|
|
27
|
+
delete(id: string): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
class VercelAdapter implements ServiceAdapter {
|
|
31
|
+
async create(data: CreateInput): Promise<Resource> {
|
|
32
|
+
const vercelData = this.transform(data);
|
|
33
|
+
return vercelClient.create(vercelData);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private transform(data: CreateInput): VercelInput {
|
|
37
|
+
// Map from old format to Vercel format
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Phase 3: Data Migration (Week 5-6)
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
async function migrateVercelData(): Promise<MigrationResult> {
|
|
46
|
+
const batchSize = 100;
|
|
47
|
+
let processed = 0;
|
|
48
|
+
let errors: MigrationError[] = [];
|
|
49
|
+
|
|
50
|
+
for await (const batch of oldSystem.iterateBatches(batchSize)) {
|
|
51
|
+
try {
|
|
52
|
+
const transformed = batch.map(transform);
|
|
53
|
+
await vercelClient.batchCreate(transformed);
|
|
54
|
+
processed += batch.length;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
errors.push({ batch, error });
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Progress update
|
|
60
|
+
console.log(`Migrated ${processed} records`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return { processed, errors };
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Phase 4: Traffic Shift (Week 7-8)
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
// Feature flag controlled traffic split
|
|
71
|
+
function getServiceAdapter(): ServiceAdapter {
|
|
72
|
+
const vercelPercentage = getFeatureFlag('vercel_migration_percentage');
|
|
73
|
+
|
|
74
|
+
if (Math.random() * 100 < vercelPercentage) {
|
|
75
|
+
return new VercelAdapter();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return new LegacyAdapter();
|
|
79
|
+
}
|
|
80
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Pre-Migration Assessment
|
|
2
|
+
|
|
3
|
+
## Pre-Migration Assessment
|
|
4
|
+
|
|
5
|
+
### Step 1: Current State Analysis
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Document current implementation
|
|
9
|
+
find . -name "*.ts" -o -name "*.py" | xargs grep -l "vercel" > vercel-files.txt
|
|
10
|
+
|
|
11
|
+
# Count integration points
|
|
12
|
+
wc -l vercel-files.txt
|
|
13
|
+
|
|
14
|
+
# Identify dependencies
|
|
15
|
+
npm list | grep vercel
|
|
16
|
+
pip freeze | grep vercel
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Step 2: Data Inventory
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
interface MigrationInventory {
|
|
23
|
+
dataTypes: string[];
|
|
24
|
+
recordCounts: Record<string, number>;
|
|
25
|
+
dependencies: string[];
|
|
26
|
+
integrationPoints: string[];
|
|
27
|
+
customizations: string[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function assessVercelMigration(): Promise<MigrationInventory> {
|
|
31
|
+
return {
|
|
32
|
+
dataTypes: await getDataTypes(),
|
|
33
|
+
recordCounts: await getRecordCounts(),
|
|
34
|
+
dependencies: await analyzeDependencies(),
|
|
35
|
+
integrationPoints: await findIntegrationPoints(),
|
|
36
|
+
customizations: await documentCustomizations(),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
```
|