Componentdata
Article Card
Blog article card with category badge, excerpt and author meta.
Preview
Live Preview

25%
Premium Headphones
$299$399
Jordan Daisy
Product Designer
AvailableRemote

The Future of Design Systems
Alex Rivera8 min read
Oc
t 14
Tech Conference 2026
21:00
Berlin Arena
Invoice #INV-2026-0987draft
Date: 2026-09-15Due: 2026-10-15
| Item | Qty | Price |
|---|---|---|
| Design Services | 1 | $150 |
| Development Hours | 5 | $100 |
SubtotalNaN
Tax (10%)NaN
TotalNaN
THERMAL RECEIPT#4N1JCN
Design Consultation$150
Development Hours$200
Total$385.00
Thank you for your purchase!
Subtotal$377.00
Tax$30.16
Total$407.16
Color
Size
✓✓✓✓✓✓
Order #102938Processing
Design Services1x
Development5x
VIP
LOYALTY TIER
$100
Jordan Daisy
Happy Birthday!
J
Jordan Daisy
Product Designer
UX
Badge: EMP-8942
Wedding Reception
Please confirm your attendance
Installation
Tokens guide →Add to your project via CLI (zero dependencies, code you own):
npx bigbullui add article-cardOr install the full npm package:
npm install bigbulluiUsage
import { ArticleCard } from "@/components/ui/article-card";
<ArticleCard />Source code
article-card.tsxZero dependencies (only React + utils). Copy and paste directly into your project:
"use client";
import * as React from "react";
import { cn } from "./lib/utils";
export interface ArticleCardProps {
title: string;
excerpt: string;
category?: string;
author?: string;
readTime?: string;
image?: string;
className?: string;
}
const FadeInUp = "animate-fade-in-up fade-in-up-0s";
const SlideIn = "article-category-slide-in";
export function ArticleCard({
title,
excerpt,
category,
author,
readTime,
image,
className,
}: ArticleCardProps) {
return (
<div
className={cn(
"group relative w-full rounded-lg border border-foreground bg-card text-card-foreground overflow-hidden h-full transition-all duration-300 hover:translate-y-1 hover:shadow-lg motion-reduce:transition-none motion-reduce:translate-y-0 motion-reduce:shadow-none",
className
)}
>
{/* Image section */}
{image && (
<div className="h-48 aspect-[4/3] overflow-hidden">
<img
src={image}
alt={title}
className="object-cover w-full h-full transition-transform duration-300 group-hover:scale-105 motion-reduce:transition-none group-hover:scale-1"
loading="lazy"
/>
</div>
)}
<div className="p-5 flex flex-col flex-1 gap-3">
{/* Category badge */}
{category && (
<div
className={cn(
"inline-flex items-center rounded border border-dashed border-border text-xs font-mono uppercase tracking-widest px-2 py-0.5 text-muted-foreground",
"bg-secondary/10",
SlideIn
)}
>
{category}
</div>
)}
<h4 className="font-medium line-clamp-2 flex-1 transition-colors group-hover:text-accent">{title}</h4>
{/* Meta row */}
<div className="flex items-baseline gap-3 text-xs text-muted-foreground">
{author && (
<span>
{author}
</span>
)}
{readTime && (
<span>
{readTime} min read
</span>
)}
</div>
</div>
</div>
);
}Props
| Prop | Type | Description |
|---|---|---|
| title | string | Article headline (required). |
| excerpt | string | Summary paragraph (required). |
| category | string | Eyebrow category label. |
| author | string | Author name. |
| readTime | string | Reading time label (e.g. '4 min'). |
| image | string | Cover image URL. |