Product Cards
A collection of product card designs, featuring various layouts for showcasing products
Minimal Card
Installation
Install the required dependencies:
npm install lucide-react reactpnpm install lucide-react reactyarn add lucide-react reactbun add lucide-react reactUsage
import ProductCardMinimal from "@/components/mvpblocks/cards/product/product-card-minimal";
export default function MyComponent() {
return (
<div className="flex items-center justify-center min-h-screen p-8">
<ProductCardMinimal
title="Wireless Headphones"
category="Audio"
price={79.99}
image="https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=600&q=80"
isNew
/>
</div>
);
}Minimal Card API
| Prop | Type | Default |
|---|---|---|
className? | string | undefined |
title? | string | "Wireless Headphones" |
category? | string | "Audio" |
price? | number | 79.99 |
image? | string | "https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=600&q=80" |
isNew? | boolean | true |
Features
- Wishlist toggle — Heart button appears on hover and persists once activated
- "New" badge — Conditional badge in the top-left corner
- Add to Cart — Animated button with visual feedback on click
- Image lazy loading — Smooth reveal with a skeleton pulse placeholder
Styling and Animation Details
- Card lift —
hover:-translate-y-1withhover:shadow-lgfor a subtle elevation effect - Image zoom —
group-hover:scale-105on the image for a gentle zoom - Wishlist reveal — Button transitions from
opacity-0toopacity-100on card hover - Heart fill —
scale-110andfill-red-500on toggle - Cart feedback — Cart icon scales and rotates (
scale-125 -rotate-6) on add - Skeleton loading —
animate-pulseplaceholder fades out as the image loads
Modern Card
Installation
Install the required dependencies:
npm install lucide-react reactpnpm install lucide-react reactyarn add lucide-react reactbun add lucide-react reactUsage
import ProductCardModern from "@/components/mvpblocks/cards/product/product-card-modern";
export default function MyComponent() {
return (
<div className="flex items-center justify-center min-h-screen p-8">
<ProductCardModern
title="Running Shoes"
category="Footwear"
price={89.99}
previousPrice={129.99}
image="https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=600&q=80"
rating={4}
reviewCount={128}
discount={31}
/>
</div>
);
}Modern Card API
| Prop | Type | Default |
|---|---|---|
className? | string | undefined |
title? | string | "Running Shoes" |
category? | string | "Footwear" |
description? | string | "Lightweight and responsive running shoes..." |
price? | number | 89.99 |
previousPrice? | number | 129.99 |
image? | string | "https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=600&q=80" |
rating? | number | 4 |
reviewCount? | number | 128 |
discount? | number | 31 |
Features
- Star rating display — Five interactive stars with staggered hover animation
- Discount badge — Percentage-off label next to the strikethrough original price
- Product description — Truncated to 2 lines with
line-clamp-2 - Wishlist toggle — Heart button with backdrop blur and dark mode support
- Add to Cart — Animated button with visual feedback
Styling and Animation Details
- Card lift —
hover:-translate-y-1withhover:shadow-lgelevation - Image zoom —
group-hover:scale-105on hover - Gradient overlay —
bg-linear-to-t from-black/20fades in on the image area - Staggered stars — Each star scales up with a
transitionDelayofstar * 40ms - Wishlist — Backdrop blur (
backdrop-blur-sm) with dark mode variants - Heart fill —
scale-110andfill-red-500on activation - Cart feedback — Icon
scale-125 -rotate-6on click
Premium Card
Installation
Install the required dependencies:
npm install lucide-react reactpnpm install lucide-react reactyarn add lucide-react reactbun add lucide-react reactUsage
import ProductCardPremium from "@/components/mvpblocks/cards/product/product-card-premium";
export default function MyComponent() {
return (
<div className="flex items-center justify-center min-h-screen p-8">
<ProductCardPremium
title="Heritage Chronograph"
reference="Ref. 5172G-001"
category="Luxury Watches"
price={1250}
image="https://images.unsplash.com/photo-1524592094714-0f0654e20314?w=600&q=80"
isPremium
/>
</div>
);
}Premium Card API
| Prop | Type | Default |
|---|---|---|
className? | string | undefined |
title? | string | "Heritage Chronograph" |
reference? | string | "Ref. 5172G-001" |
category? | string | "Luxury Watches" |
description? | string | "Swiss-made automatic movement..." |
price? | number | 1250 |
image? | string | "https://images.unsplash.com/photo-1524592094714-0f0654e20314?w=600&q=80" |
isPremium? | boolean | true |
Features
- "Limited Edition" badge — Premium border badge in the top-left
- Reference number — Slides up on hover for a catalog-like detail
- Discover CTA — Button with animated arrow that translates on hover
- Serif typography —
font-seriffor the product title, light font weights throughout - Dark mode — Full dark mode support with
dark:variants
Styling and Animation Details
- Image zoom —
group-hover:scale-[1.04]over 1200ms for a slow, cinematic reveal - Gradient overlay — Fades in over 700ms on hover, from
black/40to transparent - Reference number — Translates
translate-y-1totranslate-y-0withopacity-0toopacity-100 - Divider line — Expands from
w-8tow-16on hover over 700ms - Arrow animation —
group-hover/btn:translate-x-0.5 group-hover/btn:-translate-y-0.5for a diagonal nudge - Button spacing —
hover:gap-2.5widens the gap between text and arrow - Rounded corners — Uses
rounded-smfor a sharper, more refined look
Carrossel Card
Installation
Install the required dependencies:
npm install lucide-react reactpnpm install lucide-react reactyarn add lucide-react reactbun add lucide-react reactUsage
import ProductCardCarrossel from "@/components/mvpblocks/cards/product/product-card-carrossel";
export default function MyComponent() {
return (
<div className="flex items-center justify-center min-h-screen p-8">
<ProductCardCarrossel
title="Mechanical Keyboard"
category="Accessories"
price={149.99}
rating={4.5}
reviewCount={324}
images={[
"https://images.unsplash.com/photo-1587829741301-dc798b83add3?w=600&q=80",
"https://images.unsplash.com/photo-1541140532154-b024d705b90a?w=600&q=80",
]}
/>
</div>
);
}Carrossel Card API
| Prop | Type | Default |
|---|---|---|
className? | string | undefined |
title? | string | "Mechanical Keyboard" |
category? | string | "Accessories" |
price? | number | 149.99 |
rating? | number | 4.5 |
reviewCount? | number | 324 |
images? | string[] | ['https://images.unsplash.com/photo-1587829741301-dc798b83add3?w=600&q=80', ...] |
Features
- Image carousel — Swipeable and arrow-navigable image gallery
- Auto-play — Automatically advances images at 1.6s intervals on hover
- 3D tilt effect — Perspective transform follows mouse movement
- Star rating — Supports full, half, and empty star states
- Dot indicators — Active dot stretches into a pill shape
- Swipe support — Pointer events with 40px threshold for touch/click drag
- Add to Cart — Animated button with visual feedback
Styling and Animation Details
- 3D tilt —
perspective(1000px) rotateX() rotateY()computed from mouse position - Slide transition —
cubic-bezier(0.34, 1.56, 0.64, 1)for an overshoot easing - Auto-play — Starts on
mouseenter, stops onmouseleaveviasetInterval - Navigation arrows — Fade in on hover with
opacitytransition - Dot pill — Active dot expands from
w-1.5tow-5withrounded-full - Cart feedback — Icon
scale-125 -rotate-6on add
Discount Card
Installation
Install the required dependencies:
npm install lucide-react reactpnpm install lucide-react reactyarn add lucide-react reactbun add lucide-react reactUsage
import ProductCardDiscount from "@/components/mvpblocks/cards/product/product-card-discount";
export default function MyComponent() {
return (
<div className="flex items-center justify-center min-h-screen p-8">
<ProductCardDiscount
title="Running Shoes"
category="Footwear"
originalPrice={189.99}
discountedPrice={132.99}
discountPercent={31}
image="https://images.unsplash.com/photo-1595950653106-6c9ebd614d3a?w=600&q=80"
/>
</div>
);
}Discount Card API
| Prop | Type | Default |
|---|---|---|
className? | string | undefined |
title? | string | "Running Shoes" |
category? | string | "Footwear" |
originalPrice? | number | 189.99 |
discountedPrice? | number | 132.99 |
discountPercent? | number | 31 |
image? | string | "https://images.unsplash.com/photo-1595950653106-6c9ebd614d3a?w=600&q=80" |
Features
- Full-bleed background image — Image covers the entire card as a background
- Discount badge — Pulsing
-31%badge to draw attention - "Sale" badge — Static amber badge for contrast
- Price comparison — Discounted price, original strikethrough, and "Save $" badge
- Animated CTA — "Shop Now" button slides up from below on hover
Styling and Animation Details
- Image zoom —
group-hover:scale-110over 700ms for a dramatic reveal - Gradient overlay —
bg-linear-to-t from-black/90 via-black/40 to-black/10deepens on hover - Pulsing badge —
animate-[pulse_2.2s_ease-in-out_infinite]on the discount percentage - Button reveal — Slides
translate-y-1totranslate-y-0on card hover - Cart feedback — Icon
scale-125 -rotate-6on add - Fixed aspect — Fixed height
h-[520px]for consistent card sizing
Horizontal Card
Installation
Install the required dependencies:
npm install lucide-react reactpnpm install lucide-react reactyarn add lucide-react reactbun add lucide-react reactUsage
import ProductCardHorizontal from "@/components/mvpblocks/cards/product/product-card-horinzontal";
export default function MyComponent() {
return (
<div className="flex items-center justify-center min-h-screen p-4">
<ProductCardHorizontal
title="Smart Watch"
category="Wearables"
price={249.99}
rating={4.3}
reviewCount={87}
inStock
stockCount={6}
image="https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=600&q=80"
showQuantity
/>
</div>
);
}Horizontal Card API
| Prop | Type | Default |
|---|---|---|
className? | string | undefined |
showQuantity? | boolean | false |
title? | string | "Smart Watch" |
category? | string | "Wearables" |
description? | string | "Track workouts, heart rate, and sleep..." |
price? | number | 249.99 |
rating? | number | 4.3 |
reviewCount? | number | 87 |
inStock? | boolean | true |
stockCount? | number | 6 |
image? | string | "https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=600&q=80" |
Features
- Horizontal layout — Image on the left, product details on the right
- Quantity selector — Optional (
showQuantity) increment/decrement controls - Star rating display — Five-star visual with review count
- Stock indicator — "In stock" label with a live ping animation
- Low stock badge —
"Only N left"overlay when stock ≤ 8 - Subtotal calculation — Shows
price × quantitywhen quantity selector is active - Add to Cart — Animated button
Styling and Animation Details
- Responsive grid —
grid-cols-1on mobile,sm:grid-cols-[auto_1fr]on desktop - Image zoom —
group-hover:scale-105on hover - Stock ping —
animate-pingon the green dot for a live indicator effect - Cart feedback — Icon
scale-125 -rotate-6on add - Button active —
active:scale-95for press feedback - Tabular numbers —
tabular-numsfor consistent price digit widths
Last updated on
