Skip to main content
Clever Ops

Testimonial Audio Strip

Podcast-style quote strip, deterministic SVG waveform, mono timestamp and a play affordance that hands playback to an onPlay callback. Ships zero audio dependencies.

Preview & code

Loading Testimonial Audio Strip preview

Installation

pnpm dlx shadcn@latest add @cleverui/testimonial-audio-strip

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

Usage

tsx
import { TestimonialAudioStrip } from '@/components/ui/testimonial-audio-strip'
Exampletsx
'use client'

import { useState } from 'react'
import { TestimonialAudioStrip } from '@/components/ui/testimonial-audio-strip'

export default function TestimonialAudioStripDemo() {
  const [playing, setPlaying] = useState(false)

  return (
    <div className="mx-auto flex max-w-3xl items-center px-4 py-16 sm:px-6 sm:py-20">
      <TestimonialAudioStrip
        episode="Ep. 42, Scaling on-call"
        quote="The first week we stopped paging humans for disk pressure, our night shift went quiet. That silence is the product."
        author="Mara Chen"
        jobTitle="Staff SRE, Northline"
        timestamp="14:32"
        duration="38:05"
        seed={7}
        isPlaying={playing}
        onPlay={() => setPlaying((p) => !p)}
        className="w-full"
      />
    </div>
  )
}

API reference

TestimonialAudioStrip accepts the following props.

PropTypeDefaultDescription
quote*stringthe pull-quote lifted from the episode
author*string
jobTitlestring
episodestring'Ep. 42, Scaling on-call'mono episode micro-label above the quote
timestampstring'14:32'mono position label, where in the episode the quote lands
durationstring'38:05'total episode length shown beside the timestamp
isPlayingbooleanfalsecontrolled playing state, swaps the glyph to Pause and lets the waveform move
onPlay() => voidinvoked when the play control is activated, wire any player; no audio element ships
seednumber7seed for the deterministic waveform bars, same seed, same waveform, SSR-safe

…plus everything from Omit< React.HTMLAttributes<HTMLElement>, 'onDrag' | 'onDragStart' | 'onDragEnd' | 'onAnimationStart' >: className, event handlers, aria attributes and the rest pass straight through.

Frequently asked questions

How do I install the Testimonial Audio Strip 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-audio-strip`. 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 Audio Strip require?

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

Can I theme Testimonial Audio Strip 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