Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Expandable Profile Testimonials Block for React

Three customer cells that expand in place into a profile, each a hairline box with a + mark, under a compact header with a Shine Button: a two-line quote when closed, the whole quote plus industry, team size, plan and time as a customer when open.

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

A testimonials section that answers "who is this person, really?" without sending visitors anywhere, for React with Base UI. A compact header names the section and carries one Shine Button, "Browse all customer profiles", at its end on wide screens. Under it, three cells sit side by side, each a hairline box that runs a little past its corners with a + mark, showing the company, the first two lines of a quote and the speaker. A "View profile" button opens the cell downward: the quote runs in full and a short profile appears beneath it, listing industry, team size, plan and how long they have been a customer of Ostler, a fictional client-operations tool. Each cell opens on its own, and the first one starts open so the poster shows what a profile looks like. On a phone the cells stack with the first open. It's built from Collapsible, Data List, Avatar, Guides, Button and Shine Button, with CSS transitions only and your theme's tokens. For pricing and landing pages where buyers want to find a company like theirs.

FAQ

How do I change the customers and their profile facts?

Edit the CUSTOMERS array at the top of the file. Each entry holds the quote, the speaker and the four profile facts: industry, teamSize, plan and customerFor. The facts are plain strings, so write them as you would say them ("120 people", "14 months") and keep them true; they are the part visitors will compare themselves against.

Do the cells open one at a time?

No, each cell keeps its own open state, so a visitor can open all three to compare. Opening a cell makes only that cell taller, and the cells sit at the top of their grid so the others don't stretch. To make them behave like an accordion, lift the state into the section and keep one open id.

How does the button work with a keyboard and a screen reader?

It's a real button that announces whether the cell is open, and its name includes the speaker ("View profile, Ines Duarte") so three identical labels are told apart. The quote is a figure with a blockquote and a caption. The profile is a description list, so each label is read with its value.

Is the quote cut off for screen readers when the cell is closed?

No. The full quote is always in the page; the two-line preview is only a visual clamp, which the open state lifts. Nobody reads a shorter or a different text than a sighted visitor.

Does it work in right-to-left languages?

Yes. The button, the labels and the avatar row use logical sides, the chevron turns the same way in either direction, and quotes and values with units sit in a bdi so they keep their order. The + marks sit on the start corner of each cell.

What happens with reduced motion?

The section fades up once on load and each cell opens with a short height transition. With reduced motion the fade is skipped and the cell opens at once. The Shine Button's light fades in instead of sweeping.

How is the Shine Button built on each library?

The header's button is the block's only primary control, a link to your customer directory. On Base UI, the button renders its link with render={<a href="#" />} and nativeButton={false}.

  • Pro

    Customer stories as accordion rows beside a side header, on the page's drafting lines: each row shows the person, a one-line summary and a rating, and opens one at a time to read the full quote.

  • Pro

    Four customer quotes in a two-column grid, each cut to three lines with a Read more button that lifts the cut and turns into Show less.

  • Pro

    Three long reviews of a bookkeeping app beside a rail of proof: the average rating and its spread, with Helpful and Not helpful votes whose counts change as you choose.

  • Pro

    A centred statement: one customer quote above a stack of team avatars that is a button, fanning open a roster of six teams in one hairline band, each with a name, a role and a one-line verdict.

  • Pro

    A centred showcase hero with a headline, a Shine Button and an outline action over a wall of six customer quotes in cells that share their hairlines, a snap carousel on a phone.

  • Pro

    Flip Card Testimonials

    Expand, flip, pin

    Three testimonial cells in one hairline band that flip in 3D from a short quote to the results behind it, one open at a time, each driven by a toggle button.