Execute Vercel major re-architecture and migration strategies with strangler fig pattern. Use when migrating to or from Vercel, performing major version upgrades, or re-platforming existing integrations to Vercel. Trigger with phrases like "migrate vercel", "vercel migration", "switch to vercel", "vercel replatform", "vercel upgrade major".
/plugin marketplace add jeremylongshore/claude-code-plugins-plus-skills/plugin install vercel-pack@claude-code-plugins-plusThis skill is limited to using the following tools:
Comprehensive guide for migrating to or from Vercel, or major version upgrades.
| Type | Complexity | Duration | Risk |
|---|---|---|---|
| Fresh install | Low | Days | Low |
| From competitor | Medium | Weeks | Medium |
| Major version | Medium | Weeks | Medium |
| Full replatform | High | Months | High |
# Document current implementation
find . -name "*.ts" -o -name "*.py" | xargs grep -l "vercel" > vercel-files.txt
# Count integration points
wc -l vercel-files.txt
# Identify dependencies
npm list | grep vercel
pip freeze | grep vercel
interface MigrationInventory {
dataTypes: string[];
recordCounts: Record<string, number>;
dependencies: string[];
integrationPoints: string[];
customizations: string[];
}
async function assessVercelMigration(): Promise<MigrationInventory> {
return {
dataTypes: await getDataTypes(),
recordCounts: await getRecordCounts(),
dependencies: await analyzeDependencies(),
integrationPoints: await findIntegrationPoints(),
customizations: await documentCustomizations(),
};
}
Phase 1: Parallel Run
┌─────────────┐ ┌─────────────┐
│ Old │ │ New │
│ System │ ──▶ │ Vercel │
│ (100%) │ │ (0%) │
└─────────────┘ └─────────────┘
Phase 2: Gradual Shift
┌─────────────┐ ┌─────────────┐
│ Old │ │ New │
│ (50%) │ ──▶ │ (50%) │
└─────────────┘ └─────────────┘
Phase 3: Complete
┌─────────────┐ ┌─────────────┐
│ Old │ │ New │
│ (0%) │ ──▶ │ (100%) │
└─────────────┘ └─────────────┘
# Install Vercel SDK
npm install vercel
# Configure credentials
cp .env.example .env.vercel
# Edit with new credentials
# Verify connectivity
node -e "require('vercel').ping()"
// src/adapters/vercel.ts
interface ServiceAdapter {
create(data: CreateInput): Promise<Resource>;
read(id: string): Promise<Resource>;
update(id: string, data: UpdateInput): Promise<Resource>;
delete(id: string): Promise<void>;
}
class VercelAdapter implements ServiceAdapter {
async create(data: CreateInput): Promise<Resource> {
const vercelData = this.transform(data);
return vercelClient.create(vercelData);
}
private transform(data: CreateInput): VercelInput {
// Map from old format to Vercel format
}
}
async function migrateVercelData(): Promise<MigrationResult> {
const batchSize = 100;
let processed = 0;
let errors: MigrationError[] = [];
for await (const batch of oldSystem.iterateBatches(batchSize)) {
try {
const transformed = batch.map(transform);
await vercelClient.batchCreate(transformed);
processed += batch.length;
} catch (error) {
errors.push({ batch, error });
}
// Progress update
console.log(`Migrated ${processed} records`);
}
return { processed, errors };
}
// Feature flag controlled traffic split
function getServiceAdapter(): ServiceAdapter {
const vercelPercentage = getFeatureFlag('vercel_migration_percentage');
if (Math.random() * 100 < vercelPercentage) {
return new VercelAdapter();
}
return new LegacyAdapter();
}
# Immediate rollback
kubectl set env deployment/app VERCEL_ENABLED=false
kubectl rollout restart deployment/app
# Data rollback (if needed)
./scripts/restore-from-backup.sh --date YYYY-MM-DD
# Verify rollback
curl https://app.yourcompany.com/health | jq '.services.vercel'
async function validateVercelMigration(): Promise<ValidationReport> {
const checks = [
{ name: 'Data count match', fn: checkDataCounts },
{ name: 'API functionality', fn: checkApiFunctionality },
{ name: 'Performance baseline', fn: checkPerformance },
{ name: 'Error rates', fn: checkErrorRates },
];
const results = await Promise.all(
checks.map(async c => ({ name: c.name, result: await c.fn() }))
);
return { checks: results, passed: results.every(r => r.result.success) };
}
Document existing implementation and data inventory.
Create abstraction layer for gradual migration.
Run batch data migration with error handling.
Gradually route traffic to new Vercel integration.
| Issue | Cause | Solution |
|---|---|---|
| Data mismatch | Transform errors | Validate transform logic |
| Performance drop | No caching | Add caching layer |
| Rollback triggered | Errors spiked | Reduce traffic percentage |
| Validation failed | Missing data | Check batch processing |
const status = await validateVercelMigration();
console.log(`Migration ${status.passed ? 'PASSED' : 'FAILED'}`);
status.checks.forEach(c => console.log(` ${c.name}: ${c.result.success}`));
For advanced troubleshooting, see vercel-advanced-troubleshooting.