Skip to main content
Clever Ops

Testimonial Annotated

One long-form customer story read like an annotated manuscript, numbered mono metric callouts in the margin wire to the exact sentences that earned them.

Preview & code

Loading Testimonial Annotated preview

Installation

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

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

Usage

tsx
import { TestimonialAnnotated } from '@/components/blocks/testimonial-annotated'
Exampletsx
import { TestimonialAnnotated } from '@/components/blocks/testimonial-annotated'

export default function TestimonialAnnotatedDemo() {
  return (
    <div className="mx-auto max-w-6xl">
      <TestimonialAnnotated
        eyebrow="Customer story"
        heading="How Fieldline cut incident time in half"
        story={[
          {
            text: 'Before Fieldline, our on-call rotation lived in a shared spreadsheet and three Slack channels.',
          },
          {
            text: 'Escalations took a median of forty-two minutes just to find the right owner.',
            annotation: { value: '−42%', label: 'MTTR after rollout' },
          },
          {
            text: 'We wired runbooks to the same graph as our services, so every page lands with context already open.',
          },
          {
            text: 'In the first quarter we closed seventy-one of seventy-four severity-one tickets inside the SLO window.',
            annotation: { value: '71/74', label: 'Sev-1 inside SLO' },
          },
          {
            text: 'The team stopped heroics and started shipping the quiet fixes that keep nights boring.',
            annotation: { value: '3.1×', label: 'runbook reuse rate' },
          },
        ]}
        author="Elena Vasquez"
        jobTitle="Head of Platform"
        company="Fieldline"
      />
    </div>
  )
}

API reference

TestimonialAnnotated accepts the following props.

PropTypeDefaultDescription
eyebrowstring'Customer story'
heading*stringsection heading, e.g. 'How Fieldline cut incident time in half'
story*TestimonialAnnotatedSentence[]sentences in reading order; entries with annotation get a numbered mark
author*string
jobTitlestring
companystring

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

Referenced types

Typestsx
export interface TestimonialAnnotatedSentence {
  text: string
  annotation?: TestimonialAnnotatedAnnotation
}

export interface TestimonialAnnotatedAnnotation {
  value: string
  label: string
}

Frequently asked questions

How do I install the Testimonial Annotated 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-annotated`. 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 Annotated require?

Testimonial Annotated 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 Annotated 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