Rocky_Mountain_Vending/components/vending-machine-card.tsx
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

57 lines
1.7 KiB
TypeScript

import { Card, CardContent } from "@/components/ui/card"
import Image from "next/image"
import { AnimatedNumber } from "@/components/animated-number"
interface VendingMachineCardProps {
name: string
description: string
image: string
alt: string
selections?: number
items?: number
}
export function VendingMachineCard({
name,
description,
image,
alt,
selections = 0,
items = 0,
}: VendingMachineCardProps) {
return (
<Card className="border-border/50 overflow-hidden h-full flex flex-col hover:border-secondary/50 transition-colors">
<div className="relative aspect-[4/3] w-full bg-muted">
<Image
src={image}
alt={alt}
fill
className="object-contain p-4"
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
priority={false}
/>
</div>
<CardContent className="p-6 flex-1 flex flex-col">
<h3 className="text-xl font-semibold mb-2">{name}</h3>
<p className="text-sm text-muted-foreground mb-4 flex-1 overflow-y-auto">{description}</p>
<div className="flex gap-6 text-sm pt-4 border-t">
<div>
<AnimatedNumber
value={selections}
className="text-2xl font-bold text-secondary"
/>
<div className="text-xs text-muted-foreground uppercase tracking-wide mt-1">Selections</div>
</div>
<div>
<AnimatedNumber
value={items}
className="text-2xl font-bold text-secondary"
/>
<div className="text-xs text-muted-foreground uppercase tracking-wide mt-1">Items</div>
</div>
</div>
</CardContent>
</Card>
)
}