Skip to content
Framework: Vite + React + TypeScriptDifficulty: intermediateFeatured

Ecommerce storefront

A product catalog with category filters and search, product detail view, and a cart kept in local state.

Catalog, product detail and cart screens driven by a typed in-memory product list. The cart is persisted to localStorage through a small hook, quantities can be adjusted inline, and the checkout form is explicitly a placeholder: it records the order locally and tells you where to plug in Stripe or Razorpay on the server.

  • react
  • ecommerce
  • cart
  • catalog
  • tailwind

This preview is the template's actual file tree and source code — exactly what is copied into a new project. Codexa does not publish screenshots or mock-ups of templates; run the project to see it rendered.

Files13 files

src/cart.ts26 lines
import { useLocalStorage } from "./useLocalStorage";
import { products } from "./products";

export type CartLine = { productId: string; qty: number };

export function useCart() {
  const [lines, setLines] = useLocalStorage<CartLine[]>("cart", []);

  const add = (productId: string) =>
    setLines((prev) => {
      const existing = prev.find((l) => l.productId === productId);
      if (existing) return prev.map((l) => (l.productId === productId ? { ...l, qty: l.qty + 1 } : l));
      return [...prev, { productId, qty: 1 }];
    });
  const setQty = (productId: string, qty: number) =>
    setLines((prev) => (qty <= 0 ? prev.filter((l) => l.productId !== productId) : prev.map((l) => (l.productId === productId ? { ...l, qty } : l))));
  const clear = () => setLines([]);

  const items = lines
    .map((l) => ({ ...l, product: products.find((p) => p.id === l.productId) }))
    .filter((l): l is CartLine & { product: NonNullable<(typeof products)[number]> } => Boolean(l.product));
  const total = items.reduce((s, l) => s + l.product.price * l.qty, 0);
  const count = items.reduce((s, l) => s + l.qty, 0);

  return { items, total, count, add, setQty, clear };
}

Dependencies

Documented from the template's package.json. The runtime has a prebuilt dependency set for Vite + React + TypeScript, so installs are fast.

PackageVersion
react^19.1.0
react-dom^19.1.0
vite^6.3.0
@vitejs/plugin-react^4.4.0
tailwindcss^4.1.0
@tailwindcss/vite^4.1.0
typescript^5.8.0

How it runs

Framework
Vite + React + TypeScript
Dev command
npm run dev
Build command
npm run build
Output directory
dist
Port
5173
Opens at
/
Difficulty
intermediate

Projects run in an isolated sandbox with a live preview. Read the projects documentation for details on settings, snapshots and deployment.

Need the raw data? GET /api/v1/templates/vite-react-storefront returns this template with its files.

Build on Ecommerce storefront

Create a free account, start from this template, and ask the AI agent to turn it into your app.