Skip to content

Testimonials

Testimonials Mosaic

Five client quotes on dark and light cards of two widths around a short looping video.

Layout and motion from the Kalme template — see it in context

Installation

$ npx shadcn@latest add https://framebrick.co/r/blocks/testimonials-mosaic.json

Usage

import { TestimonialsMosaic } from "@/components/testimonials-mosaic";

<TestimonialsMosaic
  title="What our clients say"
  video={{ src: "/video/studio.mp4", poster: "/video/studio.jpg" }}
  testimonials={[
    { quote: "They found the story in our numbers…", name: "Amelia Hart", company: "Brightline Studio", photo: "/people/amelia.jpg" },
  ]}
/>

Props

PropTypeDefaultDescription
labelstringTestimonialsSmall muted line above the heading.
title / leadstring—Heading (h2) and the lead beside it from 768px (up to 400px).
testimonials{ quote, name, company, photo?, rating?, logo? }[]5 quotesUp to five, in the mosaic's card places; rating out of 5 (default 5); the logo shows on the two wide cards.
video{ src, poster? }a Pexels clipMuted loop in the second place, decorative; the poster shows instead of it with reduced motion.
classNamestring—Classes for the <section>.
  • From 1024px a 7-column grid of two rows: dark (2 columns), video (2), light (3) / light (3), light (2), dark (2); two columns from 768px; one below.
  • Tiles keep Kalme's heights (320 / 303 / 355px) as a minimum, so a longer quote grows its row instead of overflowing.
  • Dark cards use the inverted surface (foreground), light cards the muted one. Each card is a <figure> with the quote in a <blockquote>.

AI prompt

Paste into v0, Lovable, Bolt or Claude to rebuild this block in your own project.

Create a React + Tailwind CSS block called TestimonialsMosaic (Next.js, client component).
- <section className="py-(--section-y)">, container mx-auto max-w-(--container) px-(--gutter), column gap-12.
- Split title: a small muted label and an h2 (font-heading text-h2 semibold); beside it from 768px (items-end) a muted lead up to 400px.
- Grid gap-5: 1 / 2 (768px) / 7 (1024px) columns; tiles at least 320 / 303 / 355px tall, rounded-xl. Order: quote 1 (dark, 2 columns), a muted
  looping video tile (2 columns, aria-hidden, paused on its poster with reduced motion), quotes 2 and 3 (light, 3 columns, with the company
  logo at the right when given), quote 4 (light, 2), quote 5 (dark, 2).
- Card (<figure>, p-5 / lg:p-7.5, justify-between): five 20px stars (role="img", "5 out of 5 stars") and the quote (text-lead) on top; at the
  bottom a 48px round photo beside the name (font-medium) and company (text-sm, 65%). Dark: bg-foreground text-background; light: bg-muted.
- Only shadcn variables and block tokens; plain <img>.

Be the first to know

Get new templates and components first

One short email when we release a template or a free component. No spam — unsubscribe anytime.

We use your email only for Framebrick updates. Privacy policy