Skip to content
Docs

How to prototype a storefront section in v0 and ship it to Next.js

Learn how v0 prototyping works for storefront sections, from a scoped prompt to a pull request in your existing Next.js repository.

Vercel

The campaign brief lands before anyone has signed off on the design file, and merchandising still wants a working hero on a real URL. v0 covers that gap. You describe one storefront section, review the generated React and Tailwind CSS code, refine it, then bring it into the Next.js repository your team already ships from.

The examples below are a Black Friday Cyber Monday (BFCM) hero, a product detail page (PDP) variant, and a seasonal campaign banner.

Copy link to headingWhat you need before prototyping a storefront section in v0

Get these four things in place before the first prompt:

  • A v0 plan that fits the work: The Free plan has a daily message limit of 7 messages. Shared Projects, which you need as soon as two people work on the same app from separate chats, start on the Plus plan, and role-based access controls and SAML single sign-on are Enterprise features.
  • An existing Next.js App Router storefront: v0 generates React, Next.js, TypeScript, Tailwind CSS, and shadcn/ui by default, so a repository on that stack needs the fewest changes after export. Check your Tailwind major version now rather than later. v0's generated stack is on Tailwind v4, last pinned to Tailwind CSS 4.2.0 in February 2026, and a storefront still on v3 needs the class and configuration differences mapped before you start.
  • Repository access for the Vercel GitHub App: Git Import works with public repositories and private repositories you can access. A repository owned by a GitHub organization may need owner approval first.
  • Your brand tokens, written down: Record the CSS custom properties the storefront themes through, including --primary, --secondary, and --radius, so you can check the generated component against them.

If the storefront doesn't exist yet, start from Next.js Commerce, the App Router ecommerce application Vercel maintains for Shopify, and prototype on top of it.

Optionally, connect a design system before the first chat. Design Systems 2.0 lets you teach v0 your design system once, from a GitHub repository, a Storybook or docs link, Figma frames, or a packaged archive, so later chats build with your real components, tokens, and conventions.

Copy link to headingHow v0 prototyping fits alongside your Next.js storefront

v0 owns the layer that changes every campaign. Next.js Commerce is a server-rendered App Router ecommerce application built on React Server Components, Server Actions, Suspense, and useOptimistic, wired to Shopify for catalog and checkout. That skeleton stays your engineering team's code, and v0 prototyping replaces none of it. v0 adds the campaign layer on top, including the section experiments you swap out each season.

The Blazity Enterprise Ecommerce Starter, a Next.js and Shopify storefront template with Algolia as its search layer, lists "Designed using v0" among its features. Keep that line clear and the handoff to engineering stays uneventful.

Copy link to headingHow to prompt v0 to prototype one storefront section at a time

Large, complex applications build better incrementally, and the documented example of a request that is too complex is a full ecommerce platform with authentication, catalog, cart, payments, orders, admin dashboard, and analytics. Three steps keep a prompt on the right side of that line.

Copy link to heading1. Scope the prompt to a single section

Generate the BFCM hero, then the product grid beneath it, then the filters, so each piece becomes a component you can drop into the storefront on its own. Prompting this way lets you test each stage, and it keeps a bad generation contained to one section instead of buried in a page.

Copy link to heading2. Name the product surface, context of use, and constraints

An effective prompt has three parts:

  • Product surface: The exact components, features, and data the section contains, including the actions a shopper can take.
  • Context of use: Who uses it, when they see it, and what decision they are making at that moment.
  • Constraints and taste: Style preferences, platform assumptions, and layout expectations, stated as separate lines.

In Vercel's December 2025 test, the prompt with context took 26 seconds longer and returned a functional product page, while the prompt without context returned a non-functional search field, a non-functional cart, and a layout that wasn't responsive.

Here is that shape applied to a BFCM landing section:

Build a Black Friday hero block with a countdown timer, a headline, a subhead,
and one "Shop the sale" button linking to /collections/black-friday.
Context of use: returning shoppers on phones, seconds after tapping through from
an email, deciding whether to scroll into the deals.
Constraints:
- mobile-first, with the countdown above the fold
- dark background, accent color from the --primary token
- no carousel, one call to action only

