Quad GridPRO

A newsroom listing with a square eyebrow, a two-column heading band over a hairline rule, and four equally weighted stories as bordered cards, each linking through a hover-zoom image, a category kicker, a bold headline, a summary, and a byline pinned to the card foot.

Blog48: Quad Grid

A newsroom listing section that opens with a Badge6 eyebrow and a two-column heading band above a hairline rule, then lays four equally weighted stories into a 2x2 grid of bordered cards where each cell links through a hover-zoom cover image, a category kicker, a bold headline, a summary, and a byline pinned to the foot of the card.

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/blog48?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/blog48.tsx and its dependencies, including the Badge6 component it renders.

Quick start

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

tsx
import { Blog48, blog48Demo } from "@/components/beste/block/blog48";

export default function Page() {
  return <Blog48 {...blog48Demo} />;
}

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

tsx
import { Blog48 } from "@/components/beste/block/blog48";

export default function Page() {
  return (
    <Blog48
      label="Press room"
      heading="Announcements from the Meridian communications desk"
      description="Filings, operating updates, and leadership changes, published as they are released."
      items={[
        {
          image: { src: "/press/harbour-terminal.jpg", alt: "Cranes above a container terminal at dusk" },
          category: "Operations",
          title: "Harbour terminal reopens after a nine-week refit",
          summary:
            "Berth three returns to full throughput this month, restoring the northern corridor to its pre-refit schedule.",
          date: "April 2, 2026",
          author: { name: "Ingrid Halvorsen", title: "Head of Communications" },
          href: "/press/harbour-terminal",
        },
        {
          image: { src: "/press/half-year.jpg", alt: "A printed results summary on a meeting table" },
          category: "Markets",
          title: "Half-year results hold margins flat against a softer freight index",
          summary:
            "Volumes tracked guidance and the board reaffirmed the payout policy set out in January.",
          date: "March 18, 2026",
          author: { name: "Tomas Weill", title: "Investor Relations" },
          href: "/press/half-year",
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
labelstringBadge6 eyebrow above the heading band; omitted entirely when absent
headingstringSection heading in the left column of the heading band
descriptionstringMuted supporting paragraph in the right column of the heading band
itemsArticle[][]Story cards rendered into the two-column grid
classNamestringExtra classes merged onto the outer <section>
ts
type Article = {
  image: { src: string; alt: string };
  category: string;
  title: string;
  summary: string;
  date: string;
  author: Author;
  href: string;
};

type Author = {
  name: string;
  title?: string;
  avatar?: { src: string; alt: string };
  href?: string;
};

Behavior notes

More Blog blocks

View all Blog
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

blog49

Quad Ledger

An image-free newsroom index with a square eyebrow, a two-column heading band over a hairline rule, four linked release cards that each pair an accent counter with a kicker, headline, dek, and byline, and a seal button to the full archive.

PRO

blog46

Front Page Columns

A newsroom front page with a heading, a divider, and a square eyebrow over a hairline rule, a wide lead story whose headline and standfirst split across a twelve column band under a panoramic image, and the remaining articles set as three bordered text cards.

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

blog56

Category Mosaic

A six-slot photo mosaic under a parenthetical eyebrow and a large heading, where every tile is bound to one newsroom category so the grid doubles as a section map, with a ruled legend naming the sections above it.

PRO

blog14

Grid with Newsletter Card

Four-column grid mixing blog cards with an integrated newsletter signup card. Email input and subscribe button embedded in the layout.

Markdown version