Filterable Archive IndexFREE

A dense blog archive whose subject pills are derived from the posts themselves and carry live counts, filtering a two-column list of hairline rows stamped with a date and a reading time.

Blog61: Filterable Archive Index

A dense blog archive whose subject pills are derived from the posts themselves and carry live counts, filtering a two-column list of hairline rows stamped with a date and a reading time.

Free block

This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.

Installation

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/blog61"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/blog61"

This installs the block to components/beste/block/blog61.tsx plus the badge23 component it uses for the eyebrow.

Quick start

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

tsx
import { Blog61, blog61Demo } from "@/components/beste/block/blog61";

export default function ArchivePage() {
  return <Blog61 {...blog61Demo} />;
}

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

tsx
import { Blog61 } from "@/components/beste/block/blog61";

export default function ArchivePage() {
  return (
    <Blog61
      badge={{ label: "Archive" }}
      heading="Everything we have written, by subject"
      description="No infinite scroll and no recommended reading."
      allLabel="Everything"
      posts={[
        {
          date: "12 May 2026",
          topic: "Operations",
          title: "The waiting list is a scheduling problem, not a queue",
          readingTime: "6 min",
          href: "/blog/waiting-list",
        },
        {
          date: "28 Apr 2026",
          topic: "Billing",
          title: "Why we raise the invoice from the appointment, not the month",
          readingTime: "8 min",
          href: "/blog/invoicing",
        },
      ]}
      emptyLabel="Nothing filed under that yet."
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow above the hairline rule, rendered through Badge23
headingstringSection heading in the left column of the header
descriptionstringSupporting paragraph, right-aligned from md up
allLabelstring"All"Label for the unfiltered pill
postsArchivePost[][]The archive itself, in the order it should read
emptyLabelstringLine shown when a filter matches nothing
classNamestringExtra classes for the outer section
ts
type ArchivePost = {
  date: string;
  topic: string;
  title: string;
  readingTime: string;
  href: string;
};

Behavior notes

More Blog blocks

View all Blog
PRO

blog58

Ruled Writing Index

Image-free article index where every entry is one ruled row carrying the date, the category, the title and the reading time with a corner arrow, stacking to a readable block on mobile.

PRO

blog18

Month-Grouped Archive

Blog archive organized by month with compact list entries. Small thumbnails and formatted dates create a scannable chronological view.

PRO

blog8

Category Tabs Filter

Filterable blog grid with tab navigation for categories. Posts automatically filter by category selection with smooth content switching.

PRO

blog44

Newsroom Lead and Index

A newsroom listing with a heading, a divider, and an eyebrow over a hairline rule, a two-column lead story with a large image, the remaining stories stacked as numbered ruled rows with square thumbnails, and a seal button to the full archive.

PRO

blog43

Editorial Article Grid

A blog listing with an eyebrow over a hairline rule, a two-column heading, and three linked article cards with a hover-zoom image, a category label, a title, an excerpt, and byline.

PRO

blog11

Compact Thumbnail List

Two-column compact blog list with small square thumbnails. Space-efficient design showing many posts at once with minimal metadata.

Markdown version