Reuse that structure for every section you generate. Check how --primary is defined in the project’s CSS. If it does not match your brand, provide the intended value and ask v0 to update the theme variable.

Copy link to heading3. Read the generation before you refine it

Open the generated files and check the shape of the component before you spend prompts on its appearance. Confirm that the values you'll want to change per campaign are props, and that nothing is hardcoded where the storefront expects data. Fix the structure in the chat, where it costs one prompt instead of a review cycle.

Copy link to headingThree storefront sections worth prototyping in v0

Each of these three is small enough to generate and review on its own.

Copy link to headingBFCM hero with a countdown

Keep the countdown target date and the button href as props, so the same block runs Cyber Monday with a one-line change instead of a second generation. Prompt for the timer behavior explicitly, including what the block shows once the countdown reaches zero, since that state never appears in the design file.

A ticking countdown needs "use client", which makes it the one part of the hero that leaves the server. Ask for the timer as a small client component inside an otherwise server-rendered block, and pass the target as an absolute timestamp rather than a local date, so the sale ends at the same moment for every shopper.

Copy link to headingPDP variant

For a seasonal colorway selector or a limited-edition urgency badge, prompt for the variant as its own component and leave the existing PDP untouched. v0 generates full-stack projects rather than static markup, and the Code tab shows every file it wrote, including server files and API routes, so a variant that needs data arrives with server files rather than markup alone. You add the Shopify credentials and the real query after import.

Copy link to headingSeasonal campaign banner

If the brand already has the campaign asset, attach it. v0 analyzes the layout, colors, and components in an attached image and generates code that closely replicates the design. Use a high-resolution export, crop tightly to the banner, and add a sentence about behavior, such as what the banner does once the promotion expires.

On a paid v0 plan, connect your Figma account and paste a link to the campaign frame. The Figma integration reads design tokens, styles, layout, text, and assets while v0 builds. It requires neither a plugin nor the Figma desktop app, and since July 2026 it reads the file while v0 builds rather than importing a screenshot of it. Your connected account must have access to the file, and Figma’s rate limits apply.

Copy link to headingHow to refine a v0 prototype without re-prompting the section

Structure and behavior belong in prompts, and visual properties belong in Design Mode, which edits the code from a panel covering typography, color, background, layout, border, appearance, shadow, and text content. Tweaks show in the preview immediately but stay uncommitted until you apply them, so you can try a headline size and back out.

For changes Design Mode can't reach, stack small fixes into one numbered prompt and save big behavioral changes for their own. So shorten the headline, swap the two lower sections, and round the button corners in a single prompt. Give a carousel or a cart action a prompt of its own.

Every change creates a new version, and the version dropdown restores an earlier one, so you undo a failed experiment with one click. If two prompts in a row haven't moved the section closer, roll back to the last good version.

Copy link to headingHow to move v0 prototyping work into your production repository

v0 writes shadcn/ui component files in the same shape your team already edits, so there is no translation step between the prototype and your codebase. Reconciling the section with your storefront is still work, and the checklist below covers it.

These are the paths into an existing storefront:

PathWhat it doesWhen to use it
Git ImportWorks on your repository inside a chat and opens a pull request against itAn existing storefront repository, including a monorepo
Export to work locallyHands you the generated code to edit outside v0A one-off section you want to place by hand
Import from a ZIP or a Vercel projectStarts a chat from code that isn't on a connected Git providerRepositories v0 can't reach through the GitHub App
Deploy to Vercel from the chatPublishes the prototype as its own deployment for reviewSharing a prototype before it belongs in the storefront

For an existing storefront, import the GitHub repository and select the application’s root directory if it is a monorepo. v0 checks out the repository in a Vercel Sandbox and installs dependencies using its package manager and lockfile. The first code change creates an isolated working branch; generated changes are committed and pushed automatically, producing a preview deployment.

Use the branch menu to review the diff, check automated checks, and create or open a pull request. The Publish flow creates or reuses a pull request, merges it into the base branch, and waits for the production deployment. Required checks, reviews, and other branch protections still apply. For a live storefront, complete your team’s review process before publishing.

