Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"name": "migration-to-aws",
"source": "./migrate/plugins/migration-to-aws",
"version": "1.5.0",
"description": "Migrate from GCP or Heroku to AWS — including your entire AI stack. Moves infrastructure (Cloud Run → Fargate, Heroku Dynos → Fargate, databases → RDS/Aurora), OpenAI/Gemini workloads to Amazon Bedrock, and agentic systems (LangChain, CrewAI, AutoGen, OpenAI Agents SDK) to AWS-native frameworks. Generates runnable Terraform, migration scripts, provider adapters, and deployment artifacts. Gives honest model-by-model pricing comparisons so you know exactly when Bedrock saves money and when it doesn't. The bundled llm-to-bedrock skill executes AI/LLM migrations automatically (rewrite, evaluate, deliver a branch)."
"description": "Migrate from GCP or Heroku to AWS — including your entire AI stack — or get an honest Vercel-to-AWS assessment. Moves infrastructure (Cloud Run → Fargate, Heroku Dynos → Fargate, databases → RDS/Aurora), OpenAI/Gemini workloads to Amazon Bedrock, and agentic systems (LangChain, CrewAI, AutoGen, OpenAI Agents SDK) to AWS-native frameworks. For Vercel: computes a Coupling Score and 10 Pre-Flight Checks, then recommends OpenNext/SST, ECS Fargate, or a Vercel+AWS Hybrid via a fixed, auditable decision order. Generates runnable Terraform, migration scripts, provider adapters, and deployment artifacts. Gives honest model-by-model pricing comparisons so you know exactly when Bedrock saves money and when it doesn't. The bundled llm-to-bedrock skill executes AI/LLM migrations automatically (rewrite, evaluate, deliver a branch)."
},
{
"name": "aws-startup-advisor",
Expand Down
1 change: 1 addition & 0 deletions migrate/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Point this plugin at your Terraform files, application code, or billing data. It

- **GCP → AWS** — Cloud Run, Cloud SQL, GKE, Cloud Functions, Pub/Sub, Cloud Storage, VPC, and AI/agentic workloads
- **Heroku → AWS** — Dynos (→ Elastic Beanstalk by default; Fargate or EKS overrides), Postgres, Redis, Kafka, Private Spaces, Pipelines, and 13+ common add-ons
- **Vercel → AWS** — an honest assessment (discovery, Coupling Score, Pre-Flight Checks, a three-outcome recommendation) for Next.js apps, with an optional thin scaffold

**For infrastructure migrations:**

Expand Down
9 changes: 7 additions & 2 deletions migrate/plugins/migration-to-aws/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "migration-to-aws",
"version": "1.5.0",
"description": "This no-cost tool assesses your current cloud provider's usage, geography, and billing data to estimate and compare AWS services and pricing, and recommends migration or continued use of your current provider. Supports GCP and Heroku migrations. AWS pricing is based on current published pricing and may vary over time. The tool may generate a .migration folder containing comparison and migration execution data, which you may delete upon completion or use to migrate to AWS.",
"description": "This no-cost tool assesses your current cloud provider's usage, geography, and billing data to estimate and compare AWS services and pricing, and recommends migration or continued use of your current provider. Supports GCP, Heroku, and Vercel migrations. AWS pricing is based on current published pricing and may vary over time. The tool may generate a .migration folder containing comparison and migration execution data, which you may delete upon completion or use to migrate to AWS.",
"author": {
"name": "Amazon Web Services"
},
Expand Down Expand Up @@ -56,6 +56,11 @@
"temporal-cloud",
"temporal-workers",
"temporal-to-aws",
"durable-execution"
"durable-execution",
"vercel",
"vercel-to-aws",
"next-js",
"nextjs",
"opennext"
]
}
11 changes: 8 additions & 3 deletions migrate/plugins/migration-to-aws/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "migration-to-aws",
"version": "1.5.0",
"description": "Migrate from GCP or Heroku to AWS including your entire AI stack. Moves infrastructure (Cloud Run Fargate, Heroku Dynos Fargate, databases RDS/Aurora), OpenAI/Gemini workloads to Amazon Bedrock, and agentic systems (LangChain, CrewAI, AutoGen, OpenAI Agents SDK) to AWS-native frameworks. Generates runnable Terraform, migration scripts, provider adapters, and deployment artifacts. Gives honest model-by-model pricing comparisons so you know exactly when Bedrock saves money and when it doesn't.",
"description": "Migrate from GCP or Heroku to AWS \u2014 including your entire AI stack. Moves infrastructure (Cloud Run \u2192 Fargate, Heroku Dynos \u2192 Fargate, databases \u2192 RDS/Aurora), OpenAI/Gemini workloads to Amazon Bedrock, and agentic systems (LangChain, CrewAI, AutoGen, OpenAI Agents SDK) to AWS-native frameworks. Generates runnable Terraform, migration scripts, provider adapters, and deployment artifacts. Gives honest model-by-model pricing comparisons so you know exactly when Bedrock saves money and when it doesn't.",
"author": {
"name": "Amazon Web Services",
"url": "https://aws.amazon.com"
Expand Down Expand Up @@ -59,14 +59,19 @@
"temporal-cloud",
"temporal-workers",
"temporal-to-aws",
"durable-execution"
"durable-execution",
"vercel",
"vercel-to-aws",
"next-js",
"nextjs",
"opennext"
],
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"interface": {
"displayName": "GCP to AWS Migration",
"shortDescription": "Migrate GCP infrastructure and AI workloads to AWS with architecture mapping, cost analysis, and runnable Terraform.",
"longDescription": "Point this plugin at your Terraform files, application code, or GCP billing data. It runs a structured 6-phase migration assessment discovering what you have, asking the right questions, designing the AWS architecture, estimating costs with real pricing data, and generating runnable migration artifacts.\n\nFor AI-focused startups, it detects your entire AI stack (models, agents, tools, orchestration patterns) and recommends three migration paths: retarget (keep your framework, swap models), AgentCore Harness (config-based managed agents), or Strands Agents (AWS-native multi-agent SDK).\n\nGenerates Terraform configurations, migration scripts, provider adapters, harness.json, and documentation all tailored to your specific stack.",
"longDescription": "Point this plugin at your Terraform files, application code, or GCP billing data. It runs a structured 6-phase migration assessment \u2014 discovering what you have, asking the right questions, designing the AWS architecture, estimating costs with real pricing data, and generating runnable migration artifacts.\n\nFor AI-focused startups, it detects your entire AI stack (models, agents, tools, orchestration patterns) and recommends three migration paths: retarget (keep your framework, swap models), AgentCore Harness (config-based managed agents), or Strands Agents (AWS-native multi-agent SDK).\n\nGenerates Terraform configurations, migration scripts, provider adapters, harness.json, and documentation \u2014 all tailored to your specific stack.",
"developerName": "Amazon Web Services",
"category": "Developer Tools",
"capabilities": [
Expand Down
9 changes: 7 additions & 2 deletions migrate/plugins/migration-to-aws/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "migration-to-aws",
"displayName": "Migration to AWS",
"version": "1.5.0",
"description": "Migrate from GCP or Heroku to AWS including your entire AI stack. Moves infrastructure (Cloud Run Fargate, Heroku Dynos Fargate, databases RDS/Aurora), OpenAI/Gemini workloads to Amazon Bedrock, and agentic systems (LangChain, CrewAI, AutoGen, OpenAI Agents SDK) to AWS-native frameworks. Generates runnable Terraform, migration scripts, provider adapters, and deployment artifacts. Gives honest model-by-model pricing comparisons so you know exactly when Bedrock saves money and when it doesn’t.",
"description": "Migrate from GCP or Heroku to AWS \u2014 including your entire AI stack. Moves infrastructure (Cloud Run \u2192 Fargate, Heroku Dynos \u2192 Fargate, databases \u2192 RDS/Aurora), OpenAI/Gemini workloads to Amazon Bedrock, and agentic systems (LangChain, CrewAI, AutoGen, OpenAI Agents SDK) to AWS-native frameworks. Generates runnable Terraform, migration scripts, provider adapters, and deployment artifacts. Gives honest model-by-model pricing comparisons so you know exactly when Bedrock saves money and when it doesn\u2019t.",
"author": {
"name": "Amazon Web Services"
},
Expand Down Expand Up @@ -57,6 +57,11 @@
"temporal-cloud",
"temporal-workers",
"temporal-to-aws",
"durable-execution"
"durable-execution",
"vercel",
"vercel-to-aws",
"next-js",
"nextjs",
"opennext"
]
}
1 change: 1 addition & 0 deletions migrate/plugins/migration-to-aws/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ Pass `--estimation-infra` / `--estimation-ai` only when those files exist. Resol
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **gcp-to-aws** | "migrate GCP to AWS", "move from GCP", "GCP migration plan", "migrate Cloud SQL to RDS or Aurora", "move Cloud Run to Fargate", "estimate AWS costs for my GCP infrastructure", "migrate my OpenAI app to Bedrock", "migrate my LangChain agents to AWS" |
| **heroku-to-aws** | "migrate from Heroku", "Heroku to AWS", "move off Heroku", "migrate Heroku Postgres to RDS", "migrate dynos to Elastic Beanstalk", "migrate dynos to Fargate", "migrate Heroku Private Space", "leave Heroku", "estimate AWS costs for my Heroku app" |
| **vercel-to-aws** | "migrate from Vercel", "Vercel to AWS", "move off Vercel", "migrate Next.js off Vercel", "assess my Vercel migration", "leave Vercel", "Vercel to Fargate", "Vercel to OpenNext", "should I migrate off Vercel" |

