Skip to main content
Clever Ops

Testimonial Roster

Roster-driven testimonials, activate a name row with its monogram to swap the oversized quote on stage. Photo-free, random-access social proof for React and Tailwind pages.

Preview & code

Loading Testimonial Roster preview

Installation

pnpm dlx shadcn@latest add @cleverui/testimonial-roster

Requires the @cleverui registry in your components.json, a one-off, two-line setup.

Usage

tsx
import { TestimonialRoster } from '@/components/blocks/testimonial-roster'
Exampletsx
import { TestimonialRoster } from '@/components/blocks/testimonial-roster'

export default function TestimonialRosterDemo() {
  return (
    <div className="mx-auto max-w-6xl">
      <TestimonialRoster
        eyebrow="Who's saying this"
        heading="Answered by the people who run it"
        initialIndex={0}
        testimonials={[
          {
            quote:
              'We replaced three status tools with one board. On-call stopped hunting for owners and started closing incidents inside the hour.',
            author: 'Mara Chen',
            jobTitle: 'VP Engineering',
            company: 'Northline',
          },
          {
            quote:
              'The roster is the product for us, every page lands with the runbook already open. First quarter, seventy-one of seventy-four sev-1s hit the SLO.',
            author: 'Jonah Okonkwo',
            jobTitle: 'SRE Lead',
            company: 'Fieldline',
          },
          {
            quote:
              'I pitched it to the board as a quiet ops bet. Six months later it is the system of record for every customer-facing outage we ship through.',
            author: 'Priya Natarajan',
            jobTitle: 'CTO',
            company: 'Harborstack',
          },
          {
            quote:
              'No photos, no fluff, just the people who signed the invoices. Our buyers recognize themselves in the roster before they read a single metric.',
            author: 'Ellis Ward',
            jobTitle: 'Head of Customer Ops',
            company: 'Parcelwright',
          },
        ]}
      />
    </div>
  )
}

API reference

TestimonialRoster accepts the following props.

PropTypeDefaultDescription
eyebrowstring"Who's saying this"
heading*stringsection heading, e.g. 'Answered by the people who run it'
testimonials*TestimonialRosterItem[]3-6 voices; roster lists every author, stage shows one quote
initialIndexnumber0which voice holds the stage on load

…plus everything from React.HTMLAttributes<HTMLElement>: className, event handlers, aria attributes and the rest pass straight through.

Referenced types

Typestsx
export interface TestimonialRosterItem {
  quote: string
  author: string
  jobTitle?: string
  company?: string
}

Frequently asked questions

How do I install the Testimonial Roster component?

Register the @cleverui registry in your components.json ("@cleverui": "https://cleverops.com.au/r/{name}.json"), then run `npx shadcn@latest add @cleverui/testimonial-roster`. The shadcn CLI copies the source into your project, you own the code from that point. You can also copy the source directly from this page.

What dependencies does Testimonial Roster require?

Testimonial Roster uses motion on top of React and Tailwind CSS. You don't need to install it manually, the shadcn CLI resolves and installs npm dependencies automatically when you add the component.

Can I theme Testimonial Roster to match my brand?

Yes. The component is styled entirely with Tailwind utilities over standard design tokens (primary, background, muted, border), so it inherits your existing shadcn/ui theme automatically. Change your CSS variables and the component follows, no source edits needed for palette, radius, or fonts.

Want this built for you?

CleverUI is built by the Clever Ops web team. If you'd rather ship a hand-coded, fast, custom website than assemble one, we build them for Australian businesses every week.

Explore web development services