# Minimal Testimonial Grid

> Plain testimonials: a heading above three quotes on muted tiles, each with a name and role. Theme tokens only, light and dark.

A shadcn/ui block from the [@01orbital](https://01orbital.dev/?utm_source=shadcn.exchange) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/01orbital/minimal-testimonials-02).

- Page, with a live preview: https://shadcn.exchange/r/01orbital/minimal-testimonials-02
- Screenshot: https://shadcn.exchange/shot/01orbital/minimal-testimonials-02/light.png
- Registry item: https://01orbital.dev/r/minimal-testimonials-02.json
- Categories: testimonials
- Listed: 2026-11-01, source last changed 2026-11-01

## Install

```bash
npx shadcn@latest add https://shadcn.exchange/r/01orbital/minimal-testimonials-02.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- Registry items: `@01orbital/heading`, `@01orbital/quote`, `@01orbital/section`

## Files

### `blocks/testimonials/minimal-testimonials-02/index.tsx`

```tsx
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: "Teams that ship with Orbcore",
} as const

const QUOTES = [
  {
    quote:
      "Every decision now lives next to the work it changed. New hires catch up in an afternoon.",
    name: "Tomas Vey",
    role: "Engineering Lead, Halo Street",
  },
  {
    quote:
      "Our Monday meeting went from an hour to ten minutes, because the digest already said it.",
    name: "Ines Halloran",
    role: "Operations, Meridian Way",
  },
  {
    quote:
      "Review comments close when the change ships. Nothing sits open for weeks any more.",
    name: "Elias Quill",
    role: "Design Director, Comet Lane",
  },
] as const

export default function MinimalTestimonials02() {
  return (
    <Section>
      <SectionHeader>
        <SectionTitleGroup>
          <Heading>{COPY.title}</Heading>
        </SectionTitleGroup>
      </SectionHeader>
      <SectionContent>
        <QuoteGroup cols={3}>
          {QUOTES.map((item) => (
            <QuoteFigure key={item.name} variant="muted">
              <Quote>
                <p>{item.quote}</p>
              </Quote>
              <QuoteAuthor>
                <QuoteAuthorName>{item.name}</QuoteAuthorName>
                <QuoteAuthorRole>{item.role}</QuoteAuthorRole>
              </QuoteAuthor>
            </QuoteFigure>
          ))}
        </QuoteGroup>
      </SectionContent>
    </Section>
  )
}
```
