Testimonial Slider
ComponentsTestimonial Slider
SectionsNew

Testimonial Slider

Give client stories room to speak. A portrait-led testimonial section with clear controls and no automatic cycling.

USE IT FORClient reviewsCustomer storiesHomepage proof
React + CSS
EXAMPLE CLIENT STORIES

Real words. Better work.

Customers can find the right bag and see the details that matter. The storefront finally feels as considered as the products.

Mira PatelFounder, KIN

Browse three example client stories.

Live component. Go ahead, interact.
01

Installation

Run this in your shadcn-configured React project. The component and stylesheet are added together.

TERMINAL
npx shadcn@latest add http://localhost:5173/r/testimonial-slider.json

This command uses the current site address. For localhost, keep this preview running on the same computer. Files follow your configured components alias.

02

Usage

Import the component and make the details your own.

TypeScript
import { TestimonialSlider } from '@/components/anticraft/TestimonialSlider';

export function Example() {
  return (
    <TestimonialSlider
      title="Good words. Real partnerships."
      defaultValue="mira"
      items={[
        { id: 'mira', quote: 'Our story finally feels like us. The new website makes it easy for people to find their space.', name: 'Mira Patel', role: 'Founder', company: 'KIN', portrait: <div style={{ display: 'grid', placeItems: 'center', height: '100%', background: '#becbb0', fontSize: 80 }}>M</div> },
        { id: 'daniel', quote: 'A complicated product became a clear first impression. Every feature now has a purpose.', name: 'Daniel Park', role: 'Product lead', company: 'Folio' },
        { id: 'sofia', quote: 'The work is considered from the first page to the smallest detail. Each project has room to shine.', name: 'Sofia Reed', role: 'Creative director', company: 'Forma' },
      ]}
    />
  );
}
03

Props

PropTypeDefaultDescription
itemsTestimonialSliderItem[]RequiredClient stories with a unique id, quote, name, and role. Optional company, decorative portrait, and metric fields add context. An empty list shows a quiet placeholder without controls.
items[].portraitReactNodeName initialDecorative image or artwork. It is hidden from assistive technology because the adjacent caption identifies the speaker. Keep this content free of links or controls.
items[].metric{ value: string; label: string }undefinedAn optional supporting result displayed below the speaker details. Use a substantiated value and a clear label for real client work.
titlestring'Good words. Real partnerships.'A visible heading that labels the section. Set an empty string to omit the heading; the section keeps its Client stories accessible label.
defaultValuestringFirst itemThe id selected on the initial render. An unknown or removed id falls back to the first available story.
onValueChange(id: string) => voidundefinedCalled after a visitor chooses a different story. Supply this callback from a Client Component in Next.js.
classNamestring''Additional classes. Customize --ac-proof-surface, --ac-proof-ink, --ac-proof-muted, --ac-proof-accent, and --ac-proof-portrait on this element.
04

Motion & accessibility

Considered by default.

Previous and next buttons wrap through the stories, and labeled selector dots jump directly to a speaker. Each control works with normal Tab navigation and Enter or Space. Only the selected quote is rendered, and a polite live region announces the newly chosen story. A short entrance fade runs on a visitor’s selection; reduced motion removes it. There is no automatic advance, swipe requirement, or global keyboard interception. The component reflows to a compact portrait and caption below the quote when its container is narrow. Example client names, companies, and quotes are fictional.

Use semantic content and meaningful labels in your composition. Check contrast and keyboard behavior with your own styles and content.

05

Inspiration

Whipsaw’s client-proof section pairs quotations with portraits and professional roles. Anticraft adapts that useful content structure with original artwork, fictional example stories, and independently designed previous, next, and direct-selection controls.

Visit Whipsaw — client stories

The component source and demo artwork are original to Anticraft UI. The linked site is the design or content reference.