### MCP Servers

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Vercel-to-AWS Assessment - reference-startup</title>
<style>
.verdict { font-weight: bold; }
.trace-entry { margin-bottom: 1em; }
.preflight-check-card { border: 1px solid #ccc; padding: 0.5em; }
</style>
</head>
<body>

<nav class="toc">
<a href="#exec-verdict">Verdict</a>
<a href="#what-you-gain">What You Gain</a>
<a href="#what-you-lose">What You Lose</a>
<a href="#coupling-score">Coupling Score</a>
<a href="#preflight-findings">Pre-Flight Findings</a>
<a href="#decision-traceability">Decision Traceability</a>
<a href="#next-steps">Next Steps</a>
</nav>

<section id="exec-verdict">
<p class="verdict">Recommendation: migrate to ECS Fargate. Your sustained traffic and small team's preference for predictable, debuggable infrastructure both point the same way.</p>
</section>

<section id="what-you-gain">
<p>Owning your CDN configuration means you can cache aggressively enough to serve fewer origin requests, not just cheaper ones. Your bill becomes predictable instead of usage-spiky.</p>
<p>Separately, AWS Activate offers eligible early-stage startups credits (Founders tier: up to $5,000 self-service; Portfolio tier: up to $200,000 for VC/accelerator-backed companies) that apply directly to the AWS services this migration would use. Worth checking eligibility before finalizing a budget.</p>
</section>

<section id="what-you-lose">
<p>Preview deployments as you know them go away first. Your reviewers will need a different workflow for testing branches before merge. Skew protection (keeping mismatched client/server deploys from breaking users mid-deploy) also needs to be handled explicitly on AWS instead of automatically.</p>
</section>

<section id="inputs-received">
<p>Two findings above would upgrade with more input: the ISR completeness finding would firm up if you confirm your autoscaling instance count, and the uncached-route cost estimate would go from a rough guess to a firm number with 7-14 days of log drain data.</p>
</section>

<section id="appendix-m1">
<p>We detected middleware.ts on your project. Its matcher intersects several cached routes, and it appears to perform an authentication check. On every AWS target, a cached response from the CDN skips middleware entirely - so a visitor could receive a cached page that never had its auth check run.</p>
</section>

<section id="coupling-score">
<table>
<thead><tr><th>Feature</th><th>Detected</th><th>Why it matters</th></tr></thead>
<tbody>
<tr><td>ISR / revalidation</td><td>Yes</td><td>Portable, needs a tag cache and queue together</td></tr>
<tr><td>Edge middleware</td><td>Yes</td><td>Behavioral divergence on every AWS target</td></tr>
<tr><td>Preview deployments</td><td>Yes (load-bearing)</td><td>No AWS equivalent exists</td></tr>
</tbody>
</table>
</section>

<section id="preflight-findings">
<div class="preflight-check-card">Your middleware runs auth checks on some pages that are also cached by the CDN - those checks get skipped on a cache hit.</div>
<div class="preflight-check-card">A handful of your API routes fire much more often than they're cached, which is estimated monthly cost of roughly $85 you could trim with better caching.</div>
</section>

<section id="decision-traceability">
<div class="trace-entry">The recommendation rule that fired: your team said production ownership and predictable debugging matter more than minimal ops overhead, and your traffic is steady rather than spiky - that combination pointed to the container-based path over the serverless one.</div>
</section>

<section id="out-of-scope">
<p>If you were a single low-traffic app with no AWS credits, a small VPS would be the more rational choice and this tooling would not be for you. That is not your situation here, since a separable backend surface exists.</p>
</section>

<section id="next-steps">
<ol>
<li>Review the coupling score and pre-flight findings above with your team.</li>
<li>Optionally upgrading to Next.js 16.2+ would unlock higher-confidence discovery for a future re-assessment - entirely your call, not required to proceed.</li>
<li>Opt in to the scaffold checkpoint when you are ready for a working Terraform skeleton.</li>
</ol>
</section>

<footer>
<p>This is a draft for review. Verify all figures before acting on this report.</p>
</footer>

</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Vercel-to-AWS Assessment - stub</title>
</head>
<body>

<section id="exec-verdict">
<p>M1 fired at HIGH severity based on route_disposition analysis. See preflight-findings.json for details.</p>
</section>

<section id="what-you-gain">
<p>Some cost savings are possible.</p>
</section>

<section id="what-you-lose">
<p>Preview deployments. TODO: fill in the rest of this section.</p>
</section>

<section id="coupling-score">
<p>See coupling-score.json for the full breakdown.</p>
</section>

<section id="preflight-findings">
<p>An uncached route costs $85 extra per month.</p>
</section>

<section id="next-steps">
<ul>
<li>Review findings</li>
</ul>
</section>

</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
{
"phase": "discover",
"timestamp": "2026-07-22T14:00:00Z",
"checks": [
{
"id": "M1",
"detected": true,
"severity": "HIGH",
"applies_to": [
"A",
"B",
"C"
],
"confidence": "HIGH"
},
{
"id": "M2",
"detected": false,
"severity": "MEDIUM",
"applies_to": [
"A",
"B",
"C"
],
"confidence": "HIGH"
},
{
"id": "B1",
"detected": false,
"severity": "HIGH",
"applies_to": [
"A"
],
"confidence": "HIGH"
},
{
"id": "B2",
"detected": false,
"severity": "MEDIUM",
"applies_to": [
"A"
],
"confidence": "HIGH"
},
{
"id": "B3",
"detected": false,
"severity": "LOW",
"applies_to": [
"A"
],
"confidence": "HIGH"
},
{
"id": "B4",
"detected": false,
"severity": "LOW",
"applies_to": [
"A"
],
"confidence": "HIGH"
},
{
"id": "S1",
"detected": false,
"severity": "MEDIUM",
"applies_to": [
"A"
],
"confidence": "HIGH"
},
{
"id": "I1",
"detected": true,
"severity": "HIGH",
"applies_to": [
"A",
"B"
],
"confidence": "MEDIUM",
"upgrade_input": "confirm autoscaling instance count"
},
{
"id": "O1",
"detected": false,
"severity": "advisory",
"applies_to": [
"A"
],
"confidence": "HIGH"
},
{
"id": "U1",
"detected": true,
"severity": "informational",
"applies_to": [
"A",
"B",
"C"
],
"confidence": "LOW",
"upgrade_input": "7-14 day log drain export"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"phase": "recommend",
"timestamp": "2026-07-22T14:00:00Z",
"outcome": "B",
"fired_rule": 3,
"tiebreak": false,
"separable": null,
"backend_shape": null,
"confidence": "high",
"reasons": [
"Sustained traffic (not spiky)",
"Team stated a debuggability preference over minimal ops overhead"
],
"resolving_input": null
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"phase": "prescan",
"timestamp": "2026-07-22T14:00:00Z",
"repo_access": true,
"next_build_health": "clean",
"vercel_token_present": true,
"project_list": [
"reference-startup-web"
],
"project_scoping_needed": false,
"next_version": "15.3.0",
"package_manager": "pnpm@9.0.0",
"has_sharp_dependency": false,
"lockfile_census": [
"pnpm-lock.yaml"
],
"has_middleware": true,
"has_vercel_json": true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# The repo-root .gitignore excludes build/ globally. This fixture's
# capture/build/ holds CANNED .next build manifests (committed test data
# mirroring the real capture layout), not build output — re-include them.
!capture/build/
!capture/build/**
Loading