Product Card Grid

Responsive product grid with ratings, sale badges, and add to cart buttons. Perfect for shop pages and product catalogs.

FREE

Ecommerce1: Product Card Grid

Responsive product grid for shop and catalog pages: image tile with an optional sale/bestseller badge, star rating, current and struck-through original price, and a full-width "Add to Cart" button per card.

Free block

This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.

Installation

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/ecommerce1"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/ecommerce1"

This installs the block to components/beste/block/ecommerce1.tsx and the Badge and Button shadcn/ui primitives it uses.

Quick start

The installed file exports ecommerce1Demo alongside the block: the exact props behind the preview above. Spread it to get a working product grid in one line.

tsx
import { Ecommerce1, ecommerce1Demo } from "@/components/beste/block/ecommerce1";

export default function ShopPage() {
  return <Ecommerce1 {...ecommerce1Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Ecommerce1 } from "@/components/beste/block/ecommerce1";

export default function ShopPage() {
  return (
    <Ecommerce1
      heading="Shop our latest collection"
      currency="$"
      products={[
        {
          name: "Minimal Desk Lamp",
          price: 89,
          originalPrice: 129,
          image: "https://images.unsplash.com/photo-1731762524352-b5663f83a830?w=900&fit=crop",
          badge: "Sale",
          rating: 4.8,
          reviewCount: 124,
        },
        {
          name: "Ceramic Vase Set",
          price: 65,
          image: "https://images.unsplash.com/photo-1654856842864-145a630cd603?w=900&fit=crop",
          rating: 4.9,
          reviewCount: 89,
        },
      ]}
      onAddToCart={(product) => console.log("add to cart", product.name)}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }Optional pill badge above the heading
headingstringSection heading
descriptionstringSection intro text
productsProduct[][]Products rendered as cards
currencystring"$"Symbol prefixed to every price and original price
onAddToCart(product: Product) => voidCalled with the clicked card's product when "Add to Cart" is pressed
classNamestringExtra classes for the outer <section>
ts
type Product = {
  name: string;
  price: number;
  originalPrice?: number;
  image: string;
  badge?: string;
  rating?: number;
  reviewCount?: number;
};

Behavior notes

More Ecommerce blocks

View all Ecommerce
FREE

ecommerce4

Shop by Category Grid

Product category browsing with image cards, product counts, and featured badges. Responsive grid layout with hover effects. Perfect for storefront navigation and collection showcases.

PRO

ecommerce28

Featured Products Grid

Product cards with hover wishlist buttons, quick add to cart overlay, and star ratings. Perfect for featured sections and bestsellers.

PRO

ecommerce14

Related Products Grid

Product recommendations grid with images, prices, and add to cart buttons. Perfect for cross-selling and upselling on product pages.

PRO

ecommerce35

Product Reviews Grid

Review cards with star ratings, product thumbnails, verified badges, and helpfulness counts. Perfect for social proof and testimonial sections.

FREE

ecommerce32

Shop by Brand Grid

Brand logo cards with product counts and hover effects linking to brand pages. Perfect for multi-brand stores and brand discovery.

PRO

ecommerce33

Collection Showcase Grid

Featured collection card with supporting collection tiles, image overlays, and product counts. Perfect for homepage collection highlights.