Alternating Proof Rows

(Three shifts)

What changed, shown before it is explained.

See all three cases
Minimal coffee packaging arranged on a concrete surface
(Packaging)

A shelf you can read from across the room

We threw out the illustration, kept the weight of the paper and let the name do the work. The bags now scan in under a second, which is roughly how long anyone looks.

1.4x

Shelf pick-up rate

Open print publication with a clean two-column layout
(Publishing)

A catalogue people finish

The reading order came first, the grid second and the cover last. Readers now reach the back pages, where the actual ordering happens.

68%

Reached the final section

Close detail of a minimal control surface
(Hardware)

One control instead of four buttons

Every function that was not used weekly moved into the app. What is left on the device is the thing people reach for without looking.

Halved

Setup support tickets

About this block

Alternating Proof RowsPRO

Feature rows that alternate the image side on every second entry, each pairing an eyebrow, display title and explanation with one oversized outcome figure on its own rule, headed by an outline pill CTA pinned to the top right.

Feature248: Alternating Proof Rows

Case rows that alternate sides down the page: a photograph on one side, and on the other an eyebrow, a statement, the story and the number it produced, each row opening on its own rule. The CTA sits in the header, next to the heading.

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

Base UI flavor

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

This installs the block to components/beste/block/feature248.tsx plus the badge7 eyebrow and button12 pill button it uses.

Quick start

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

tsx
import { Feature248, feature248Demo } from "@/components/beste/block/feature248";

export default function Page() {
  return <Feature248 {...feature248Demo} />;
}

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

tsx
import { Feature248 } from "@/components/beste/block/feature248";

export default function Page() {
  return (
    <Feature248
      badge={{ label: "Three shifts" }}
      heading="What changed, shown before it is explained."
      button={{ label: "See all three cases", href: "/work" }}
      rows={[
        {
          eyebrow: "Packaging",
          title: "A shelf you can read from across the room",
          description: "We threw out the illustration and let the name do the work.",
          figure: "1.4x",
          figureTitle: "Shelf pick-up rate",
          src: "/work/coffee.jpg",
          alt: "Coffee packaging on concrete",
        },
        {
          eyebrow: "Publishing",
          title: "A catalogue people finish",
          description: "The reading order came first, the grid second and the cover last.",
          figure: "68%",
          figureTitle: "Reached the final section",
          src: "/work/catalogue.jpg",
          alt: "Open print publication",
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow label rendered as a Badge7
headingstringSection heading in the header row
rowsFeatureRow[][]Case rows, rendered top to bottom with alternating sides
buttonActionButtonOutline Button12 in the header, opposite the heading
classNamestringExtra classes for the outer <section>
ts
type FeatureRow = {
  eyebrow: string;
  title: string;
  description: string;
  figure: string;
  figureTitle: string;
  src: string;
  alt: string;
};

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

Behavior notes

  • Alternation is a CSS concern only: odd rows get md:[&>*:first-child]:order-last, so the source order stays image-then-text and a phone always reads picture first.
  • The CTA lives in the header rather than under the last row, and the header uses items-end, so the button sits on the heading's baseline instead of floating at the top of a tall statement.
  • The button carries shrink-0, which keeps it at full width when a long heading wraps next to it.
  • Each row opens with border-t pt-8, so the rows read as a ruled sequence rather than a stack of cards.
  • The figure is separated from the story by a second rule inside the text column, which is what makes the number read as evidence rather than as another paragraph.
  • Row spacing scales with the viewport (gap-16 becoming md:gap-24), so the alternation stays legible on desktop without wasting a screen on a phone.
  • Images hold aspect-[4/3] at every width and the columns are md:items-center, so a short story and a long one both sit level with their picture.

More Feature blocks

View all Feature
PRO

feature211

Alternating Features

Alternating image-and-copy feature rows with checklists.

PRO

feature262

Expanding Proof Rows

A feature of full-width hairline rows that expand in place, revealing a paragraph beside an image tile that floats a different live asset for each way of evaluating the product.

PRO

feature266

Figure-Led Evidence Rows

A feature that opens on a tall image tile floating a live before-and-after card, then sets out its evidence as hairline rows leading on an oversized light figure paired with an explanation and the method behind it.

PRO

feature282

Alternating Rows

The classic zigzag: under a serif heading that settles in word by word and a pill action, rows alternate a photograph drifting inside its frame with an eyebrow, a serif title, a description and an arrow link, switching sides on every row.

FREE

feature2

Alternating Rows With Mixed Media

Hero header with a CTA, then alternating image-left / image-right rows. Each row's media slot accepts an image, video, or live registry-component asset.

PRO

feature232

Stat-backed feature rows

Ruled feature rows that pair a large figure with a title and supporting copy, framing each capability by the number it earns.