A heading over rows of quotes that drift past in opposite directions and slow down under the pointer.
From teams that build with it every day.
“The motion feels considered instead of bolted on.”
“We shipped the dashboard almost untouched.”
“It dropped into our theme without a single override.”
“I own the code, so upgrading is a diff I can read.”
“Keyboard support was already there when I went looking.”
“Empty and error states came for free. That never happens.”
pnpm dlx shadcn@latest add @latheui/testimonial-wallPart of Lathe Pro. Set up your project once with your license key: npx latheui init --key <key>. See Lathe Pro.
Testimonial Wall is part of Lathe Pro
The preview is live and free to try. The source, the install and every assembly come with Pro: $79 once, with lifetime updates.
Depends on
Also accepts native section attributes.
| Prop | Type | Default | Description |
|---|---|---|---|
| title | string | "What people say" | Heading and accessible name of the block. |
| description | string | — | Line under the heading. |
| items | Testimonial[] | sample quotes | What people said. Dealt out across the rows in order. |
| rows | 1 | 2 | 3 | 2 | Rows of quotes. Neighbouring rows travel in opposite directions. |
| speed | number | 28 | Pixels per second the rows travel. |
| Prop | Type | Default | Description |
|---|---|---|---|
| id* (required) | string | — | Unique id. |
| quote* (required) | string | — | What they said, without quotation marks. |
| name* (required) | string | — | Who said it. Also gives the avatar its initials. |
| role | string | — | Role and company. |
| avatar | string | — | Image URL. Initials are shown without one. |
<TestimonialWall
title="Loved by teams"
rows={3}
speed={36}
items={quotes.map((quote) => ({
id: quote.id,
quote: quote.body,
name: quote.author,
role: `${quote.role}, ${quote.company}`,
avatar: quote.photoUrl,
}))}
/>