Staaarter

Billing Secure Checkout Badge

A row of security trust badges for checkout and billing pages, each with an icon, a label, and an optional one-line description like "Level 1 compliant". Built to sit directly under a Pay button or credit card form, the moment a buyer is most likely to hesitate over handing over payment details.

By Staaarter Team
Billing
Updated May 19, 2026
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/billing-secure-checkout-badge.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/billing/billing120.tsx instead.

Usage

The file also exports billing120Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Billing120, billing120Demo } from "@/components/blocks/billing/billing120";

export default function Page() {
  return <Billing120 {...billing120Demo} />;
}

Props

PropTypeDefaultDescription
headingstringnoneOptional small label above the badge row, for example "Payments secured by". Omitted if not passed.
badgesSecurityBadgeItem[]noneBadges rendered left to right, wrapping onto new lines on narrow viewports.
classNamestringnoneExtra classes for the outer wrapper.

Types

type SecurityBadgeIcon = "shield" | "lock" | "certified" | "infrastructure";

interface SecurityBadgeItem {
  id: string;
  label: string;
  description?: string;
  icon: SecurityBadgeIcon;
}

Behavior notes

  • Each badge's icon comes from a fixed string union (shield, lock, certified, infrastructure) mapped internally to a lucide-react icon, not passed as a component prop.
  • Icons are muted-foreground colored rather than brand colors, on purpose, since a plain monochrome look reads as infrastructure rather than a decorative sticker.
  • The row uses flex-wrap so it degrades gracefully to two or three lines on narrow viewports instead of overflowing or shrinking illegibly.
  • The optional description line is small (11px) and sits directly under the label inside the same badge, keep it to a few words.
  • There's no logic verifying the badges are true, whatever labels and descriptions you pass are displayed as-is.

Frequently asked questions