Topic Cards With Resource Counts

About this block

Topic Cards With Resource CountsPRO

Three tinted topic cards, each stamped with how many pieces sit behind it, the topic name, and an image filling the lower half, alongside a link out to the full topic index.

Blog66: Topic Cards With Resource Counts

Three tinted topic cards, each stamped with how many pieces sit behind it, the topic name, and an image filling the lower half, alongside a link out to the full topic index.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/blog66?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/blog66?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/blog66.tsx and the badge6 component it uses for the eyebrow (installed to components/beste/component/badge6.tsx).

Quick start

The installed file exports blog66Demo alongside the block: the exact props behind the preview above. Spread it to get a working topic row in one line.

tsx
import { Blog66, blog66Demo } from "@/components/beste/block/blog66";

export default function TopicsPage() {
  return <Blog66 {...blog66Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Blog66 } from "@/components/beste/block/blog66";

export default function TopicsPage() {
  return (
    <Blog66
      eyebrow="Keep reading"
      heading="Browse by subject"
      countLabel="Pieces"
      link={{ label: "See every subject", href: "/subjects" }}
      topics={[
        {
          count: 11,
          title: "Client work",
          image: { src: "/topics/client-work.jpg", alt: "A team at a table" },
          href: "/subjects/client-work",
        },
        {
          count: 7,
          title: "Pricing and proposals",
          image: { src: "/topics/pricing.jpg", alt: "A printed estimate" },
          href: "/subjects/pricing",
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Badge6 label, sharing a row with the link
headingstring–Section heading under the rule
countLabelstring–Noun after each card's count, e.g. "Pieces"
linkActionLink–Link out to the full index, at the right of the eyebrow row
topicsTopic[][]Topic cards, three to a row on desktop
classNamestring–Extra classes for the outer section
ts
type Topic = {
  count: number;
  title: string;
  image: TopicImage;
  href: string;
};

type TopicImage = {
  src: string;
  alt: string;
};

type ActionLink = {
  label: string;
  href: string;
};

Behavior notes

  • The stamp on each card is composed, not literal: the block prints count in front of countLabel, so a card with eleven pieces reads "11 Pieces" and stays correct as the archive grows.
  • Passing no countLabel prints the bare number rather than a trailing space.
  • Cards are a soft bg-muted/50 that deepens to bg-muted on hover, with the accent kept for the count and the hovered title. There is no per-card colour to configure.
  • The image sits in a fixed four by three box at the bottom of the card, so cards with longer titles stay the same height as the rest of the row.
  • The eyebrow and the index link share one row above the rule, so the section has a single header line rather than a heading with a link floating beside it.

More Blog blocks

View all Blog
PRO

blog63

Topic Hub Card With Resource List

PRO

blog22

Full-Width Stacked Cards

PRO

blog59

Journal Card Trio

Get Pro access