Elements

Components / Website

Story Grid

A three-column editorial mosaic inspired by the customer story index on Mode's customers page. Featured tiles span two columns and include an image; standard tiles are text-only with a logo mark. Distinct from Bento : this layout follows a simple row flow rather than asymmetric cell spans.

Example

The default sample mirrors Mode's rhythm: featured + standard on row one, three standards on row two, standard + featured on row three.

Installation

bash
npx shadcn add https://raw.githubusercontent.com/levi-putna/elements/main/registry/story-grid/registry.json

Usage

tsx
import {
  StoryGrid,
  StoryGridFeatured,
  StoryGridCard,
  StoryGridLogo,
} from "@/components/ui/story-grid"

export function CustomerStories() {
  return (
    <StoryGrid>
      <StoryGridFeatured
        href="/stories/harbourview"
        title="Harbourview Towers transforms committee reporting across 120 lots"
        logo={<StoryGridLogo>Harbourview</StoryGridLogo>}
        imageSrc="/img/building/1.webp"
        imageAlt="Harbourview Towers committee meeting"
      />
      <StoryGridCard
        href="/stories/coastal"
        title="Coastal Strata builds self-serve owner portals"
        logo={<StoryGridLogo>Coastal</StoryGridLogo>}
      />
      {/* …more cards */}
    </StoryGrid>
  )
}

StoryGrid props

PropTypeDefaultDescription
gap"sm" | "md" | "lg""md"Gap between cards.
classNamestring-Additional classes on the grid container.

StoryGridCard props

PropTypeDefaultDescription
titlestring-Story headline: Young Serif, anchored to the top.
logoReactNode-Company mark anchored to the bottom. Use StoryGridLogo.
hrefstring-Link destination: the entire card is clickable.
classNamestring-Additional classes on the anchor.

StoryGridFeatured props

PropTypeDefaultDescription
titlestring-Story headline: anchored to the bottom of the copy column.
logoReactNode-Company mark at the top of the copy column.
imageSrcstring-Image URL for the right-hand column.
imageAltstring-Accessible alt text for the image.
linkLabelstring"Read more"Trailing link label with chevron.
hrefstring-Link destination: the entire card is clickable.
classNamestring-Additional classes on the anchor.