Two Case Studies

Case studies

Twocompanies,twoyears,andwhatchanged.

About this block

Two Case StudiesPRO

Two case studies side by side under a serif heading that settles in word by word: each with a photograph drifting inside its frame, a small-caps client and sector line, a serif title, a summary, and a ruled foot pairing a serif result figure with a read link.

Showcase51: Two Case Studies

Two case studies side by side: each carries a photograph that drifts inside its frame, a client and sector rule, a serif title, a summary, and a ruled foot pairing the headline result with a read link.

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

Base UI flavor

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

This installs the block to components/beste/block/showcase51.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.

Quick start

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

tsx
import { Showcase51, showcase51Demo } from "@/components/beste/block/showcase51";

export default function Page() {
  return <Showcase51 {...showcase51Demo} />;
}

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

tsx
import { Showcase51 } from "@/components/beste/block/showcase51";

export default function Page() {
  return (
    <Showcase51
      eyebrow="Case studies"
      heading="Two companies, two years, and what changed."
      button={{ label: "Bring us to your team", href: "/workplace", tone: "outline" }}
      studies={[
        {
          client: "A design studio of forty",
          sector: "Creative",
          title: "Confidential sessions for a team that never switched off",
          summary: "Eight monthly hours, booked directly by staff, never reported back.",
          result: { value: "0", label: "Burnout departures in the second year" },
          href: "/cases/studio",
          image: { src: "/rooms/table.jpg", alt: "A calm room with a long stone table" },
        },
      ]}
      labels={{ read: "Read the case" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstringSmall-caps line above the heading
headingstringSection heading, rendered as an h2 through Text1
buttonActionButtonPill action beside the heading
studiesStudy[][]Case studies, two across from md
labels{ read?: string }{}Read link wording; the link is dropped when unset
classNamestringExtra classes for the outer <section>
ts
type Study = {
  client: string;
  sector: string;
  title: string;
  summary: string;
  result: { value: string; label: string };
  href: string;
  image: { src: string; alt: string };
};

type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

Behavior notes

  • The result block carries mt-auto, so both feet sit on the same line however uneven the summaries above them are; that is what makes the two figures comparable at a glance.
  • result.value is a free string, so "0", "58%" and "3x" all render as given with no parsing and no count-up.
  • Each card carries three links to the same case (the image, the title and the read link) rather than one wrapper, so the summary stays selectable and the heading keeps its own accessible name.
  • client and sector are printed either side of a dot as separate spans, so a long client name wraps without stranding the dot.
  • Each photograph owns its own scroll listener, so the two drift at their own moment as they reach the viewport.
  • The read link's arrow lifts only under motion-safe:, so the affordance is dropped for reduced motion while the link keeps working.
  • Titles are h3 under the section h2, and the grid is two across from md, so a third study wraps to a new row rather than compressing the pair.

More Showcase blocks

View all Showcase
PRO

showcase7

Screenshot with Testimonial Quote

Two-column section combining product image with large customer quote, author avatar, name, and role. Perfect for social proof sections alongside product visuals.

PRO

showcase5

Side-by-Side Competitor Comparison

Two-column comparison layout with product images, feature checklists, and visual differentiation between your product and competitors. Perfect for competitive positioning sections.

PRO

showcase45

Alternating Asset Rows

A showcase of alternating split rows, each pairing an image tile that floats a live product micro-asset with an eyebrow, a light heading, a paragraph, and a checked bullet list.

PRO

showcase46

Tabbed Product Tour

A tabbed showcase with an eyebrow over a hairline rule and a two-column heading, where each tab reveals a light title, checked bullets, and an image tile floating a live product micro-asset.

PRO

showcase36

Annotated Showcase

Browser-framed product screenshot with surrounding feature callouts.

PRO

showcase12

Features with Stats and Image

Two-column layout with key metrics bar, icon feature list, CTA button, and large product image. Perfect for enterprise feature sections highlighting performance and capabilities.