Once the pull request is open, reconcile the details a generation can't know about your storefront:

  1. Check where the file landed and wire it up: Confirm the component sits in your components directory and that the route meant to show it imports and renders it. A generated section can arrive as a file nothing on the site points at.
  2. Swap absolute color classes for semantic tokens: Replace classes like text-red-600 with text-destructive, and confirm border radii resolve through --radius, so the section follows the theme when the theme changes.
  3. Replace raw image tags: Use next/image so the section inherits the storefront's image optimization.
  4. Run the type check and the build locally: A generated component that renders in the v0 preview can still fail your repository's stricter TypeScript configuration.
  5. Review the preview deployment: Vercel's Comments let merchandising and design leave feedback on a specific part of the preview UI.

The token swap stays a find-and-replace because v0 styles through the shadcn/ui CSS-variable convention and reads your Tailwind configuration and globals.css for custom utility classes and variables. Map your tokens onto a shadcn/ui theme once and later sections skip the step.

Copy link to headingHow to troubleshoot v0 prototypes on the way to production

Three failures show up between a working preview and a merged pull request.

Copy link to headingCustomized shadcn/ui primitives produce mismatched generations

New v0 chats start on a shadcn/ui and Tailwind CSS app, which can conflict with a design system carrying its own components, tokens, styles, or providers. If you customized button or card, expect generations that assume props your version lacks, and the shadcn command line interface (CLI) may offer to overwrite your primitive during install.

Keep your own version and add the missing prop to it, so the change stays inside your design system. Then import your design system through Design Systems 2.0, which builds a starter app around it so later chats only use components, props, and tokens v0 can verify from your sources.

Copy link to headingA generated component references a registry item that doesn't exist

A generation can name a shadcn/ui registry item that isn't in the registry, and npx shadcn add <item> then fails on it. The shadcn CLI accepts a component name, a URL, or a local path, so run it locally for each primitive the section imports before you open the pull request.

When a name fails to resolve, install the dependency by hand or compose the component from primitives that do exist, such as a popover and a calendar in place of a date picker.

Copy link to headingThe Figma import returns less than the whole design

Deeply nested Figma files can hit the rate limits, and v0 continues with the data it already has. Split the file into smaller frames, import navigation and the hero separately, and check that the tokens you expected came through before generating.

Only the first of these is worth checking up front, and it repays the effort, since a primitive mismatch affects every later generation. The other two announce themselves.

Copy link to headingNext steps

With the access gates cleared and your tokens written down, the same loop covers the rest of the campaign. Open a v0 chat and generate your first section, or deploy Next.js Commerce if you need the storefront skeleton underneath it first.

Copy link to headingFrequently asked questions

Does v0 work with frameworks other than Next.js?

Yes, though there is a fidelity cost. v0 is trained on React, Tailwind CSS, and shadcn/ui conventions and defaults to them. Name Remix, Nuxt, or SvelteKit explicitly in the prompt if that is your stack, and budget cleanup after export, because the generated component patterns still follow shadcn/ui.

Do you need to be a developer to prototype a storefront section in v0?

You don't need to be, though a developer reviews and merges the result. You describe the section in plain language, then adjust typography, color, and spacing in Design Mode without touching code. The generated files are TypeScript, so someone reads the component before it goes near the storefront.

Can you use v0 with a design system that isn't shadcn/ui?

Yes, and v0 saves an imported design system as a reusable skill. Existing chats keep the version applied when they were created, while new work picks up the current one. Private npm packages import through an NPM_TOKEN environment variable, and team owners on paid plans can set one system as the team default.

How does v0 handle accessibility in generated components?

v0 outputs components using proper HTML tags, Accessible Rich Internet Applications (ARIA) attributes, and labels. Generations built on shadcn/ui inherit its headless primitives, Base UI by default since July 2026, and the keyboard navigation and focus management those carry. A hand-rolled hero or banner inherits none of that, so audit it against Web Content Accessibility Guidelines (WCAG) criteria.

Is the code v0 generates ready for production?

v0-1.5-md recorded a 93.87% error-free rate generating code for common web development tasks in a June 2025 evaluation. That measures whether the code runs, not whether a section matches your storefront's conventions, its tokens, or its component contracts, so the pull request review is still what decides.

Related documentation

More Next.js guides