---
title: How to prototype a storefront section in v0 and ship it to Next.js
description: Learn how v0 prototyping works for storefront sections, from a scoped prompt to a pull request in your existing Next.js repository.
url: "https://vercel.com/kb/guide/how-to-prototype-a-storefront-section-in-v0"
published: 2026-09-28
last_updated: 2026-09-28
authors: Vercel
install_vercel_plugin: npx plugins add vercel/vercel-plugin
---

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](https://v0.app/docs) 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.

## What 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](https://v0.app/docs/pricing), 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](https://v0.app/changelog) 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](https://v0.app/docs/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](https://vercel.com/templates/ecommerce/nextjs-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](https://v0.app/docs/design-systems-2) 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.

## How 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](https://vercel.com/templates/next.js/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.

## How to prompt v0 to prototype one storefront section at a time

Large, complex applications [build better incrementally](https://v0.app/docs/text-prompting), 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.

### 1\. 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.

### 2\. 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](https://vercel.com/blog/how-to-prompt-v0) 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:

```plaintext
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.

### 3\. 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.

## Three storefront sections worth prototyping in v0

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

### BFCM 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.

### PDP 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](https://vercel.com/academy/vercel-foundations/v0-way) 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.

### Seasonal campaign banner

If the brand already has the campaign asset, attach it. v0 analyzes the layout, colors, and components in an [attached image](https://v0.app/docs/screenshots) 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](https://v0.app/docs/figma) 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.

## How to refine a v0 prototype without re-prompting the section

Structure and behavior belong in prompts, and visual properties belong in [Design Mode](https://v0.app/docs/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](https://vercel.com/academy/v0-foundations/vibecoding-guide) 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.

## How 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:

| Path                                  | What it does                                                               | When to use it                                          |
| ------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------- |
| Git Import                            | Works on your repository inside a chat and opens a pull request against it | An existing storefront repository, including a monorepo |
| Export to work locally                | Hands you the generated code to edit outside v0                            | A one-off section you want to place by hand             |
| Import from a ZIP or a Vercel project | Starts a chat from code that isn't on a connected Git provider             | Repositories v0 can't reach through the GitHub App      |
| Deploy to Vercel from the chat        | Publishes the prototype as its own deployment for review                   | Sharing 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](https://vercel.com/docs/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](https://vercel.com/docs/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](https://vercel.com/blog/ai-powered-prototyping-with-design-systems) onto a shadcn/ui theme once and later sections skip the step.

## How to troubleshoot v0 prototypes on the way to production

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

### Customized shadcn/ui primitives produce mismatched generations

New v0 chats start on a shadcn/ui and Tailwind CSS app, which [can conflict](https://v0.app/docs/design-systems-2) 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.

### A 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](https://ui.shadcn.com/docs/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.

### The 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.

## Next steps

With the access gates cleared and your tokens written down, the same loop covers the rest of the campaign. Open a [v0 chat](https://v0.app/) and generate your first section, or deploy [Next.js Commerce](https://vercel.com/templates/ecommerce/nextjs-commerce) if you need the storefront skeleton underneath it first.

## Related resources

- [v0 documentation](https://v0.app/docs)
  
- [Git Import in v0](https://v0.app/docs/git-import)
  
- [Design Systems 2.0](https://v0.app/docs/design-systems-2)
  
- [Prompting v0 with text](https://v0.app/docs/text-prompting)
  
- [Prototyping with design systems](https://vercel.com/blog/ai-powered-prototyping-with-design-systems)
  
- [What is shadcn/ui?](https://vercel.com/i/what-is-shadcn)
  
- [Comments on preview deployments](https://vercel.com/docs/comments)