# Grid Of Quotes

> A grid that arranges several short client quotes side by side with names and roles. Use it to gather feedback from many clients in one compact section.

A shadcn/ui block from the [@shadcn-ui-blocks](https://www.shadcn-ui-blocks.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/shadcn-ui-blocks/portfolio-portfolio-quote-and-feedback-grid-of-quotes).

- Page, with a live preview: https://shadcn.exchange/r/shadcn-ui-blocks/portfolio-portfolio-quote-and-feedback-grid-of-quotes
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/shadcn-ui-blocks/portfolio-portfolio-quote-and-feedback-grid-of-quotes-light-d2aa1855bf5ac6f0.png
- Registry item: https://www.shadcn-ui-blocks.com/r/portfolio-portfolio-quote-and-feedback-grid-of-quotes.json
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://www.shadcn-ui-blocks.com/r/portfolio-portfolio-quote-and-feedback-grid-of-quotes.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Files

### `components/blocks/portfolio/portfolio-quote-and-feedback/grid-of-quotes.tsx`

```tsx
export default function GridOfQuotes() {
  const testimonials = [
    {
      quote:
        "The team delivered an exceptional design that perfectly aligned with our brand values. Couldn't be happier with the results.",
      name: 'Michael Torres',
      title: 'Founder, Elevation Studios',
      image:
        'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?q=80&w=1000&auto=format&fit=crop',
    },
    {
      quote:
        'Working with this studio completely transformed our online presence. Our conversion rates have increased by 40% since launch.',
      name: 'Priya Sharma',
      title: 'CMO, TechVision',
      image:
        'https://images.unsplash.com/photo-1573497019940-1c28c88b4f3e?q=80&w=1000&auto=format&fit=crop',
    },
    {
      quote:
        'Incredibly responsive and professional. They took the time to understand our goals and delivered beyond expectations.',
      name: 'David Kim',
      title: 'Project Manager, Blueprint',
      image:
        'https://images.unsplash.com/photo-1560250097-0b93528c311a?q=80&w=1000&auto=format&fit=crop',
    },
    {
      quote:
        "Their attention to detail and creative problem-solving made all the difference in our project's success.",
      name: 'Emma Wilson',
      title: 'Creative Director, Stellar',
      image:
        'https://images.unsplash.com/photo-1534528741775-53994a69daeb?q=80&w=1000&auto=format&fit=crop',
    },
  ];

  return (
    <section className="w-full py-12 md:py-24 lg:py-32">
      <div className="container mx-auto px-4 md:px-6">
        <div className="flex flex-col items-center justify-center space-y-4 text-center">
          <div className="space-y-2">
            <h2 className="text-3xl font-bold tracking-tighter sm:text-4xl md:text-5xl">
              What Our <span className="text-primary">Clients</span> Say
            </h2>
            <p className="text-muted-foreground mx-auto max-w-[700px] md:text-xl/relaxed">
              Testimonials from clients we&apos;ve had the pleasure of working
              with
            </p>
          </div>

          <div className="mt-10 grid w-full max-w-6xl grid-cols-1 gap-6 md:grid-cols-2">
            {testimonials.map((testimonial, index) => (
              <div
                key={index}
                className="bg-muted/40 border-border/40 hover:border-primary/20 hover:bg-muted/60 flex h-full flex-col rounded-xl border p-6 transition-all"
              >
                <div className="flex-1">
                  <blockquote className="relative z-10 mb-4">
                    <p className="text-lg leading-relaxed">
                      {testimonial.quote}
                    </p>
                  </blockquote>
                </div>
                <div className="border-border/30 flex items-center gap-4 border-t pt-4 text-start">
                  <div className="relative h-10 w-10 overflow-hidden rounded-full">
                    <img
                      src={testimonial.image}
                      alt={testimonial.name}
                      className="object-cover"
                    />
                  </div>
                  <div>
                    <p className="font-medium">{testimonial.name}</p>
                    <p className="text-muted-foreground text-sm">
                      {testimonial.title}
                    </p>
                  </div>
                </div>
              </div>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}
```
