[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-vercel-labs-nextjs-webflow-to-vercel":3,"mdc-b01iv8-key":37,"related-org-vercel-labs-nextjs-webflow-to-vercel":2221,"related-repo-vercel-labs-nextjs-webflow-to-vercel":2393},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":32,"sourceUrl":35,"mdContent":36},"nextjs-webflow-to-vercel","migrate Next.js apps from Webflow to Vercel","Migrate a Next.js application from Webflow Cloud to Vercel. Use this skill when a user wants to move, migrate, or port a Next.js app off Webflow Cloud onto Vercel. This covers removing the OpenNext Cloudflare adapter (@opennextjs\u002Fcloudflare) and the initOpenNextCloudflareForDev dev hook, uninstalling Wrangler, deleting the Webflow Cloud config files (webflow.json, wrangler.json, open-next.config.ts, cloudflare-env.d.ts), dropping the base path the app mounted under on a Webflow site (basePath and assetPrefix in next.config.ts), removing the Edge runtime directive (export const runtime = 'edge') from Route Handlers and middleware, repointing Cloudflare storage bindings read through getCloudflareContext().env (Object Storage\u002FR2, Key Value Store\u002FWorkers KV, SQLite\u002FD1) to Vercel storage, recreating environment variables, and deploying. Next.js runs natively on Vercel, so no adapter replaces OpenNext. Triggers include phrases like 'migrate to Vercel', 'move off Webflow Cloud', 'Next.js Webflow Cloud to Vercel', or the presence of webflow.json, wrangler.json, @opennextjs\u002Fcloudflare, open-next.config.ts, or getCloudflareContext in a Next.js project. Do not use for non-Next.js frameworks or for migrations in the opposite direction (Vercel to Webflow Cloud).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"vercel-labs","Vercel Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fvercel-labs.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Vercel","vercel","tag",{"name":17,"slug":18,"type":15},"Next.js","next-js",{"name":20,"slug":21,"type":15},"Migration","migration",{"name":23,"slug":24,"type":15},"Webflow","webflow",3,"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fvercel-kb-skills","2026-07-17T06:07:45.157217","Apache-2.0",0,[31,14],"skills",{"repoUrl":26,"stars":25,"forks":29,"topics":33,"description":34},[31,14],"Companion agent skills for Vercel Knowledge Base guides","https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fvercel-kb-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fnextjs-webflow-to-vercel","---\nname: nextjs-webflow-to-vercel\ndescription: \"Migrate a Next.js application from Webflow Cloud to Vercel. Use this skill when a user wants to move, migrate, or port a Next.js app off Webflow Cloud onto Vercel. This covers removing the OpenNext Cloudflare adapter (@opennextjs\u002Fcloudflare) and the initOpenNextCloudflareForDev dev hook, uninstalling Wrangler, deleting the Webflow Cloud config files (webflow.json, wrangler.json, open-next.config.ts, cloudflare-env.d.ts), dropping the base path the app mounted under on a Webflow site (basePath and assetPrefix in next.config.ts), removing the Edge runtime directive (export const runtime = 'edge') from Route Handlers and middleware, repointing Cloudflare storage bindings read through getCloudflareContext().env (Object Storage\u002FR2, Key Value Store\u002FWorkers KV, SQLite\u002FD1) to Vercel storage, recreating environment variables, and deploying. Next.js runs natively on Vercel, so no adapter replaces OpenNext. Triggers include phrases like 'migrate to Vercel', 'move off Webflow Cloud', 'Next.js Webflow Cloud to Vercel', or the presence of webflow.json, wrangler.json, @opennextjs\u002Fcloudflare, open-next.config.ts, or getCloudflareContext in a Next.js project. Do not use for non-Next.js frameworks or for migrations in the opposite direction (Vercel to Webflow Cloud).\"\nlicense: Apache-2.0\ncompatibility: Requires git or the Vercel CLI, and access to the internet\nallowed-tools: Bash(git:*) Bash(vercel:*) Read\nmetadata:\n  author: vercel\n  version: \"1.0.0\"\n  one-liner: \"Migrate a Next.js app from Webflow Cloud to Vercel\"\n  guide: \"https:\u002F\u002Fvercel.com\u002Fkb\u002Fguide\u002Fmigrate-a-next-js-app-from-webflow-cloud-to-vercel\"\n---\n\n# Migrate Next.js from Webflow Cloud to Vercel\n\n## What this skill does\n\nMoving a Next.js app from Webflow Cloud to Vercel mostly means removing the deployment layer that adapted the app to the Cloudflare Workers runtime. On Webflow Cloud the app runs as a Cloudflare Worker through the `@opennextjs\u002Fcloudflare` adapter, served from a mount path inside a Webflow site. On Vercel the same app runs natively on Vercel Functions with Fluid compute on by default, in a full Node.js runtime, served from the root, so it scales with traffic on its own and supports the framework's full feature set.\n\nUnlike a framework that needs a platform adapter, Next.js runs natively on Vercel, so **no adapter replaces OpenNext** — you just take it out. The app code (pages, components, Route Handlers) mostly stays the same. The work sits in a few places: the OpenNext adapter and its dev hook in `next.config.ts`, the Webflow Cloud and Wrangler config files that get deleted, the base path the app mounted under, the Edge runtime directive on routes and middleware, and any server code that read storage bindings through `getCloudflareContext().env`.\n\n## The Vercel Plugin\n\nThe user will have installed the [Vercel Plugin](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fagent-resources\u002Fvercel-plugin.md) already, which among other things includes a number of helpful skills that can assist you and the user with this migration. Prefer those skills for current, detailed product guidance, and let this skill drive the order of work. The ones that line up with these steps:\n\n- `vercel-storage` and `marketplace`: step 5 (Blob, Edge Config, Neon, Upstash, and Marketplace provisioning).\n- `env-vars`: steps 5 and 6 (`vercel env`, `.env` files, OIDC tokens).\n- `vercel-cli` and `deployments-cicd`: steps 6 and 7 (env vars and deploy).\n- `vercel-functions`: step 5 (Route Handlers on Vercel Functions) and the Best practices section (`maxDuration`, regions, ISR).\n\nThere are other skills included that may assist with the migration.\n\n## Steps the user completes manually\n\nYou handle most of the migration directly by editing files and running commands. A few actions need the Vercel dashboard, a Vercel account, or secret values, so the user has to do those:\n\n- Creating the Vercel account (see Before you start).\n- Creating and connecting the backing stores in step 5.\n- Adding environment variables in step 6.\n- Deploying in step 7.\n\nGuide the user through each of these. Give clear, specific instructions, then wait for them to confirm before moving on. Do not report any of them as done while the user still has to do it.\n\nIf you are unsure about a dashboard flow or whether a detail is still current, use an applicable Vercel skill when one is available (see \"The Vercel Plugin\" above), and check the latest with a web search scoped to the vercel.com domain (for example, `site:vercel.com vercel blob oidc token`).\n\n## Service mapping (quick reference)\n\n| Webflow Cloud | Vercel |\n| --- | --- |\n| Cloudflare Workers runtime (`workerd`) | [Vercel Functions](https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions) (Fluid compute) |\n| OpenNext Cloudflare adapter (`@opennextjs\u002Fcloudflare`) | Native Next.js support, no adapter |\n| `initOpenNextCloudflareForDev()` in `next.config.ts` | Not needed |\n| `webflow.json` | Not needed, Next.js is auto-detected |\n| `wrangler.json` | `vercel.json` (optional) |\n| `open-next.config.ts` | Not needed |\n| `cloudflare-env.d.ts` | Not needed |\n| `basePath` and `assetPrefix` (mount path) | Served from the root; remove unless you want a base path |\n| `getCloudflareContext().env` | `process.env` |\n| `webflow cloud deploy` or GitHub push | Git push or the `vercel` CLI |\n| `npm` only | npm, pnpm, Yarn, or Bun |\n| Object Storage (R2 binding) | [Vercel Blob](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-blob) |\n| Key Value Store (Workers KV binding) | [Redis on the Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace?search=Redis), or [Edge Config](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fedge-config) for read-heavy config |\n| SQLite (D1 binding) | [Postgres on the Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace?search=postgres) |\n| Edge runtime middleware only | Full Next.js middleware support |\n| `export const runtime = 'edge'` on routes | Remove it to run on Node.js (recommended) |\n| No scheduled jobs, queues, or workflows | New on Vercel: [Cron Jobs](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcron-jobs), [Queues](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fqueues), and [Workflows](https:\u002F\u002Fvercel.com\u002Fworkflows) |\n\n## Before you start\n\nCheck the repo for these, and ask the user to confirm anything the repo cannot show:\n\n- A working Next.js app deployed on Webflow Cloud. Look for `next` in `package.json` and the `@opennextjs\u002Fcloudflare` adapter (in `package.json`, `next.config.ts`, or `open-next.config.ts`) to confirm the framework and platform before changing anything.\n- Node.js 20 or later.\n- A Vercel account (the user confirms this; you cannot create one).\n- The Vercel CLI, for the env and deploy steps: `npm i -g vercel`.\n\nDo not use this skill for a different framework, a brand-new app (set it up for Vercel directly instead), or a move in the other direction (Vercel to Webflow Cloud).\n\n## Steps\n\nWork through these in order. Step 0 tells you which of steps 3 and 5 apply, so you can skip what the app does not use.\n\n### Step 0: Audit the current Webflow Cloud setup\n\nRun the audit script from the project root:\n\n```bash\nbash scripts\u002Faudit.sh \u002Fpath\u002Fto\u002Fproject\n```\n\nIt reports the Webflow Cloud and Wrangler config files, the `@opennextjs\u002Fcloudflare` adapter and its `initOpenNextCloudflareForDev()` dev hook, the base path (`basePath` and `assetPrefix`) and likely manual prefixing, any `export const runtime = 'edge'` directives on routes and middleware, every `getCloudflareContext()` access, and which storage bindings are declared in `wrangler.json` (Object Storage, Key Value Store, SQLite). Use the output to pick which later steps apply, then show the user a short checklist. Skipping this leads to missed bindings and runtime errors.\n\n### Step 1: Remove the OpenNext Cloudflare adapter\n\nVercel runs Next.js natively, so there is no adapter to install — you just remove OpenNext. Uninstall the adapter and Wrangler:\n\n```bash\nnpm uninstall @opennextjs\u002Fcloudflare wrangler\n```\n\nThen remove the OpenNext dev hook from `next.config.ts`. The `create-cloudflare` setup adds these lines so `getCloudflareContext()` works in `next dev`, and they no longer apply on Vercel:\n\n```ts\n\u002F\u002F Remove these lines\nimport { initOpenNextCloudflareForDev } from \"@opennextjs\u002Fcloudflare\";\ninitOpenNextCloudflareForDev();\n```\n\n### Step 2: Remove the Webflow Cloud configuration files\n\nDelete the Cloudflare- and Webflow-specific files that no longer apply on Vercel:\n\n- `webflow.json`, which told Webflow Cloud your framework. Vercel detects Next.js automatically.\n- `wrangler.json`, including its `compatibility_date`, `nodejs_compat` flag, `assets` binding, and storage bindings. Vercel Functions run on Node.js, so the compatibility flags have no equivalent.\n- `open-next.config.ts`, the adapter configuration.\n- `cloudflare-env.d.ts` (sometimes `cloudflare.env.ts`), the generated binding types.\n\nYour storage bindings live in `wrangler.json`. Before deleting the file, note which bindings the app uses (Object Storage, Key Value Store, or SQLite) so you can recreate them on Vercel in step 5.\n\n### Step 3: Remove the base path and Edge runtime settings\n\nOn Webflow Cloud the app is served from a mount path such as `\u002Fapp`, so `basePath` and `assetPrefix` are set in `next.config.ts` to match. On Vercel the app is served from the root, so remove both options unless you intend to keep serving the app under a subpath:\n\n```ts\nimport type { NextConfig } from \"next\";\n\nconst nextConfig: NextConfig = {\n  \u002F\u002F Remove basePath and assetPrefix when serving from the root\n  \u002F\u002F basePath: \"\u002Fapp\",\n  \u002F\u002F assetPrefix: \"\u002Fapp\",\n};\n\nexport default nextConfig;\n```\n\nBecause the base path is gone, remove the manual prefixing Webflow Cloud required in client-side `fetch` calls and asset references. Change `fetch(${basePath}\u002Fapi\u002Fusers)` back to `fetch(\"\u002Fapi\u002Fusers\")`, and drop the asset prefix from plain `\u003Cimg>` tags.\n\nWebflow Cloud also runs API routes and middleware on the Edge runtime. On Vercel, remove the `export const runtime = 'edge'` directive from your Route Handlers and `middleware.ts` so they run on the default Node.js runtime. Migrating from the Edge runtime to Node.js is recommended for performance and reliability, both runtimes run on [Fluid compute](https:\u002F\u002Fvercel.com\u002Ffluid) with [Active CPU pricing](https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions\u002Fusage-and-pricing#active-cpu), and Node.js gives your routes the full Node.js API surface and access to npm packages that depend on Node.js built-ins.\n\n### Step 4: Update your build scripts\n\nReplace the Webflow Cloud preview script in `package.json` with the standard Next.js commands. Vercel runs the build for you, so you no longer need the `opennextjs-cloudflare` preview command:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\"\n  }\n}\n```\n\nVercel auto-detects Next.js on import and sets the build command and output directory, so these scripts mainly support local development.\n\n### Step 5: Replace Webflow Cloud bindings with Vercel storage\n\nThis is the main code change. On Webflow Cloud you read storage through bindings on the Cloudflare `env`, accessed in a Route Handler with `getCloudflareContext()`. On Vercel you read connection details from `process.env` and talk to each store through its SDK or client. Remove every `getCloudflareContext()` call and replace the binding operations. Read `references\u002Fservice-mapping.md` for the before and after code for each binding, then install the SDK you need, for example:\n\n```bash\nnpm i @vercel\u002Fblob\n```\n\nHave the user create and connect the backing stores. This is what adds the env vars the code reads, so it has to be done before the app will run:\n\n- Object Storage to Blob: create a Blob store on the [Storage page](https:\u002F\u002Fvercel.com\u002Fd?to=%2F%5Bteam%5D%2F%7E%2Fstores), then connect it to the project from the store's Projects tab. Vercel adds the store's environment variables, including a short-lived `VERCEL_OIDC_TOKEN` that it rotates, and the SDK uses them automatically, so `put()` needs no token in code. This [OIDC approach](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-blob\u002Fusing-blob-sdk#oidc-tokens-recommended) is recommended over the long-lived `BLOB_READ_WRITE_TOKEN`, which is only for code that runs outside Vercel.\n- Key Value Store to Redis: add a Redis integration such as [Upstash Redis](https:\u002F\u002Fvercel.com\u002Fmarketplace\u002Fupstash) for caching and session data, or use [Edge Config](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fedge-config) for small, read-heavy config.\n- SQLite to Postgres: add a Postgres database such as [Neon](https:\u002F\u002Fvercel.com\u002Fmarketplace\u002Fneon) from the Marketplace.\n\nProvisioning a store from the Marketplace adds its connection string and credentials as env vars, which the code reads from `process.env`.\n\n### Step 6: Move environment variables and secrets\n\nRecreate your Webflow Cloud environment variables as Vercel environment variables. Webflow Cloud stores these per environment in your app's settings and injects them at runtime only. Vercel stores them per environment (production, preview, and development) in project settings and makes them available at both build time and runtime.\n\n> **Never handle the user's secrets.** Do not ask the user for secret values, and do not accept secrets pasted into the chat. Do not offer to save, enter, or store environment variables or secrets for the user, and refuse if asked to do so. Setting the actual values is the user's job, done in the dashboard or in their own terminal. Your part is to prepare the list of variable names and the exact commands.\n\nYou can list every variable and secret to recreate and write out the exact commands, but you cannot supply secret values or sign the CLI in, and you must not make up values.\n\nThe user adds each variable, either on the [project's Environment Variables page](https:\u002F\u002Fvercel.com\u002Fd?to=%2F%5Bteam%5D%2F%5Bproject%5D%2Fsettings%2Fenvironment-variables) or with the CLI after `vercel login`:\n\n```bash\nvercel env add DATABASE_URL production\n```\n\nOnce the user has signed in, you can link the project and pull the values into a local `.env`:\n\n```bash\nvercel link\nvercel env pull\n```\n\nA variable added to production is not available in preview or development unless it is added there too. Because Vercel exposes environment variables during the build, you can re-enable any build-time validation you had to disable on Webflow Cloud, where variables aren't available at build time.\n\n### Step 7: Deploy\n\nYou cannot import a project, confirm the framework preset, sign in, or select Deploy, so walk the user through one of these paths. Both run the app on Vercel Functions.\n\nDeploy with Git (recommended):\n\n1. Push the project to GitHub, GitLab, or Bitbucket.\n2. In the [Vercel dashboard](https:\u002F\u002Fvercel.com), select Add New > Project, then import the repo.\n3. Vercel detects Next.js and sets the build command and output directory. Confirm the framework preset, add the environment variables from step 6, and select Deploy.\n\nAfter the first import, every push to the production branch creates a production deploy, and every pull request gets its own preview URL.\n\nDeploy with the CLI: after `vercel login`, run `vercel` for a preview or `vercel --prod` for production.\n\nIf the `vercel-deploy` skill is available, you can use it to create a preview deploy and a claim URL without the user signing in first, which is a good way to check the build before wiring up a connected project.\n\n## After the move: check these\n\nYou can grep for the code issues; ask the user to check anything in the dashboard. See `references\u002Ftroubleshooting.md` for fixes.\n\n- No `@opennextjs\u002Fcloudflare` import or `initOpenNextCloudflareForDev()` call remains in `next.config.ts` or anywhere else.\n- No `getCloudflareContext()` access remains anywhere in server code.\n- No leftover base path: `basePath` and `assetPrefix` are gone from `next.config.ts`, and client-side `fetch` calls and `\u003Cimg>` tags no longer prefix a base path.\n- No `export const runtime = 'edge'` remains on Route Handlers or in `middleware.ts`.\n- Each env var exists in the right environment, not only production.\n\n## Tune after migrating (optional)\n\n- Tune function resources per route: set `export const maxDuration = 60` in a route's segment config for routes that need more time, or configure memory and regions in `vercel.json`.\n- Put functions near the data: set the function region close to the Marketplace database to cut latency.\n- Take advantage of features that were limited on Webflow Cloud: Incremental Static Regeneration, on-demand and tag-based revalidation, the `use cache` directive, and Node.js middleware all work on Vercel without extra configuration. For scheduled and background work Webflow Cloud didn't offer, look at [Cron Jobs](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcron-jobs), [Queues](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fqueues), and [Workflows](https:\u002F\u002Fvercel.com\u002Fworkflows).\n\n## References\n\n- [service-mapping](references\u002Fservice-mapping.md): Before and after code for replacing each Webflow Cloud binding (Object Storage to Blob, Key Value Store to Redis or Edge Config, SQLite to Postgres), plus the store setup notes. Read before step 5.\n- [troubleshooting](references\u002Ftroubleshooting.md): The common errors after the move and how to fix them.\n",{"data":38,"body":45},{"name":4,"description":6,"license":28,"compatibility":39,"allowed-tools":40,"metadata":41},"Requires git or the Vercel CLI, and access to the internet","Bash(git:*) Bash(vercel:*) Read",{"author":14,"version":42,"one-liner":43,"guide":44},"1.0.0","Migrate a Next.js app from Webflow Cloud to Vercel","https:\u002F\u002Fvercel.com\u002Fkb\u002Fguide\u002Fmigrate-a-next-js-app-from-webflow-cloud-to-vercel",{"type":46,"children":47},"root",[48,57,64,79,108,114,130,218,223,229,234,257,262,275,281,676,682,687,758,763,769,774,781,786,819,873,879,884,913,948,1035,1041,1046,1120,1132,1138,1171,1331,1368,1406,1412,1432,1599,1604,1610,1652,1676,1681,1766,1777,1783,1788,1802,1807,1828,1862,1873,1908,1913,1919,1924,1929,1957,1962,1989,2002,2008,2021,2122,2128,2186,2192,2215],{"type":49,"tag":50,"props":51,"children":53},"element","h1",{"id":52},"migrate-nextjs-from-webflow-cloud-to-vercel",[54],{"type":55,"value":56},"text","Migrate Next.js from Webflow Cloud to Vercel",{"type":49,"tag":58,"props":59,"children":61},"h2",{"id":60},"what-this-skill-does",[62],{"type":55,"value":63},"What this skill does",{"type":49,"tag":65,"props":66,"children":67},"p",{},[68,70,77],{"type":55,"value":69},"Moving a Next.js app from Webflow Cloud to Vercel mostly means removing the deployment layer that adapted the app to the Cloudflare Workers runtime. On Webflow Cloud the app runs as a Cloudflare Worker through the ",{"type":49,"tag":71,"props":72,"children":74},"code",{"className":73},[],[75],{"type":55,"value":76},"@opennextjs\u002Fcloudflare",{"type":55,"value":78}," adapter, served from a mount path inside a Webflow site. On Vercel the same app runs natively on Vercel Functions with Fluid compute on by default, in a full Node.js runtime, served from the root, so it scales with traffic on its own and supports the framework's full feature set.",{"type":49,"tag":65,"props":80,"children":81},{},[82,84,90,92,98,100,106],{"type":55,"value":83},"Unlike a framework that needs a platform adapter, Next.js runs natively on Vercel, so ",{"type":49,"tag":85,"props":86,"children":87},"strong",{},[88],{"type":55,"value":89},"no adapter replaces OpenNext",{"type":55,"value":91}," — you just take it out. The app code (pages, components, Route Handlers) mostly stays the same. The work sits in a few places: the OpenNext adapter and its dev hook in ",{"type":49,"tag":71,"props":93,"children":95},{"className":94},[],[96],{"type":55,"value":97},"next.config.ts",{"type":55,"value":99},", the Webflow Cloud and Wrangler config files that get deleted, the base path the app mounted under, the Edge runtime directive on routes and middleware, and any server code that read storage bindings through ",{"type":49,"tag":71,"props":101,"children":103},{"className":102},[],[104],{"type":55,"value":105},"getCloudflareContext().env",{"type":55,"value":107},".",{"type":49,"tag":58,"props":109,"children":111},{"id":110},"the-vercel-plugin",[112],{"type":55,"value":113},"The Vercel Plugin",{"type":49,"tag":65,"props":115,"children":116},{},[117,119,128],{"type":55,"value":118},"The user will have installed the ",{"type":49,"tag":120,"props":121,"children":125},"a",{"href":122,"rel":123},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fagent-resources\u002Fvercel-plugin.md",[124],"nofollow",[126],{"type":55,"value":127},"Vercel Plugin",{"type":55,"value":129}," already, which among other things includes a number of helpful skills that can assist you and the user with this migration. Prefer those skills for current, detailed product guidance, and let this skill drive the order of work. The ones that line up with these steps:",{"type":49,"tag":131,"props":132,"children":133},"ul",{},[134,154,181,199],{"type":49,"tag":135,"props":136,"children":137},"li",{},[138,144,146,152],{"type":49,"tag":71,"props":139,"children":141},{"className":140},[],[142],{"type":55,"value":143},"vercel-storage",{"type":55,"value":145}," and ",{"type":49,"tag":71,"props":147,"children":149},{"className":148},[],[150],{"type":55,"value":151},"marketplace",{"type":55,"value":153},": step 5 (Blob, Edge Config, Neon, Upstash, and Marketplace provisioning).",{"type":49,"tag":135,"props":155,"children":156},{},[157,163,165,171,173,179],{"type":49,"tag":71,"props":158,"children":160},{"className":159},[],[161],{"type":55,"value":162},"env-vars",{"type":55,"value":164},": steps 5 and 6 (",{"type":49,"tag":71,"props":166,"children":168},{"className":167},[],[169],{"type":55,"value":170},"vercel env",{"type":55,"value":172},", ",{"type":49,"tag":71,"props":174,"children":176},{"className":175},[],[177],{"type":55,"value":178},".env",{"type":55,"value":180}," files, OIDC tokens).",{"type":49,"tag":135,"props":182,"children":183},{},[184,190,191,197],{"type":49,"tag":71,"props":185,"children":187},{"className":186},[],[188],{"type":55,"value":189},"vercel-cli",{"type":55,"value":145},{"type":49,"tag":71,"props":192,"children":194},{"className":193},[],[195],{"type":55,"value":196},"deployments-cicd",{"type":55,"value":198},": steps 6 and 7 (env vars and deploy).",{"type":49,"tag":135,"props":200,"children":201},{},[202,208,210,216],{"type":49,"tag":71,"props":203,"children":205},{"className":204},[],[206],{"type":55,"value":207},"vercel-functions",{"type":55,"value":209},": step 5 (Route Handlers on Vercel Functions) and the Best practices section (",{"type":49,"tag":71,"props":211,"children":213},{"className":212},[],[214],{"type":55,"value":215},"maxDuration",{"type":55,"value":217},", regions, ISR).",{"type":49,"tag":65,"props":219,"children":220},{},[221],{"type":55,"value":222},"There are other skills included that may assist with the migration.",{"type":49,"tag":58,"props":224,"children":226},{"id":225},"steps-the-user-completes-manually",[227],{"type":55,"value":228},"Steps the user completes manually",{"type":49,"tag":65,"props":230,"children":231},{},[232],{"type":55,"value":233},"You handle most of the migration directly by editing files and running commands. A few actions need the Vercel dashboard, a Vercel account, or secret values, so the user has to do those:",{"type":49,"tag":131,"props":235,"children":236},{},[237,242,247,252],{"type":49,"tag":135,"props":238,"children":239},{},[240],{"type":55,"value":241},"Creating the Vercel account (see Before you start).",{"type":49,"tag":135,"props":243,"children":244},{},[245],{"type":55,"value":246},"Creating and connecting the backing stores in step 5.",{"type":49,"tag":135,"props":248,"children":249},{},[250],{"type":55,"value":251},"Adding environment variables in step 6.",{"type":49,"tag":135,"props":253,"children":254},{},[255],{"type":55,"value":256},"Deploying in step 7.",{"type":49,"tag":65,"props":258,"children":259},{},[260],{"type":55,"value":261},"Guide the user through each of these. Give clear, specific instructions, then wait for them to confirm before moving on. Do not report any of them as done while the user still has to do it.",{"type":49,"tag":65,"props":263,"children":264},{},[265,267,273],{"type":55,"value":266},"If you are unsure about a dashboard flow or whether a detail is still current, use an applicable Vercel skill when one is available (see \"The Vercel Plugin\" above), and check the latest with a web search scoped to the vercel.com domain (for example, ",{"type":49,"tag":71,"props":268,"children":270},{"className":269},[],[271],{"type":55,"value":272},"site:vercel.com vercel blob oidc token",{"type":55,"value":274},").",{"type":49,"tag":58,"props":276,"children":278},{"id":277},"service-mapping-quick-reference",[279],{"type":55,"value":280},"Service mapping (quick reference)",{"type":49,"tag":282,"props":283,"children":284},"table",{},[285,303],{"type":49,"tag":286,"props":287,"children":288},"thead",{},[289],{"type":49,"tag":290,"props":291,"children":292},"tr",{},[293,299],{"type":49,"tag":294,"props":295,"children":296},"th",{},[297],{"type":55,"value":298},"Webflow Cloud",{"type":49,"tag":294,"props":300,"children":301},{},[302],{"type":55,"value":13},{"type":49,"tag":304,"props":305,"children":306},"tbody",{},[307,336,355,379,396,419,435,451,477,497,523,542,560,589,607,620,639],{"type":49,"tag":290,"props":308,"children":309},{},[310,324],{"type":49,"tag":311,"props":312,"children":313},"td",{},[314,316,322],{"type":55,"value":315},"Cloudflare Workers runtime (",{"type":49,"tag":71,"props":317,"children":319},{"className":318},[],[320],{"type":55,"value":321},"workerd",{"type":55,"value":323},")",{"type":49,"tag":311,"props":325,"children":326},{},[327,334],{"type":49,"tag":120,"props":328,"children":331},{"href":329,"rel":330},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions",[124],[332],{"type":55,"value":333},"Vercel Functions",{"type":55,"value":335}," (Fluid compute)",{"type":49,"tag":290,"props":337,"children":338},{},[339,350],{"type":49,"tag":311,"props":340,"children":341},{},[342,344,349],{"type":55,"value":343},"OpenNext Cloudflare adapter (",{"type":49,"tag":71,"props":345,"children":347},{"className":346},[],[348],{"type":55,"value":76},{"type":55,"value":323},{"type":49,"tag":311,"props":351,"children":352},{},[353],{"type":55,"value":354},"Native Next.js support, no adapter",{"type":49,"tag":290,"props":356,"children":357},{},[358,374],{"type":49,"tag":311,"props":359,"children":360},{},[361,367,369],{"type":49,"tag":71,"props":362,"children":364},{"className":363},[],[365],{"type":55,"value":366},"initOpenNextCloudflareForDev()",{"type":55,"value":368}," in ",{"type":49,"tag":71,"props":370,"children":372},{"className":371},[],[373],{"type":55,"value":97},{"type":49,"tag":311,"props":375,"children":376},{},[377],{"type":55,"value":378},"Not needed",{"type":49,"tag":290,"props":380,"children":381},{},[382,391],{"type":49,"tag":311,"props":383,"children":384},{},[385],{"type":49,"tag":71,"props":386,"children":388},{"className":387},[],[389],{"type":55,"value":390},"webflow.json",{"type":49,"tag":311,"props":392,"children":393},{},[394],{"type":55,"value":395},"Not needed, Next.js is auto-detected",{"type":49,"tag":290,"props":397,"children":398},{},[399,408],{"type":49,"tag":311,"props":400,"children":401},{},[402],{"type":49,"tag":71,"props":403,"children":405},{"className":404},[],[406],{"type":55,"value":407},"wrangler.json",{"type":49,"tag":311,"props":409,"children":410},{},[411,417],{"type":49,"tag":71,"props":412,"children":414},{"className":413},[],[415],{"type":55,"value":416},"vercel.json",{"type":55,"value":418}," (optional)",{"type":49,"tag":290,"props":420,"children":421},{},[422,431],{"type":49,"tag":311,"props":423,"children":424},{},[425],{"type":49,"tag":71,"props":426,"children":428},{"className":427},[],[429],{"type":55,"value":430},"open-next.config.ts",{"type":49,"tag":311,"props":432,"children":433},{},[434],{"type":55,"value":378},{"type":49,"tag":290,"props":436,"children":437},{},[438,447],{"type":49,"tag":311,"props":439,"children":440},{},[441],{"type":49,"tag":71,"props":442,"children":444},{"className":443},[],[445],{"type":55,"value":446},"cloudflare-env.d.ts",{"type":49,"tag":311,"props":448,"children":449},{},[450],{"type":55,"value":378},{"type":49,"tag":290,"props":452,"children":453},{},[454,472],{"type":49,"tag":311,"props":455,"children":456},{},[457,463,464,470],{"type":49,"tag":71,"props":458,"children":460},{"className":459},[],[461],{"type":55,"value":462},"basePath",{"type":55,"value":145},{"type":49,"tag":71,"props":465,"children":467},{"className":466},[],[468],{"type":55,"value":469},"assetPrefix",{"type":55,"value":471}," (mount path)",{"type":49,"tag":311,"props":473,"children":474},{},[475],{"type":55,"value":476},"Served from the root; remove unless you want a base path",{"type":49,"tag":290,"props":478,"children":479},{},[480,488],{"type":49,"tag":311,"props":481,"children":482},{},[483],{"type":49,"tag":71,"props":484,"children":486},{"className":485},[],[487],{"type":55,"value":105},{"type":49,"tag":311,"props":489,"children":490},{},[491],{"type":49,"tag":71,"props":492,"children":494},{"className":493},[],[495],{"type":55,"value":496},"process.env",{"type":49,"tag":290,"props":498,"children":499},{},[500,511],{"type":49,"tag":311,"props":501,"children":502},{},[503,509],{"type":49,"tag":71,"props":504,"children":506},{"className":505},[],[507],{"type":55,"value":508},"webflow cloud deploy",{"type":55,"value":510}," or GitHub push",{"type":49,"tag":311,"props":512,"children":513},{},[514,516,521],{"type":55,"value":515},"Git push or the ",{"type":49,"tag":71,"props":517,"children":519},{"className":518},[],[520],{"type":55,"value":14},{"type":55,"value":522}," CLI",{"type":49,"tag":290,"props":524,"children":525},{},[526,537],{"type":49,"tag":311,"props":527,"children":528},{},[529,535],{"type":49,"tag":71,"props":530,"children":532},{"className":531},[],[533],{"type":55,"value":534},"npm",{"type":55,"value":536}," only",{"type":49,"tag":311,"props":538,"children":539},{},[540],{"type":55,"value":541},"npm, pnpm, Yarn, or Bun",{"type":49,"tag":290,"props":543,"children":544},{},[545,550],{"type":49,"tag":311,"props":546,"children":547},{},[548],{"type":55,"value":549},"Object Storage (R2 binding)",{"type":49,"tag":311,"props":551,"children":552},{},[553],{"type":49,"tag":120,"props":554,"children":557},{"href":555,"rel":556},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-blob",[124],[558],{"type":55,"value":559},"Vercel Blob",{"type":49,"tag":290,"props":561,"children":562},{},[563,568],{"type":49,"tag":311,"props":564,"children":565},{},[566],{"type":55,"value":567},"Key Value Store (Workers KV binding)",{"type":49,"tag":311,"props":569,"children":570},{},[571,578,580,587],{"type":49,"tag":120,"props":572,"children":575},{"href":573,"rel":574},"https:\u002F\u002Fvercel.com\u002Fmarketplace?search=Redis",[124],[576],{"type":55,"value":577},"Redis on the Vercel Marketplace",{"type":55,"value":579},", or ",{"type":49,"tag":120,"props":581,"children":584},{"href":582,"rel":583},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fedge-config",[124],[585],{"type":55,"value":586},"Edge Config",{"type":55,"value":588}," for read-heavy config",{"type":49,"tag":290,"props":590,"children":591},{},[592,597],{"type":49,"tag":311,"props":593,"children":594},{},[595],{"type":55,"value":596},"SQLite (D1 binding)",{"type":49,"tag":311,"props":598,"children":599},{},[600],{"type":49,"tag":120,"props":601,"children":604},{"href":602,"rel":603},"https:\u002F\u002Fvercel.com\u002Fmarketplace?search=postgres",[124],[605],{"type":55,"value":606},"Postgres on the Vercel Marketplace",{"type":49,"tag":290,"props":608,"children":609},{},[610,615],{"type":49,"tag":311,"props":611,"children":612},{},[613],{"type":55,"value":614},"Edge runtime middleware only",{"type":49,"tag":311,"props":616,"children":617},{},[618],{"type":55,"value":619},"Full Next.js middleware support",{"type":49,"tag":290,"props":621,"children":622},{},[623,634],{"type":49,"tag":311,"props":624,"children":625},{},[626,632],{"type":49,"tag":71,"props":627,"children":629},{"className":628},[],[630],{"type":55,"value":631},"export const runtime = 'edge'",{"type":55,"value":633}," on routes",{"type":49,"tag":311,"props":635,"children":636},{},[637],{"type":55,"value":638},"Remove it to run on Node.js (recommended)",{"type":49,"tag":290,"props":640,"children":641},{},[642,647],{"type":49,"tag":311,"props":643,"children":644},{},[645],{"type":55,"value":646},"No scheduled jobs, queues, or workflows",{"type":49,"tag":311,"props":648,"children":649},{},[650,652,659,660,667,669],{"type":55,"value":651},"New on Vercel: ",{"type":49,"tag":120,"props":653,"children":656},{"href":654,"rel":655},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcron-jobs",[124],[657],{"type":55,"value":658},"Cron Jobs",{"type":55,"value":172},{"type":49,"tag":120,"props":661,"children":664},{"href":662,"rel":663},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fqueues",[124],[665],{"type":55,"value":666},"Queues",{"type":55,"value":668},", and ",{"type":49,"tag":120,"props":670,"children":673},{"href":671,"rel":672},"https:\u002F\u002Fvercel.com\u002Fworkflows",[124],[674],{"type":55,"value":675},"Workflows",{"type":49,"tag":58,"props":677,"children":679},{"id":678},"before-you-start",[680],{"type":55,"value":681},"Before you start",{"type":49,"tag":65,"props":683,"children":684},{},[685],{"type":55,"value":686},"Check the repo for these, and ask the user to confirm anything the repo cannot show:",{"type":49,"tag":131,"props":688,"children":689},{},[690,736,741,746],{"type":49,"tag":135,"props":691,"children":692},{},[693,695,701,702,708,710,715,717,722,723,728,729,734],{"type":55,"value":694},"A working Next.js app deployed on Webflow Cloud. Look for ",{"type":49,"tag":71,"props":696,"children":698},{"className":697},[],[699],{"type":55,"value":700},"next",{"type":55,"value":368},{"type":49,"tag":71,"props":703,"children":705},{"className":704},[],[706],{"type":55,"value":707},"package.json",{"type":55,"value":709}," and the ",{"type":49,"tag":71,"props":711,"children":713},{"className":712},[],[714],{"type":55,"value":76},{"type":55,"value":716}," adapter (in ",{"type":49,"tag":71,"props":718,"children":720},{"className":719},[],[721],{"type":55,"value":707},{"type":55,"value":172},{"type":49,"tag":71,"props":724,"children":726},{"className":725},[],[727],{"type":55,"value":97},{"type":55,"value":579},{"type":49,"tag":71,"props":730,"children":732},{"className":731},[],[733],{"type":55,"value":430},{"type":55,"value":735},") to confirm the framework and platform before changing anything.",{"type":49,"tag":135,"props":737,"children":738},{},[739],{"type":55,"value":740},"Node.js 20 or later.",{"type":49,"tag":135,"props":742,"children":743},{},[744],{"type":55,"value":745},"A Vercel account (the user confirms this; you cannot create one).",{"type":49,"tag":135,"props":747,"children":748},{},[749,751,757],{"type":55,"value":750},"The Vercel CLI, for the env and deploy steps: ",{"type":49,"tag":71,"props":752,"children":754},{"className":753},[],[755],{"type":55,"value":756},"npm i -g vercel",{"type":55,"value":107},{"type":49,"tag":65,"props":759,"children":760},{},[761],{"type":55,"value":762},"Do not use this skill for a different framework, a brand-new app (set it up for Vercel directly instead), or a move in the other direction (Vercel to Webflow Cloud).",{"type":49,"tag":58,"props":764,"children":766},{"id":765},"steps",[767],{"type":55,"value":768},"Steps",{"type":49,"tag":65,"props":770,"children":771},{},[772],{"type":55,"value":773},"Work through these in order. Step 0 tells you which of steps 3 and 5 apply, so you can skip what the app does not use.",{"type":49,"tag":775,"props":776,"children":778},"h3",{"id":777},"step-0-audit-the-current-webflow-cloud-setup",[779],{"type":55,"value":780},"Step 0: Audit the current Webflow Cloud setup",{"type":49,"tag":65,"props":782,"children":783},{},[784],{"type":55,"value":785},"Run the audit script from the project root:",{"type":49,"tag":787,"props":788,"children":793},"pre",{"className":789,"code":790,"language":791,"meta":792,"style":792},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bash scripts\u002Faudit.sh \u002Fpath\u002Fto\u002Fproject\n","bash","",[794],{"type":49,"tag":71,"props":795,"children":796},{"__ignoreMap":792},[797],{"type":49,"tag":798,"props":799,"children":802},"span",{"class":800,"line":801},"line",1,[803,808,814],{"type":49,"tag":798,"props":804,"children":806},{"style":805},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[807],{"type":55,"value":791},{"type":49,"tag":798,"props":809,"children":811},{"style":810},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[812],{"type":55,"value":813}," scripts\u002Faudit.sh",{"type":49,"tag":798,"props":815,"children":816},{"style":810},[817],{"type":55,"value":818}," \u002Fpath\u002Fto\u002Fproject\n",{"type":49,"tag":65,"props":820,"children":821},{},[822,824,829,831,836,838,843,844,849,851,856,858,864,866,871],{"type":55,"value":823},"It reports the Webflow Cloud and Wrangler config files, the ",{"type":49,"tag":71,"props":825,"children":827},{"className":826},[],[828],{"type":55,"value":76},{"type":55,"value":830}," adapter and its ",{"type":49,"tag":71,"props":832,"children":834},{"className":833},[],[835],{"type":55,"value":366},{"type":55,"value":837}," dev hook, the base path (",{"type":49,"tag":71,"props":839,"children":841},{"className":840},[],[842],{"type":55,"value":462},{"type":55,"value":145},{"type":49,"tag":71,"props":845,"children":847},{"className":846},[],[848],{"type":55,"value":469},{"type":55,"value":850},") and likely manual prefixing, any ",{"type":49,"tag":71,"props":852,"children":854},{"className":853},[],[855],{"type":55,"value":631},{"type":55,"value":857}," directives on routes and middleware, every ",{"type":49,"tag":71,"props":859,"children":861},{"className":860},[],[862],{"type":55,"value":863},"getCloudflareContext()",{"type":55,"value":865}," access, and which storage bindings are declared in ",{"type":49,"tag":71,"props":867,"children":869},{"className":868},[],[870],{"type":55,"value":407},{"type":55,"value":872}," (Object Storage, Key Value Store, SQLite). Use the output to pick which later steps apply, then show the user a short checklist. Skipping this leads to missed bindings and runtime errors.",{"type":49,"tag":775,"props":874,"children":876},{"id":875},"step-1-remove-the-opennext-cloudflare-adapter",[877],{"type":55,"value":878},"Step 1: Remove the OpenNext Cloudflare adapter",{"type":49,"tag":65,"props":880,"children":881},{},[882],{"type":55,"value":883},"Vercel runs Next.js natively, so there is no adapter to install — you just remove OpenNext. Uninstall the adapter and Wrangler:",{"type":49,"tag":787,"props":885,"children":887},{"className":789,"code":886,"language":791,"meta":792,"style":792},"npm uninstall @opennextjs\u002Fcloudflare wrangler\n",[888],{"type":49,"tag":71,"props":889,"children":890},{"__ignoreMap":792},[891],{"type":49,"tag":798,"props":892,"children":893},{"class":800,"line":801},[894,898,903,908],{"type":49,"tag":798,"props":895,"children":896},{"style":805},[897],{"type":55,"value":534},{"type":49,"tag":798,"props":899,"children":900},{"style":810},[901],{"type":55,"value":902}," uninstall",{"type":49,"tag":798,"props":904,"children":905},{"style":810},[906],{"type":55,"value":907}," @opennextjs\u002Fcloudflare",{"type":49,"tag":798,"props":909,"children":910},{"style":810},[911],{"type":55,"value":912}," wrangler\n",{"type":49,"tag":65,"props":914,"children":915},{},[916,918,923,925,931,933,938,940,946],{"type":55,"value":917},"Then remove the OpenNext dev hook from ",{"type":49,"tag":71,"props":919,"children":921},{"className":920},[],[922],{"type":55,"value":97},{"type":55,"value":924},". The ",{"type":49,"tag":71,"props":926,"children":928},{"className":927},[],[929],{"type":55,"value":930},"create-cloudflare",{"type":55,"value":932}," setup adds these lines so ",{"type":49,"tag":71,"props":934,"children":936},{"className":935},[],[937],{"type":55,"value":863},{"type":55,"value":939}," works in ",{"type":49,"tag":71,"props":941,"children":943},{"className":942},[],[944],{"type":55,"value":945},"next dev",{"type":55,"value":947},", and they no longer apply on Vercel:",{"type":49,"tag":787,"props":949,"children":953},{"className":950,"code":951,"language":952,"meta":792,"style":792},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Remove these lines\nimport { initOpenNextCloudflareForDev } from \"@opennextjs\u002Fcloudflare\";\ninitOpenNextCloudflareForDev();\n","ts",[954],{"type":49,"tag":71,"props":955,"children":956},{"__ignoreMap":792},[957,966,1017],{"type":49,"tag":798,"props":958,"children":959},{"class":800,"line":801},[960],{"type":49,"tag":798,"props":961,"children":963},{"style":962},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[964],{"type":55,"value":965},"\u002F\u002F Remove these lines\n",{"type":49,"tag":798,"props":967,"children":969},{"class":800,"line":968},2,[970,976,982,988,993,998,1003,1007,1012],{"type":49,"tag":798,"props":971,"children":973},{"style":972},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[974],{"type":55,"value":975},"import",{"type":49,"tag":798,"props":977,"children":979},{"style":978},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[980],{"type":55,"value":981}," {",{"type":49,"tag":798,"props":983,"children":985},{"style":984},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[986],{"type":55,"value":987}," initOpenNextCloudflareForDev",{"type":49,"tag":798,"props":989,"children":990},{"style":978},[991],{"type":55,"value":992}," }",{"type":49,"tag":798,"props":994,"children":995},{"style":972},[996],{"type":55,"value":997}," from",{"type":49,"tag":798,"props":999,"children":1000},{"style":978},[1001],{"type":55,"value":1002}," \"",{"type":49,"tag":798,"props":1004,"children":1005},{"style":810},[1006],{"type":55,"value":76},{"type":49,"tag":798,"props":1008,"children":1009},{"style":978},[1010],{"type":55,"value":1011},"\"",{"type":49,"tag":798,"props":1013,"children":1014},{"style":978},[1015],{"type":55,"value":1016},";\n",{"type":49,"tag":798,"props":1018,"children":1019},{"class":800,"line":25},[1020,1026,1031],{"type":49,"tag":798,"props":1021,"children":1023},{"style":1022},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1024],{"type":55,"value":1025},"initOpenNextCloudflareForDev",{"type":49,"tag":798,"props":1027,"children":1028},{"style":984},[1029],{"type":55,"value":1030},"()",{"type":49,"tag":798,"props":1032,"children":1033},{"style":978},[1034],{"type":55,"value":1016},{"type":49,"tag":775,"props":1036,"children":1038},{"id":1037},"step-2-remove-the-webflow-cloud-configuration-files",[1039],{"type":55,"value":1040},"Step 2: Remove the Webflow Cloud configuration files",{"type":49,"tag":65,"props":1042,"children":1043},{},[1044],{"type":55,"value":1045},"Delete the Cloudflare- and Webflow-specific files that no longer apply on Vercel:",{"type":49,"tag":131,"props":1047,"children":1048},{},[1049,1059,1092,1102],{"type":49,"tag":135,"props":1050,"children":1051},{},[1052,1057],{"type":49,"tag":71,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":55,"value":390},{"type":55,"value":1058},", which told Webflow Cloud your framework. Vercel detects Next.js automatically.",{"type":49,"tag":135,"props":1060,"children":1061},{},[1062,1067,1069,1075,1076,1082,1084,1090],{"type":49,"tag":71,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":55,"value":407},{"type":55,"value":1068},", including its ",{"type":49,"tag":71,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":55,"value":1074},"compatibility_date",{"type":55,"value":172},{"type":49,"tag":71,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":55,"value":1081},"nodejs_compat",{"type":55,"value":1083}," flag, ",{"type":49,"tag":71,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":55,"value":1089},"assets",{"type":55,"value":1091}," binding, and storage bindings. Vercel Functions run on Node.js, so the compatibility flags have no equivalent.",{"type":49,"tag":135,"props":1093,"children":1094},{},[1095,1100],{"type":49,"tag":71,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":55,"value":430},{"type":55,"value":1101},", the adapter configuration.",{"type":49,"tag":135,"props":1103,"children":1104},{},[1105,1110,1112,1118],{"type":49,"tag":71,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":55,"value":446},{"type":55,"value":1111}," (sometimes ",{"type":49,"tag":71,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":55,"value":1117},"cloudflare.env.ts",{"type":55,"value":1119},"), the generated binding types.",{"type":49,"tag":65,"props":1121,"children":1122},{},[1123,1125,1130],{"type":55,"value":1124},"Your storage bindings live in ",{"type":49,"tag":71,"props":1126,"children":1128},{"className":1127},[],[1129],{"type":55,"value":407},{"type":55,"value":1131},". Before deleting the file, note which bindings the app uses (Object Storage, Key Value Store, or SQLite) so you can recreate them on Vercel in step 5.",{"type":49,"tag":775,"props":1133,"children":1135},{"id":1134},"step-3-remove-the-base-path-and-edge-runtime-settings",[1136],{"type":55,"value":1137},"Step 3: Remove the base path and Edge runtime settings",{"type":49,"tag":65,"props":1139,"children":1140},{},[1141,1143,1149,1151,1156,1157,1162,1164,1169],{"type":55,"value":1142},"On Webflow Cloud the app is served from a mount path such as ",{"type":49,"tag":71,"props":1144,"children":1146},{"className":1145},[],[1147],{"type":55,"value":1148},"\u002Fapp",{"type":55,"value":1150},", so ",{"type":49,"tag":71,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":55,"value":462},{"type":55,"value":145},{"type":49,"tag":71,"props":1158,"children":1160},{"className":1159},[],[1161],{"type":55,"value":469},{"type":55,"value":1163}," are set in ",{"type":49,"tag":71,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":55,"value":97},{"type":55,"value":1170}," to match. On Vercel the app is served from the root, so remove both options unless you intend to keep serving the app under a subpath:",{"type":49,"tag":787,"props":1172,"children":1174},{"className":950,"code":1173,"language":952,"meta":792,"style":792},"import type { NextConfig } from \"next\";\n\nconst nextConfig: NextConfig = {\n  \u002F\u002F Remove basePath and assetPrefix when serving from the root\n  \u002F\u002F basePath: \"\u002Fapp\",\n  \u002F\u002F assetPrefix: \"\u002Fapp\",\n};\n\nexport default nextConfig;\n",[1175],{"type":49,"tag":71,"props":1176,"children":1177},{"__ignoreMap":792},[1178,1223,1232,1265,1274,1283,1292,1301,1309],{"type":49,"tag":798,"props":1179,"children":1180},{"class":800,"line":801},[1181,1185,1190,1194,1199,1203,1207,1211,1215,1219],{"type":49,"tag":798,"props":1182,"children":1183},{"style":972},[1184],{"type":55,"value":975},{"type":49,"tag":798,"props":1186,"children":1187},{"style":972},[1188],{"type":55,"value":1189}," type",{"type":49,"tag":798,"props":1191,"children":1192},{"style":978},[1193],{"type":55,"value":981},{"type":49,"tag":798,"props":1195,"children":1196},{"style":984},[1197],{"type":55,"value":1198}," NextConfig",{"type":49,"tag":798,"props":1200,"children":1201},{"style":978},[1202],{"type":55,"value":992},{"type":49,"tag":798,"props":1204,"children":1205},{"style":972},[1206],{"type":55,"value":997},{"type":49,"tag":798,"props":1208,"children":1209},{"style":978},[1210],{"type":55,"value":1002},{"type":49,"tag":798,"props":1212,"children":1213},{"style":810},[1214],{"type":55,"value":700},{"type":49,"tag":798,"props":1216,"children":1217},{"style":978},[1218],{"type":55,"value":1011},{"type":49,"tag":798,"props":1220,"children":1221},{"style":978},[1222],{"type":55,"value":1016},{"type":49,"tag":798,"props":1224,"children":1225},{"class":800,"line":968},[1226],{"type":49,"tag":798,"props":1227,"children":1229},{"emptyLinePlaceholder":1228},true,[1230],{"type":55,"value":1231},"\n",{"type":49,"tag":798,"props":1233,"children":1234},{"class":800,"line":25},[1235,1241,1246,1251,1255,1260],{"type":49,"tag":798,"props":1236,"children":1238},{"style":1237},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1239],{"type":55,"value":1240},"const",{"type":49,"tag":798,"props":1242,"children":1243},{"style":984},[1244],{"type":55,"value":1245}," nextConfig",{"type":49,"tag":798,"props":1247,"children":1248},{"style":978},[1249],{"type":55,"value":1250},":",{"type":49,"tag":798,"props":1252,"children":1253},{"style":805},[1254],{"type":55,"value":1198},{"type":49,"tag":798,"props":1256,"children":1257},{"style":978},[1258],{"type":55,"value":1259}," =",{"type":49,"tag":798,"props":1261,"children":1262},{"style":978},[1263],{"type":55,"value":1264}," {\n",{"type":49,"tag":798,"props":1266,"children":1268},{"class":800,"line":1267},4,[1269],{"type":49,"tag":798,"props":1270,"children":1271},{"style":962},[1272],{"type":55,"value":1273},"  \u002F\u002F Remove basePath and assetPrefix when serving from the root\n",{"type":49,"tag":798,"props":1275,"children":1277},{"class":800,"line":1276},5,[1278],{"type":49,"tag":798,"props":1279,"children":1280},{"style":962},[1281],{"type":55,"value":1282},"  \u002F\u002F basePath: \"\u002Fapp\",\n",{"type":49,"tag":798,"props":1284,"children":1286},{"class":800,"line":1285},6,[1287],{"type":49,"tag":798,"props":1288,"children":1289},{"style":962},[1290],{"type":55,"value":1291},"  \u002F\u002F assetPrefix: \"\u002Fapp\",\n",{"type":49,"tag":798,"props":1293,"children":1295},{"class":800,"line":1294},7,[1296],{"type":49,"tag":798,"props":1297,"children":1298},{"style":978},[1299],{"type":55,"value":1300},"};\n",{"type":49,"tag":798,"props":1302,"children":1304},{"class":800,"line":1303},8,[1305],{"type":49,"tag":798,"props":1306,"children":1307},{"emptyLinePlaceholder":1228},[1308],{"type":55,"value":1231},{"type":49,"tag":798,"props":1310,"children":1312},{"class":800,"line":1311},9,[1313,1318,1323,1327],{"type":49,"tag":798,"props":1314,"children":1315},{"style":972},[1316],{"type":55,"value":1317},"export",{"type":49,"tag":798,"props":1319,"children":1320},{"style":972},[1321],{"type":55,"value":1322}," default",{"type":49,"tag":798,"props":1324,"children":1325},{"style":984},[1326],{"type":55,"value":1245},{"type":49,"tag":798,"props":1328,"children":1329},{"style":978},[1330],{"type":55,"value":1016},{"type":49,"tag":65,"props":1332,"children":1333},{},[1334,1336,1342,1344,1350,1352,1358,1360,1366],{"type":55,"value":1335},"Because the base path is gone, remove the manual prefixing Webflow Cloud required in client-side ",{"type":49,"tag":71,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":55,"value":1341},"fetch",{"type":55,"value":1343}," calls and asset references. Change ",{"type":49,"tag":71,"props":1345,"children":1347},{"className":1346},[],[1348],{"type":55,"value":1349},"fetch(${basePath}\u002Fapi\u002Fusers)",{"type":55,"value":1351}," back to ",{"type":49,"tag":71,"props":1353,"children":1355},{"className":1354},[],[1356],{"type":55,"value":1357},"fetch(\"\u002Fapi\u002Fusers\")",{"type":55,"value":1359},", and drop the asset prefix from plain ",{"type":49,"tag":71,"props":1361,"children":1363},{"className":1362},[],[1364],{"type":55,"value":1365},"\u003Cimg>",{"type":55,"value":1367}," tags.",{"type":49,"tag":65,"props":1369,"children":1370},{},[1371,1373,1378,1380,1386,1388,1395,1397,1404],{"type":55,"value":1372},"Webflow Cloud also runs API routes and middleware on the Edge runtime. On Vercel, remove the ",{"type":49,"tag":71,"props":1374,"children":1376},{"className":1375},[],[1377],{"type":55,"value":631},{"type":55,"value":1379}," directive from your Route Handlers and ",{"type":49,"tag":71,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":55,"value":1385},"middleware.ts",{"type":55,"value":1387}," so they run on the default Node.js runtime. Migrating from the Edge runtime to Node.js is recommended for performance and reliability, both runtimes run on ",{"type":49,"tag":120,"props":1389,"children":1392},{"href":1390,"rel":1391},"https:\u002F\u002Fvercel.com\u002Ffluid",[124],[1393],{"type":55,"value":1394},"Fluid compute",{"type":55,"value":1396}," with ",{"type":49,"tag":120,"props":1398,"children":1401},{"href":1399,"rel":1400},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions\u002Fusage-and-pricing#active-cpu",[124],[1402],{"type":55,"value":1403},"Active CPU pricing",{"type":55,"value":1405},", and Node.js gives your routes the full Node.js API surface and access to npm packages that depend on Node.js built-ins.",{"type":49,"tag":775,"props":1407,"children":1409},{"id":1408},"step-4-update-your-build-scripts",[1410],{"type":55,"value":1411},"Step 4: Update your build scripts",{"type":49,"tag":65,"props":1413,"children":1414},{},[1415,1417,1422,1424,1430],{"type":55,"value":1416},"Replace the Webflow Cloud preview script in ",{"type":49,"tag":71,"props":1418,"children":1420},{"className":1419},[],[1421],{"type":55,"value":707},{"type":55,"value":1423}," with the standard Next.js commands. Vercel runs the build for you, so you no longer need the ",{"type":49,"tag":71,"props":1425,"children":1427},{"className":1426},[],[1428],{"type":55,"value":1429},"opennextjs-cloudflare",{"type":55,"value":1431}," preview command:",{"type":49,"tag":787,"props":1433,"children":1437},{"className":1434,"code":1435,"language":1436,"meta":792,"style":792},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\"\n  }\n}\n","json",[1438],{"type":49,"tag":71,"props":1439,"children":1440},{"__ignoreMap":792},[1441,1449,1474,1512,1549,1583,1591],{"type":49,"tag":798,"props":1442,"children":1443},{"class":800,"line":801},[1444],{"type":49,"tag":798,"props":1445,"children":1446},{"style":978},[1447],{"type":55,"value":1448},"{\n",{"type":49,"tag":798,"props":1450,"children":1451},{"class":800,"line":968},[1452,1457,1462,1466,1470],{"type":49,"tag":798,"props":1453,"children":1454},{"style":978},[1455],{"type":55,"value":1456},"  \"",{"type":49,"tag":798,"props":1458,"children":1459},{"style":1237},[1460],{"type":55,"value":1461},"scripts",{"type":49,"tag":798,"props":1463,"children":1464},{"style":978},[1465],{"type":55,"value":1011},{"type":49,"tag":798,"props":1467,"children":1468},{"style":978},[1469],{"type":55,"value":1250},{"type":49,"tag":798,"props":1471,"children":1472},{"style":978},[1473],{"type":55,"value":1264},{"type":49,"tag":798,"props":1475,"children":1476},{"class":800,"line":25},[1477,1482,1487,1491,1495,1499,1503,1507],{"type":49,"tag":798,"props":1478,"children":1479},{"style":978},[1480],{"type":55,"value":1481},"    \"",{"type":49,"tag":798,"props":1483,"children":1484},{"style":805},[1485],{"type":55,"value":1486},"dev",{"type":49,"tag":798,"props":1488,"children":1489},{"style":978},[1490],{"type":55,"value":1011},{"type":49,"tag":798,"props":1492,"children":1493},{"style":978},[1494],{"type":55,"value":1250},{"type":49,"tag":798,"props":1496,"children":1497},{"style":978},[1498],{"type":55,"value":1002},{"type":49,"tag":798,"props":1500,"children":1501},{"style":810},[1502],{"type":55,"value":945},{"type":49,"tag":798,"props":1504,"children":1505},{"style":978},[1506],{"type":55,"value":1011},{"type":49,"tag":798,"props":1508,"children":1509},{"style":978},[1510],{"type":55,"value":1511},",\n",{"type":49,"tag":798,"props":1513,"children":1514},{"class":800,"line":1267},[1515,1519,1524,1528,1532,1536,1541,1545],{"type":49,"tag":798,"props":1516,"children":1517},{"style":978},[1518],{"type":55,"value":1481},{"type":49,"tag":798,"props":1520,"children":1521},{"style":805},[1522],{"type":55,"value":1523},"build",{"type":49,"tag":798,"props":1525,"children":1526},{"style":978},[1527],{"type":55,"value":1011},{"type":49,"tag":798,"props":1529,"children":1530},{"style":978},[1531],{"type":55,"value":1250},{"type":49,"tag":798,"props":1533,"children":1534},{"style":978},[1535],{"type":55,"value":1002},{"type":49,"tag":798,"props":1537,"children":1538},{"style":810},[1539],{"type":55,"value":1540},"next build",{"type":49,"tag":798,"props":1542,"children":1543},{"style":978},[1544],{"type":55,"value":1011},{"type":49,"tag":798,"props":1546,"children":1547},{"style":978},[1548],{"type":55,"value":1511},{"type":49,"tag":798,"props":1550,"children":1551},{"class":800,"line":1276},[1552,1556,1561,1565,1569,1573,1578],{"type":49,"tag":798,"props":1553,"children":1554},{"style":978},[1555],{"type":55,"value":1481},{"type":49,"tag":798,"props":1557,"children":1558},{"style":805},[1559],{"type":55,"value":1560},"start",{"type":49,"tag":798,"props":1562,"children":1563},{"style":978},[1564],{"type":55,"value":1011},{"type":49,"tag":798,"props":1566,"children":1567},{"style":978},[1568],{"type":55,"value":1250},{"type":49,"tag":798,"props":1570,"children":1571},{"style":978},[1572],{"type":55,"value":1002},{"type":49,"tag":798,"props":1574,"children":1575},{"style":810},[1576],{"type":55,"value":1577},"next start",{"type":49,"tag":798,"props":1579,"children":1580},{"style":978},[1581],{"type":55,"value":1582},"\"\n",{"type":49,"tag":798,"props":1584,"children":1585},{"class":800,"line":1285},[1586],{"type":49,"tag":798,"props":1587,"children":1588},{"style":978},[1589],{"type":55,"value":1590},"  }\n",{"type":49,"tag":798,"props":1592,"children":1593},{"class":800,"line":1294},[1594],{"type":49,"tag":798,"props":1595,"children":1596},{"style":978},[1597],{"type":55,"value":1598},"}\n",{"type":49,"tag":65,"props":1600,"children":1601},{},[1602],{"type":55,"value":1603},"Vercel auto-detects Next.js on import and sets the build command and output directory, so these scripts mainly support local development.",{"type":49,"tag":775,"props":1605,"children":1607},{"id":1606},"step-5-replace-webflow-cloud-bindings-with-vercel-storage",[1608],{"type":55,"value":1609},"Step 5: Replace Webflow Cloud bindings with Vercel storage",{"type":49,"tag":65,"props":1611,"children":1612},{},[1613,1615,1621,1623,1628,1630,1635,1637,1642,1644,1650],{"type":55,"value":1614},"This is the main code change. On Webflow Cloud you read storage through bindings on the Cloudflare ",{"type":49,"tag":71,"props":1616,"children":1618},{"className":1617},[],[1619],{"type":55,"value":1620},"env",{"type":55,"value":1622},", accessed in a Route Handler with ",{"type":49,"tag":71,"props":1624,"children":1626},{"className":1625},[],[1627],{"type":55,"value":863},{"type":55,"value":1629},". On Vercel you read connection details from ",{"type":49,"tag":71,"props":1631,"children":1633},{"className":1632},[],[1634],{"type":55,"value":496},{"type":55,"value":1636}," and talk to each store through its SDK or client. Remove every ",{"type":49,"tag":71,"props":1638,"children":1640},{"className":1639},[],[1641],{"type":55,"value":863},{"type":55,"value":1643}," call and replace the binding operations. Read ",{"type":49,"tag":71,"props":1645,"children":1647},{"className":1646},[],[1648],{"type":55,"value":1649},"references\u002Fservice-mapping.md",{"type":55,"value":1651}," for the before and after code for each binding, then install the SDK you need, for example:",{"type":49,"tag":787,"props":1653,"children":1655},{"className":789,"code":1654,"language":791,"meta":792,"style":792},"npm i @vercel\u002Fblob\n",[1656],{"type":49,"tag":71,"props":1657,"children":1658},{"__ignoreMap":792},[1659],{"type":49,"tag":798,"props":1660,"children":1661},{"class":800,"line":801},[1662,1666,1671],{"type":49,"tag":798,"props":1663,"children":1664},{"style":805},[1665],{"type":55,"value":534},{"type":49,"tag":798,"props":1667,"children":1668},{"style":810},[1669],{"type":55,"value":1670}," i",{"type":49,"tag":798,"props":1672,"children":1673},{"style":810},[1674],{"type":55,"value":1675}," @vercel\u002Fblob\n",{"type":49,"tag":65,"props":1677,"children":1678},{},[1679],{"type":55,"value":1680},"Have the user create and connect the backing stores. This is what adds the env vars the code reads, so it has to be done before the app will run:",{"type":49,"tag":131,"props":1682,"children":1683},{},[1684,1731,1752],{"type":49,"tag":135,"props":1685,"children":1686},{},[1687,1689,1696,1698,1704,1706,1712,1714,1721,1723,1729],{"type":55,"value":1688},"Object Storage to Blob: create a Blob store on the ",{"type":49,"tag":120,"props":1690,"children":1693},{"href":1691,"rel":1692},"https:\u002F\u002Fvercel.com\u002Fd?to=%2F%5Bteam%5D%2F%7E%2Fstores",[124],[1694],{"type":55,"value":1695},"Storage page",{"type":55,"value":1697},", then connect it to the project from the store's Projects tab. Vercel adds the store's environment variables, including a short-lived ",{"type":49,"tag":71,"props":1699,"children":1701},{"className":1700},[],[1702],{"type":55,"value":1703},"VERCEL_OIDC_TOKEN",{"type":55,"value":1705}," that it rotates, and the SDK uses them automatically, so ",{"type":49,"tag":71,"props":1707,"children":1709},{"className":1708},[],[1710],{"type":55,"value":1711},"put()",{"type":55,"value":1713}," needs no token in code. This ",{"type":49,"tag":120,"props":1715,"children":1718},{"href":1716,"rel":1717},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-blob\u002Fusing-blob-sdk#oidc-tokens-recommended",[124],[1719],{"type":55,"value":1720},"OIDC approach",{"type":55,"value":1722}," is recommended over the long-lived ",{"type":49,"tag":71,"props":1724,"children":1726},{"className":1725},[],[1727],{"type":55,"value":1728},"BLOB_READ_WRITE_TOKEN",{"type":55,"value":1730},", which is only for code that runs outside Vercel.",{"type":49,"tag":135,"props":1732,"children":1733},{},[1734,1736,1743,1745,1750],{"type":55,"value":1735},"Key Value Store to Redis: add a Redis integration such as ",{"type":49,"tag":120,"props":1737,"children":1740},{"href":1738,"rel":1739},"https:\u002F\u002Fvercel.com\u002Fmarketplace\u002Fupstash",[124],[1741],{"type":55,"value":1742},"Upstash Redis",{"type":55,"value":1744}," for caching and session data, or use ",{"type":49,"tag":120,"props":1746,"children":1748},{"href":582,"rel":1747},[124],[1749],{"type":55,"value":586},{"type":55,"value":1751}," for small, read-heavy config.",{"type":49,"tag":135,"props":1753,"children":1754},{},[1755,1757,1764],{"type":55,"value":1756},"SQLite to Postgres: add a Postgres database such as ",{"type":49,"tag":120,"props":1758,"children":1761},{"href":1759,"rel":1760},"https:\u002F\u002Fvercel.com\u002Fmarketplace\u002Fneon",[124],[1762],{"type":55,"value":1763},"Neon",{"type":55,"value":1765}," from the Marketplace.",{"type":49,"tag":65,"props":1767,"children":1768},{},[1769,1771,1776],{"type":55,"value":1770},"Provisioning a store from the Marketplace adds its connection string and credentials as env vars, which the code reads from ",{"type":49,"tag":71,"props":1772,"children":1774},{"className":1773},[],[1775],{"type":55,"value":496},{"type":55,"value":107},{"type":49,"tag":775,"props":1778,"children":1780},{"id":1779},"step-6-move-environment-variables-and-secrets",[1781],{"type":55,"value":1782},"Step 6: Move environment variables and secrets",{"type":49,"tag":65,"props":1784,"children":1785},{},[1786],{"type":55,"value":1787},"Recreate your Webflow Cloud environment variables as Vercel environment variables. Webflow Cloud stores these per environment in your app's settings and injects them at runtime only. Vercel stores them per environment (production, preview, and development) in project settings and makes them available at both build time and runtime.",{"type":49,"tag":1789,"props":1790,"children":1791},"blockquote",{},[1792],{"type":49,"tag":65,"props":1793,"children":1794},{},[1795,1800],{"type":49,"tag":85,"props":1796,"children":1797},{},[1798],{"type":55,"value":1799},"Never handle the user's secrets.",{"type":55,"value":1801}," Do not ask the user for secret values, and do not accept secrets pasted into the chat. Do not offer to save, enter, or store environment variables or secrets for the user, and refuse if asked to do so. Setting the actual values is the user's job, done in the dashboard or in their own terminal. Your part is to prepare the list of variable names and the exact commands.",{"type":49,"tag":65,"props":1803,"children":1804},{},[1805],{"type":55,"value":1806},"You can list every variable and secret to recreate and write out the exact commands, but you cannot supply secret values or sign the CLI in, and you must not make up values.",{"type":49,"tag":65,"props":1808,"children":1809},{},[1810,1812,1819,1821,1827],{"type":55,"value":1811},"The user adds each variable, either on the ",{"type":49,"tag":120,"props":1813,"children":1816},{"href":1814,"rel":1815},"https:\u002F\u002Fvercel.com\u002Fd?to=%2F%5Bteam%5D%2F%5Bproject%5D%2Fsettings%2Fenvironment-variables",[124],[1817],{"type":55,"value":1818},"project's Environment Variables page",{"type":55,"value":1820}," or with the CLI after ",{"type":49,"tag":71,"props":1822,"children":1824},{"className":1823},[],[1825],{"type":55,"value":1826},"vercel login",{"type":55,"value":1250},{"type":49,"tag":787,"props":1829,"children":1831},{"className":789,"code":1830,"language":791,"meta":792,"style":792},"vercel env add DATABASE_URL production\n",[1832],{"type":49,"tag":71,"props":1833,"children":1834},{"__ignoreMap":792},[1835],{"type":49,"tag":798,"props":1836,"children":1837},{"class":800,"line":801},[1838,1842,1847,1852,1857],{"type":49,"tag":798,"props":1839,"children":1840},{"style":805},[1841],{"type":55,"value":14},{"type":49,"tag":798,"props":1843,"children":1844},{"style":810},[1845],{"type":55,"value":1846}," env",{"type":49,"tag":798,"props":1848,"children":1849},{"style":810},[1850],{"type":55,"value":1851}," add",{"type":49,"tag":798,"props":1853,"children":1854},{"style":810},[1855],{"type":55,"value":1856}," DATABASE_URL",{"type":49,"tag":798,"props":1858,"children":1859},{"style":810},[1860],{"type":55,"value":1861}," production\n",{"type":49,"tag":65,"props":1863,"children":1864},{},[1865,1867,1872],{"type":55,"value":1866},"Once the user has signed in, you can link the project and pull the values into a local ",{"type":49,"tag":71,"props":1868,"children":1870},{"className":1869},[],[1871],{"type":55,"value":178},{"type":55,"value":1250},{"type":49,"tag":787,"props":1874,"children":1876},{"className":789,"code":1875,"language":791,"meta":792,"style":792},"vercel link\nvercel env pull\n",[1877],{"type":49,"tag":71,"props":1878,"children":1879},{"__ignoreMap":792},[1880,1892],{"type":49,"tag":798,"props":1881,"children":1882},{"class":800,"line":801},[1883,1887],{"type":49,"tag":798,"props":1884,"children":1885},{"style":805},[1886],{"type":55,"value":14},{"type":49,"tag":798,"props":1888,"children":1889},{"style":810},[1890],{"type":55,"value":1891}," link\n",{"type":49,"tag":798,"props":1893,"children":1894},{"class":800,"line":968},[1895,1899,1903],{"type":49,"tag":798,"props":1896,"children":1897},{"style":805},[1898],{"type":55,"value":14},{"type":49,"tag":798,"props":1900,"children":1901},{"style":810},[1902],{"type":55,"value":1846},{"type":49,"tag":798,"props":1904,"children":1905},{"style":810},[1906],{"type":55,"value":1907}," pull\n",{"type":49,"tag":65,"props":1909,"children":1910},{},[1911],{"type":55,"value":1912},"A variable added to production is not available in preview or development unless it is added there too. Because Vercel exposes environment variables during the build, you can re-enable any build-time validation you had to disable on Webflow Cloud, where variables aren't available at build time.",{"type":49,"tag":775,"props":1914,"children":1916},{"id":1915},"step-7-deploy",[1917],{"type":55,"value":1918},"Step 7: Deploy",{"type":49,"tag":65,"props":1920,"children":1921},{},[1922],{"type":55,"value":1923},"You cannot import a project, confirm the framework preset, sign in, or select Deploy, so walk the user through one of these paths. Both run the app on Vercel Functions.",{"type":49,"tag":65,"props":1925,"children":1926},{},[1927],{"type":55,"value":1928},"Deploy with Git (recommended):",{"type":49,"tag":1930,"props":1931,"children":1932},"ol",{},[1933,1938,1952],{"type":49,"tag":135,"props":1934,"children":1935},{},[1936],{"type":55,"value":1937},"Push the project to GitHub, GitLab, or Bitbucket.",{"type":49,"tag":135,"props":1939,"children":1940},{},[1941,1943,1950],{"type":55,"value":1942},"In the ",{"type":49,"tag":120,"props":1944,"children":1947},{"href":1945,"rel":1946},"https:\u002F\u002Fvercel.com",[124],[1948],{"type":55,"value":1949},"Vercel dashboard",{"type":55,"value":1951},", select Add New > Project, then import the repo.",{"type":49,"tag":135,"props":1953,"children":1954},{},[1955],{"type":55,"value":1956},"Vercel detects Next.js and sets the build command and output directory. Confirm the framework preset, add the environment variables from step 6, and select Deploy.",{"type":49,"tag":65,"props":1958,"children":1959},{},[1960],{"type":55,"value":1961},"After the first import, every push to the production branch creates a production deploy, and every pull request gets its own preview URL.",{"type":49,"tag":65,"props":1963,"children":1964},{},[1965,1967,1972,1974,1979,1981,1987],{"type":55,"value":1966},"Deploy with the CLI: after ",{"type":49,"tag":71,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":55,"value":1826},{"type":55,"value":1973},", run ",{"type":49,"tag":71,"props":1975,"children":1977},{"className":1976},[],[1978],{"type":55,"value":14},{"type":55,"value":1980}," for a preview or ",{"type":49,"tag":71,"props":1982,"children":1984},{"className":1983},[],[1985],{"type":55,"value":1986},"vercel --prod",{"type":55,"value":1988}," for production.",{"type":49,"tag":65,"props":1990,"children":1991},{},[1992,1994,2000],{"type":55,"value":1993},"If the ",{"type":49,"tag":71,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":55,"value":1999},"vercel-deploy",{"type":55,"value":2001}," skill is available, you can use it to create a preview deploy and a claim URL without the user signing in first, which is a good way to check the build before wiring up a connected project.",{"type":49,"tag":58,"props":2003,"children":2005},{"id":2004},"after-the-move-check-these",[2006],{"type":55,"value":2007},"After the move: check these",{"type":49,"tag":65,"props":2009,"children":2010},{},[2011,2013,2019],{"type":55,"value":2012},"You can grep for the code issues; ask the user to check anything in the dashboard. See ",{"type":49,"tag":71,"props":2014,"children":2016},{"className":2015},[],[2017],{"type":55,"value":2018},"references\u002Ftroubleshooting.md",{"type":55,"value":2020}," for fixes.",{"type":49,"tag":131,"props":2022,"children":2023},{},[2024,2050,2061,2100,2117],{"type":49,"tag":135,"props":2025,"children":2026},{},[2027,2029,2034,2036,2041,2043,2048],{"type":55,"value":2028},"No ",{"type":49,"tag":71,"props":2030,"children":2032},{"className":2031},[],[2033],{"type":55,"value":76},{"type":55,"value":2035}," import or ",{"type":49,"tag":71,"props":2037,"children":2039},{"className":2038},[],[2040],{"type":55,"value":366},{"type":55,"value":2042}," call remains in ",{"type":49,"tag":71,"props":2044,"children":2046},{"className":2045},[],[2047],{"type":55,"value":97},{"type":55,"value":2049}," or anywhere else.",{"type":49,"tag":135,"props":2051,"children":2052},{},[2053,2054,2059],{"type":55,"value":2028},{"type":49,"tag":71,"props":2055,"children":2057},{"className":2056},[],[2058],{"type":55,"value":863},{"type":55,"value":2060}," access remains anywhere in server code.",{"type":49,"tag":135,"props":2062,"children":2063},{},[2064,2066,2071,2072,2077,2079,2084,2086,2091,2093,2098],{"type":55,"value":2065},"No leftover base path: ",{"type":49,"tag":71,"props":2067,"children":2069},{"className":2068},[],[2070],{"type":55,"value":462},{"type":55,"value":145},{"type":49,"tag":71,"props":2073,"children":2075},{"className":2074},[],[2076],{"type":55,"value":469},{"type":55,"value":2078}," are gone from ",{"type":49,"tag":71,"props":2080,"children":2082},{"className":2081},[],[2083],{"type":55,"value":97},{"type":55,"value":2085},", and client-side ",{"type":49,"tag":71,"props":2087,"children":2089},{"className":2088},[],[2090],{"type":55,"value":1341},{"type":55,"value":2092}," calls and ",{"type":49,"tag":71,"props":2094,"children":2096},{"className":2095},[],[2097],{"type":55,"value":1365},{"type":55,"value":2099}," tags no longer prefix a base path.",{"type":49,"tag":135,"props":2101,"children":2102},{},[2103,2104,2109,2111,2116],{"type":55,"value":2028},{"type":49,"tag":71,"props":2105,"children":2107},{"className":2106},[],[2108],{"type":55,"value":631},{"type":55,"value":2110}," remains on Route Handlers or in ",{"type":49,"tag":71,"props":2112,"children":2114},{"className":2113},[],[2115],{"type":55,"value":1385},{"type":55,"value":107},{"type":49,"tag":135,"props":2118,"children":2119},{},[2120],{"type":55,"value":2121},"Each env var exists in the right environment, not only production.",{"type":49,"tag":58,"props":2123,"children":2125},{"id":2124},"tune-after-migrating-optional",[2126],{"type":55,"value":2127},"Tune after migrating (optional)",{"type":49,"tag":131,"props":2129,"children":2130},{},[2131,2150,2155],{"type":49,"tag":135,"props":2132,"children":2133},{},[2134,2136,2142,2144,2149],{"type":55,"value":2135},"Tune function resources per route: set ",{"type":49,"tag":71,"props":2137,"children":2139},{"className":2138},[],[2140],{"type":55,"value":2141},"export const maxDuration = 60",{"type":55,"value":2143}," in a route's segment config for routes that need more time, or configure memory and regions in ",{"type":49,"tag":71,"props":2145,"children":2147},{"className":2146},[],[2148],{"type":55,"value":416},{"type":55,"value":107},{"type":49,"tag":135,"props":2151,"children":2152},{},[2153],{"type":55,"value":2154},"Put functions near the data: set the function region close to the Marketplace database to cut latency.",{"type":49,"tag":135,"props":2156,"children":2157},{},[2158,2160,2166,2168,2173,2174,2179,2180,2185],{"type":55,"value":2159},"Take advantage of features that were limited on Webflow Cloud: Incremental Static Regeneration, on-demand and tag-based revalidation, the ",{"type":49,"tag":71,"props":2161,"children":2163},{"className":2162},[],[2164],{"type":55,"value":2165},"use cache",{"type":55,"value":2167}," directive, and Node.js middleware all work on Vercel without extra configuration. For scheduled and background work Webflow Cloud didn't offer, look at ",{"type":49,"tag":120,"props":2169,"children":2171},{"href":654,"rel":2170},[124],[2172],{"type":55,"value":658},{"type":55,"value":172},{"type":49,"tag":120,"props":2175,"children":2177},{"href":662,"rel":2176},[124],[2178],{"type":55,"value":666},{"type":55,"value":668},{"type":49,"tag":120,"props":2181,"children":2183},{"href":671,"rel":2182},[124],[2184],{"type":55,"value":675},{"type":55,"value":107},{"type":49,"tag":58,"props":2187,"children":2189},{"id":2188},"references",[2190],{"type":55,"value":2191},"References",{"type":49,"tag":131,"props":2193,"children":2194},{},[2195,2205],{"type":49,"tag":135,"props":2196,"children":2197},{},[2198,2203],{"type":49,"tag":120,"props":2199,"children":2200},{"href":1649},[2201],{"type":55,"value":2202},"service-mapping",{"type":55,"value":2204},": Before and after code for replacing each Webflow Cloud binding (Object Storage to Blob, Key Value Store to Redis or Edge Config, SQLite to Postgres), plus the store setup notes. Read before step 5.",{"type":49,"tag":135,"props":2206,"children":2207},{},[2208,2213],{"type":49,"tag":120,"props":2209,"children":2210},{"href":2018},[2211],{"type":55,"value":2212},"troubleshooting",{"type":55,"value":2214},": The common errors after the move and how to fix them.",{"type":49,"tag":2216,"props":2217,"children":2218},"style",{},[2219],{"type":55,"value":2220},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2222,"total":2392},[2223,2241,2253,2265,2280,2297,2309,2322,2333,2346,2358,2377],{"slug":2224,"name":2224,"fn":2225,"description":2226,"org":2227,"tags":2228,"stars":2238,"repoUrl":2239,"updatedAt":2240},"agent-browser","automate browser interactions for AI agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to \"open a website\", \"fill out a form\", \"click a button\", \"take a screenshot\", \"scrape data from a page\", \"test this web app\", \"login to a site\", \"automate browser actions\", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2229,2232,2235],{"name":2230,"slug":2231,"type":15},"Agents","agents",{"name":2233,"slug":2234,"type":15},"Automation","automation",{"name":2236,"slug":2237,"type":15},"Browser Automation","browser-automation",38346,"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fagent-browser","2026-07-20T05:55:17.314329",{"slug":2242,"name":2242,"fn":2243,"description":2244,"org":2245,"tags":2246,"stars":2238,"repoUrl":2239,"updatedAt":2252},"agentcore","run browser automation on AWS Bedrock","Run agent-browser on AWS Bedrock AgentCore cloud browsers. Use when the user wants to use AgentCore, run browser automation on AWS, use a cloud browser with AWS credentials, or needs a managed browser session backed by AWS infrastructure. Triggers include \"use agentcore\", \"run on AWS\", \"cloud browser with AWS\", \"bedrock browser\", \"agentcore session\", or any task requiring AWS-hosted browser automation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2247,2248,2251],{"name":2233,"slug":2234,"type":15},{"name":2249,"slug":2250,"type":15},"AWS","aws",{"name":2236,"slug":2237,"type":15},"2026-07-17T06:08:33.665276",{"slug":2254,"name":2254,"fn":2255,"description":2256,"org":2257,"tags":2258,"stars":2238,"repoUrl":2239,"updatedAt":2264},"core","navigate and interact with web pages","Core agent-browser usage guide. Read this before running any agent-browser commands. Covers the snapshot-and-ref workflow, navigating pages, interacting with elements (click, fill, type, select), extracting text and data, taking screenshots, managing tabs, handling forms and auth, waiting for content, running multiple browser sessions in parallel, and troubleshooting common failures. Use when the user asks to interact with a website, fill a form, click something, extract data, take a screenshot, log into a site, test a web app, or automate any browser task.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2259,2260,2261],{"name":2230,"slug":2231,"type":15},{"name":2236,"slug":2237,"type":15},{"name":2262,"slug":2263,"type":15},"Navigation","navigation","2026-07-26T05:47:42.378419",{"slug":2266,"name":2266,"fn":2267,"description":2268,"org":2269,"tags":2270,"stars":2238,"repoUrl":2239,"updatedAt":2279},"derive-client","reverse engineer internal APIs from browser traffic","Reverse-engineer a website's internal API by recording browser traffic into a HAR file, then generate a standalone client or CLI that calls the endpoints directly, with no browser needed after the first recording. Use when asked to \"derive a client\", \"build a CLI for \u003Csite>\", \"reverse engineer this site's API\", \"record network requests\", \"turn this site into an API\", or when the same site will be automated repeatedly and direct HTTP calls would beat driving the browser every time.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2271,2274,2275,2276],{"name":2272,"slug":2273,"type":15},"API Development","api-development",{"name":2233,"slug":2234,"type":15},{"name":2236,"slug":2237,"type":15},{"name":2277,"slug":2278,"type":15},"Web Scraping","web-scraping","2026-07-20T06:24:11.928835",{"slug":2281,"name":2281,"fn":2282,"description":2283,"org":2284,"tags":2285,"stars":2238,"repoUrl":2239,"updatedAt":2296},"dogfood","perform exploratory testing on web applications","Systematically explore and test a web application to find bugs, UX issues, and other problems. Use when asked to \"dogfood\", \"QA\", \"exploratory test\", \"find issues\", \"bug hunt\", \"test this app\u002Fsite\u002Fplatform\", or review the quality of a web application. Produces a structured report with full reproduction evidence -- step-by-step screenshots, repro videos, and detailed repro steps for every issue -- so findings can be handed directly to the responsible teams.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2286,2287,2290,2293],{"name":2236,"slug":2237,"type":15},{"name":2288,"slug":2289,"type":15},"Debugging","debugging",{"name":2291,"slug":2292,"type":15},"QA","qa",{"name":2294,"slug":2295,"type":15},"Testing","testing","2026-07-17T06:07:41.421482",{"slug":2298,"name":2298,"fn":2299,"description":2300,"org":2301,"tags":2302,"stars":2238,"repoUrl":2239,"updatedAt":2308},"electron","automate Electron desktop applications","Automate Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify, etc.) using agent-browser via Chrome DevTools Protocol. Use when the user needs to interact with an Electron app, automate a desktop app, connect to a running app, control a native app, or test an Electron application. Triggers include \"automate Slack app\", \"control VS Code\", \"interact with Discord app\", \"test this Electron app\", \"connect to desktop app\", or any task requiring automation of a native Electron application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2303,2304,2305],{"name":2230,"slug":2231,"type":15},{"name":2236,"slug":2237,"type":15},{"name":2306,"slug":2307,"type":15},"Desktop","desktop","2026-07-17T06:08:28.007783",{"slug":2310,"name":2310,"fn":2311,"description":2312,"org":2313,"tags":2314,"stars":2238,"repoUrl":2239,"updatedAt":2321},"slack","interact with Slack workspaces","Interact with Slack workspaces using browser automation. Use when the user needs to check unread channels, navigate Slack, send messages, extract data, find information, search conversations, or automate any Slack task. Triggers include \"check my Slack\", \"what channels have unreads\", \"send a message to\", \"search Slack for\", \"extract from Slack\", \"find who said\", or any task requiring programmatic Slack interaction.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2315,2316,2319],{"name":2236,"slug":2237,"type":15},{"name":2317,"slug":2318,"type":15},"Messaging","messaging",{"name":2320,"slug":2310,"type":15},"Slack","2026-07-17T06:08:27.679015",{"slug":2323,"name":2323,"fn":2324,"description":2325,"org":2326,"tags":2327,"stars":2238,"repoUrl":2239,"updatedAt":2332},"vercel-sandbox","run browser automation in Vercel Sandbox","Run agent-browser + Chrome inside Vercel Sandbox microVMs for browser automation from any Vercel-deployed app. Use when the user needs browser automation in a Vercel app (Next.js, SvelteKit, Nuxt, Remix, Astro, etc.), wants to run headless Chrome without binary size limits, needs persistent browser sessions across commands, or wants ephemeral isolated browser environments. Triggers include \"Vercel Sandbox browser\", \"microVM Chrome\", \"agent-browser in sandbox\", \"browser automation on Vercel\", or any task requiring Chrome in a Vercel Sandbox.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2328,2329,2330,2331],{"name":2233,"slug":2234,"type":15},{"name":2236,"slug":2237,"type":15},{"name":2294,"slug":2295,"type":15},{"name":13,"slug":14,"type":15},"2026-07-17T06:08:28.349899",{"slug":2334,"name":2334,"fn":2335,"description":2336,"org":2337,"tags":2338,"stars":2343,"repoUrl":2344,"updatedAt":2345},"deploy-to-vercel","deploy applications to Vercel","Deploy applications and websites to Vercel. Use when the user requests deployment actions like \"deploy my app\", \"deploy and give me the link\", \"push this live\", or \"create a preview deployment\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2339,2342],{"name":2340,"slug":2341,"type":15},"Deployment","deployment",{"name":13,"slug":14,"type":15},28993,"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fagent-skills","2026-07-17T06:08:41.18374",{"slug":2347,"name":2347,"fn":2348,"description":2349,"org":2350,"tags":2351,"stars":2343,"repoUrl":2344,"updatedAt":2357},"vercel-cli-with-tokens","manage Vercel projects via CLI","Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. \"deploy to vercel\", \"set up vercel\", \"add environment variables to vercel\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2352,2355,2356],{"name":2353,"slug":2354,"type":15},"CLI","cli",{"name":2340,"slug":2341,"type":15},{"name":13,"slug":14,"type":15},"2026-07-17T06:08:41.84179",{"slug":2359,"name":2359,"fn":2360,"description":2361,"org":2362,"tags":2363,"stars":2343,"repoUrl":2344,"updatedAt":2376},"vercel-composition-patterns","implement scalable React composition patterns","React composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2364,2367,2370,2373],{"name":2365,"slug":2366,"type":15},"Best Practices","best-practices",{"name":2368,"slug":2369,"type":15},"Frontend","frontend",{"name":2371,"slug":2372,"type":15},"React","react",{"name":2374,"slug":2375,"type":15},"UI Components","ui-components","2026-07-17T06:05:40.576913",{"slug":2378,"name":2378,"fn":2379,"description":2380,"org":2381,"tags":2382,"stars":2343,"repoUrl":2344,"updatedAt":2391},"vercel-optimize","optimize Vercel project performance and costs","Use for Vercel cost and performance optimization on deployed projects, especially Next.js, SvelteKit, Nuxt, and limited Astro apps. Collect Vercel metrics, usage, project config, and code scan results first; investigate only metric-backed candidates; produce ranked recommendations grounded in verified files and version-aware Vercel\u002Fframework docs. Trigger for Vercel bill reduction, slow or expensive routes, caching opportunities, Function Invocations, Build Minutes, Fast Data Transfer, Core Web Vitals, Bot Management, Fluid compute, or cost breakdown requests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2383,2386,2387,2390],{"name":2384,"slug":2385,"type":15},"Cost Optimization","cost-optimization",{"name":2340,"slug":2341,"type":15},{"name":2388,"slug":2389,"type":15},"Performance","performance",{"name":13,"slug":14,"type":15},"2026-07-17T06:04:08.327515",100,{"items":2394,"total":1267},[2395,2408,2415,2430],{"slug":2396,"name":2396,"fn":2397,"description":2398,"org":2399,"tags":2400,"stars":25,"repoUrl":26,"updatedAt":2407},"astro-webflow-to-vercel","migrate Astro applications to Vercel","Migrate an Astro application from Webflow Cloud to Vercel. Use this skill when a user wants to move, migrate, or port an Astro app off Webflow Cloud onto Vercel. This covers swapping the @astrojs\u002Fcloudflare adapter for @astrojs\u002Fvercel, removing Wrangler and the Webflow Cloud config files (webflow.json, wrangler.json, worker-configuration.d.ts), dropping the base path the app mounted under on a Webflow site, removing the Edge runtime directive from API routes, repointing Cloudflare storage bindings read through locals.runtime.env (Object Storage\u002FR2, Key Value Store\u002FWorkers KV, SQLite\u002FD1) to Vercel storage, recreating environment variables, and deploying. Triggers include phrases like 'migrate to Vercel', 'move off Webflow Cloud', 'Astro Webflow Cloud to Vercel', or the presence of webflow.json, wrangler.json, @astrojs\u002Fcloudflare, or locals.runtime.env in an Astro project. Do not use for non-Astro frameworks or for migrations in the opposite direction (Vercel to Webflow Cloud).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2401,2404,2405,2406],{"name":2402,"slug":2403,"type":15},"Astro","astro",{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},"2026-07-17T06:06:20.77835",{"slug":4,"name":4,"fn":5,"description":6,"org":2409,"tags":2410,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2411,2412,2413,2414],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"slug":2416,"name":2416,"fn":2417,"description":2418,"org":2419,"tags":2420,"stars":25,"repoUrl":26,"updatedAt":2429},"tanstack-start-cloudflare-to-vercel","migrate TanStack Start apps to Vercel","Migrate a TanStack Start application from Cloudflare Workers to Vercel. Use this skill when a user wants to move, migrate, or port a TanStack Start (or TanStack) app off Cloudflare Workers or Wrangler onto Vercel. This covers swapping the @cloudflare\u002Fvite-plugin for Nitro, removing Wrangler config, repointing Cloudflare bindings (R2, Workers KV, D1, Durable Objects, Workers AI) to Vercel storage, and moving Cron Triggers and Queues to their Vercel equivalents, then deploying. Triggers include phrases like 'migrate to Vercel', 'move off Cloudflare', 'TanStack Start Cloudflare to Vercel', or the presence of wrangler.jsonc, wrangler.toml, or cloudflare:workers imports in a TanStack project. Do not use for non-TanStack frameworks or for migrations in the opposite direction (Vercel to Cloudflare).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2421,2424,2425,2428],{"name":2422,"slug":2423,"type":15},"Cloudflare","cloudflare",{"name":20,"slug":21,"type":15},{"name":2426,"slug":2427,"type":15},"TanStack","tanstack",{"name":13,"slug":14,"type":15},"2026-07-17T06:08:56.85756",{"slug":2431,"name":2431,"fn":2417,"description":2432,"org":2433,"tags":2434,"stars":25,"repoUrl":26,"updatedAt":2438},"tanstack-start-netlify-to-vercel","Migrate a TanStack Start application from Netlify to Vercel. Use this skill when a user wants to move, migrate, or port a TanStack Start (or TanStack) app off Netlify onto Vercel. This covers swapping @netlify\u002Fvite-plugin-tanstack-start for Nitro, removing netlify.toml, repointing Netlify Blobs and Netlify DB to Vercel storage (Vercel Blob, Redis, Edge Config, Postgres), and moving Scheduled Functions and Background Functions to their Vercel equivalents (Cron Jobs and Queues), then deploying. Triggers include phrases like 'migrate to Vercel', 'move off Netlify', 'TanStack Start Netlify to Vercel', or the presence of netlify.toml, @netlify\u002Fvite-plugin-tanstack-start, or @netlify\u002Fblobs imports in a TanStack project. Do not use for non-TanStack frameworks or for migrations in the opposite direction (Vercel to Netlify).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2435,2436,2437],{"name":20,"slug":21,"type":15},{"name":2426,"slug":2427,"type":15},{"name":13,"slug":14,"type":15},"2026-07-17T06:09:02.846212"]