Testimonials

Minimal Divided Testimonials

Plain testimonials: a heading above three quotes ruled apart, side by side on wide screens and stacked on narrow ones, each with a name and role. Theme tokens only, light and dark.

Free, MIT licenseOpen in Browse
import { Heading } from "@/components/editorial/heading"
import {
  Quote,
  QuoteAuthor,
  QuoteAuthorName,
  QuoteAuthorRole,
  QuoteFigure,
  QuoteGroup,
} from "@/components/editorial/quote"
import {
  Section,
  SectionContent,
  SectionHeader,
  SectionTitleGroup,
} from "@/components/editorial/section"

// The copy: change text here, not in the markup.
const COPY = {
  title: "What teams say",
} as const

const QUOTES = [
  {
    quote:
      "We stopped asking who owns what. It is written on the plan, next to the date.",
    name: "Anouk Brenner",
    role: "Product Manager, Starling Close",
  },
  {
    quote:
      "The handoff note replaced a meeting we had every Thursday for two years.",
    name: "Rafael Ortega",
    role: "Engineering Manager, Eclipse Avenue",
  },
  {
    quote:
      "Reviews finally end. Comments close when the change ships, and nothing lingers.",
    name: "Sun-hee Park",
    role: "Design Lead, Nordlys Gate",
  },
] as const

// divided draws a line between the quotes: side by side once the section
// is wide, stacked before that.
export default function MinimalTestimonials03() {
  return (
    <Section>
      <SectionHeader>
        <SectionTitleGroup>
          <Heading>{COPY.title}</Heading>
        </SectionTitleGroup>
      </SectionHeader>
      <SectionContent>
        <QuoteGroup cols={3} variant="divided">
          {QUOTES.map((item) => (
            <QuoteFigure key={item.name}>
              <Quote>
                <p>{item.quote}</p>
              </Quote>
              <QuoteAuthor>
                <QuoteAuthorName>{item.name}</QuoteAuthorName>
                <QuoteAuthorRole>{item.role}</QuoteAuthorRole>
              </QuoteAuthor>
            </QuoteFigure>
          ))}
        </QuoteGroup>
      </SectionContent>
    </Section>
  )
}

Installation

pnpm dlx shadcn add @01orbital/minimal-testimonials-03
npx shadcn add @01orbital/minimal-testimonials-03
yarn shadcn add @01orbital/minimal-testimonials-03
bunx --bun shadcn add @01orbital/minimal-testimonials-03

Free under the MIT license. Add the @01orbital registry to components.json once (install guide), then run the command.

It lands at components/blocks/testimonials/minimal-testimonials-03/index.tsx, as source you own and edit.

Usage

import MinimalTestimonials03 from "@/components/blocks/testimonials/minimal-testimonials-03"

export default function Example() {
  return <MinimalTestimonials03 />
}

Dependencies

Registry pieces it installs with it: