Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Testimonials With CTA Block for React

Two customer quotes led by the result each one measured, in a hairline band with a divider, then a card in card whose headline repeats the larger result and whose Shine Button is the one primary action.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Let two customers make the pitch, then ask. Two quotes share one hairline band, split by a divider that meets the top rule with a + mark, each opening with the number its team measured, 62% faster builds and 41% fewer failed deploys for Hullmark, a fictional build cache, and then the person's own words and who they are. Below them a card in card holds the ask: a raised panel inside a tinted shell with + marks on its corners, its headline repeating the larger of the two results, one Shine Button saying "Start free trial" and a quiet outline button for "See how it works". The headline is written from the same data as the quotes, so it can't drift. On a phone the two quotes stack, split by a rule, and the whole block ends within two screens. It's built from Avatar, Button, Shine Button and the Guides lines, with CSS transitions only and your theme's tokens. For the end of a landing page or a customers page, where the proof leads straight into the next step.

FAQ

How do I change the quotes and results?

Edit the STORIES array at the top of the file. Each story has the quote, the speaker's name, initials, role and company, and a result made of a percent and a label that completes the sentence ("faster builds", "fewer failed deploys"). Keep the result something the customer measured and agreed to share, and use their exact words for the quote.

How does the headline pick its result?

It takes the story with the largest percent, so the call to action always repeats the strongest number the page has actually shown. Add a third story and the headline still follows the data; nothing in the panel is typed by hand.

How do I connect the buttons?

Both are real links: point their href at your sign-up, trial or product page. The label of the main one says what the visitor gets rather than "Learn more". The Shine Button is the block's only primary control; the second is an outline button. Each button renders the link it's given with render, with nativeButton={false}.

How do screen readers read it?

The section's h2 introduces two quotes in a list, each a figure with a blockquote and a figcaption; the result is the first line of its cell, written as "62% faster builds". The panel's headline is an h3 followed by two links. The avatars are decorative because each name is written beside them, and the + marks and lines are hidden.

Does it work in right-to-left languages?

Yes. The band, the divider and the panel follow the reading direction, and the percentages sit in a bdi so they keep their order. The quotes keep their quotation marks at the ends of the sentence.

How does it adapt to small screens?

The two quotes stack in one column below md, with a rule and + marks between them, and in the panel the headline sits above the buttons below lg, so everything reads at 320px with no horizontal scroll.

  • Pro

    A proof bar for a help-desk app: four linked figures (customers, review score, retention, reply time) with a small greyscale picture each, as one band with shared hairlines and + marks at the rails, then the quote that explains them, with a Shine Button in the header row.

  • Pro

    Trust Badges Testimonials

    Ratings and reviews

    A scoreboard of four review sources for a bookkeeping app: a weighted average beside the heading, then a band of four cells on shared hairlines, each with a score, partly filled stars, its review count, one reviewer line and a link.

  • Pro

    Eight customer wordmarks of an inventory app as tabs in a bordered grid that shares its hairlines: choose a company to read its quote, who said it and the one result it points to, in a raised card inside a tinted shell, under a header with a Shine Button.

  • Pro

    Testimonial Form

    Collect a review

    A form for writing your own testimonial about Quill, in a split page column: name, role, star rating, a quote with a character counter and a permission switch on one side, a live preview card in a card on the other, and a Shine Button to send.

  • Pro

    A card-in-card call to action built on a rating summary: a headline and a Shine Button over a band with a big score and foreground stars beside a five-to-one star histogram, all figures worked out from the counts.

  • Pro

    A compact start-aligned hero with a headline, a Shine Button and an outline action over a closing band that holds one customer's quote, large, beside their rating, name, role and the number it is about.