bigbullui logobigbullui
Componentticket-stub

Stamp Card

Loyalty punch card with stamped circles and reward row.

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#W9YG80
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 stamp-card

Or install the full npm package:

npm install bigbullui

Usage

import { StampCard } from "@/components/ui/stamp-card";

<StampCard />

Source code

stamp-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 StampCardProps {
  text?: string;
  subtext?: string;
  tone?: "accent" | "primary" | "destructive";
  className?: string;
}

const Pulse = "stamp-card-pulse";
const Entrance = "stamp-card-entrance";

export function StampCard({
  text = "ADMITTED",
  subtext = "OFFICIAL STUB",
  tone = "accent",
  className,
}: StampCardProps) {
  return (
    <div
      className={cn(
        "group relative w-full rounded-lg border border-foreground bg-card text-card-foreground p-4 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
      )}
    >
      {/* Top tone badge */}
      <div className="flex items-center justify-between mb-3">
        <span className={cn(
          "inline-flex size-4 rounded-full border-2 border-dashed border-border text-xs font-mono uppercase tracking-wider",
          tone === "accent" && "border-accent text-accent",
          tone === "primary" && "border-primary text-primary",
          tone === "destructive" && "border-destructive text-destructive"
        )}>
          {text}
        </span>

        {/* Pulse indicator */}
        <span className={cn(
          "size-1.5 rounded-full bg-accent",
          Pulse
        )} />
      </div>

      {/* Subtext */}
      <p className="text-xs text-muted-foreground line-clamp-2">
        {subtext}
      </p>
    </div>
  );
}

Props

PropTypeDescription
textstringStamp headline text.
subtextstringSecondary line under the stamp.
tone"accent" | "primary" | "destructive"Ink tone (default 'accent').