bigbullui logobigbullui
Componentdata

Event Card

Event card with perforated date block, venue and time chips.

Preview

Live Preview
Premium Headphones
25%

Premium Headphones

$299$399

Jordan Daisy

Product Designer

AvailableRemote
The Future of Design Systems

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
ItemQtyPrice
Design Services1$150
Development Hours5$100
SubtotalNaN
Tax (10%)NaN
TotalNaN
THERMAL RECEIPT#U3AAS4
Design Consultation$150
Development Hours$200
Total$385.00
Thank you for your purchase!
Premium Headphones
1
Phone Case
2
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 event-card

Or install the full npm package:

npm install bigbullui

Usage

import { EventCard } from "@/components/ui/event-card";

<EventCard />

Source code

event-card.tsx

Zero 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 EventCardProps {
  title: string;
  date?: string;
  venue?: string;
  time?: string;
  className?: string;
}

const FadeInUp = "animate-fade-in-up-0s fade-in-up-1";
const ScaleIn = "event-date-scale-in";
const Pulse = "event-stamp-pulse";

export function EventCard({
  title,
  date = "Oct 14",
  venue = "Berlin Arena",
  time = "21:00",
  className,
}: EventCardProps) {
  return (
    <div
      className={cn(
        "group relative w-full rounded-lg border border-foreground bg-card text-card-foreground p-6 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
      )}
    >
      {/* Date block with dashed left edge */}
      <div className="relative flex items-start gap-3">
        <div
          className={cn(
            "group/[.event-active]:translate-y-0 shrink-0 size-8 rounded-full border-2 border-dashed border-border bg-secondary/10 flex flex-col items-center justify-center transition-all duration-300 motion-reduce:transition-none",
            ScaleIn,
            "event-date"
          )}
        >
          <div className="font-mono text-[24px] font-black uppercase tracking-widest">{date.slice(0, 2)}</div>
          <div className="font-mono text-[10px] uppercase tracking-widest">{date.slice(2)}</div>
        </div>

        <div className="group-[.event-active]:translate-x-0 flex-1">
          <h4 className="font-medium line-clamp-1">{title}</h4>
        </div>

        {time && (
          <div className="mt-1 flex items-center gap-1 text-xs uppercase tracking-wider text-muted-foreground">
            <span>{time}</span>
          </div>
        )}
      </div>

      {/* Venue chip */}
      {venue && (
        <div
          className={cn(
            "mt-3 inline-flex items-center rounded border border-dashed border-border bg-secondary/10 px-2.5 py-1 text-xs font-mono uppercase tracking-wider text-muted-foreground",
            Pulse
          )}
        >
          {venue}
        </div>
      )}
    </div>
  );
}

Props

PropTypeDescription
titlestringEvent name (required).
datestringDate block string.
venuestringVenue name.
timestringShowtime string.