UIPackage
Menu

Framework

Change language

Boilerplate repo

Testimonial Masonry Verified Grid

blockmarketing

Masonry grid of verified engineer endorsements with role filters, star ratings, avatar badges, and quantifiable impact metrics.

Also available for Vue ->

Installation

$npx shadcn@latest add https://uipkge.dev/r/react/testimonial-masonry-verified-grid.json
Named registry:npx shadcn@latest add @uipkge-react/testimonial-masonry-verified-gridInstalls to:components/blocks/

Variants

Loading interactive previews…

Props

NameType / ValuesDefaultRequired
classNamestringoptional

Schema

Type aliases exported from this item's source. Use these to shape the data you pass in.

Testimonial
interface Testimonial {
  id: string
  name: string
  role: string
  roleCategory: 'frontend' | 'founder' | 'design-eng'
  company: string
  avatar: string
  handle: string
  verifiedSource: 'Twitter' | 'GitHub' | 'LinkedIn'
  quote: string
  metricBadge?: string
  starCount: number
}

npm dependencies

Includes

Files installed (1)

  • components/blocks/TestimonialMasonryVerifiedGrid.tsx9.9 kB
    'use client'
    
    import * as React from 'react'
    import { CheckCircle2, Star } from 'lucide-react'
    import { Badge } from '@/components/ui/badge'
    import { Card } from '@/components/ui/card'
    import { cn } from '@/lib/utils'
    
    type RoleFilter = 'all' | 'frontend' | 'founder' | 'design-eng'
    
    interface Testimonial {
      id: string
      name: string
      role: string
      roleCategory: 'frontend' | 'founder' | 'design-eng'
      company: string
      avatar: string
      handle: string
      verifiedSource: 'Twitter' | 'GitHub' | 'LinkedIn'
      quote: string
      metricBadge?: string
      starCount: number
    }
    
    const testimonials: Testimonial[] = [
      {
        id: '1',
        name: 'Alexandre Rivière',
        role: 'Principal Design Engineer',
        roleCategory: 'design-eng',
        company: 'Linear Ecosystem',
        avatar: 'https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=150&auto=format&fit=crop&q=80',
        handle: '@alex_riviere',
        verifiedSource: 'Twitter',
        quote:
          'The unbundled component model completely cured our team from npm dependency fatigue. We get raw SFCs and TSX with exact Tailwind v4 token alignments. Zero wrapper bloat, 100% code ownership.',
        metricBadge: '4.2x Faster Ship Velocity',
        starCount: 5,
      },
      {
        id: '2',
        name: 'Sarah Chen',
        role: 'VP of Engineering',
        roleCategory: 'founder',
        company: 'ScaleDev AI',
        avatar: 'https://images.unsplash.com/photo-1580489944761-15a19d654956?w=150&auto=format&fit=crop&q=80',
        handle: '@schen_ai',
        verifiedSource: 'GitHub',
        quote:
          'We had severe bundle bloat with our previous UI package (over 500kB of unused JS). Switching to UIPKGE reduced our initial bundle to 38kB and solved our INP scores overnight.',
        metricBadge: '-88% Bundle Size',
        starCount: 5,
      },
      {
        id: '3',
        name: 'Marcus Vance',
        role: 'Staff Frontend Architect',
        roleCategory: 'frontend',
        company: 'HyperQubit Cloud',
        avatar: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=150&auto=format&fit=crop&q=80',
        handle: '@marcus_vance',
        verifiedSource: 'Twitter',
        quote:
          'Dual-framework parity is not a gimmick here—it is mathematically verified. We maintain a Nuxt 3 admin console and Next.js customer portal with identical design tokens and micro-interactions.',
        metricBadge: '100% Token Parity',
        starCount: 5,
      },
      {
        id: '4',
        name: 'Elena Rostova',
        role: 'Head of Product Design',
        roleCategory: 'design-eng',
        company: 'Fintech Velocity',
        avatar: 'https://images.unsplash.com/photo-1517841905240-472988babdf9?w=150&auto=format&fit=crop&q=80',
        handle: '@elena_craft',
        verifiedSource: 'GitHub',
        quote:
          'The spring physics and micro-interactions match Linear and Raycast levels of craft. No arbitrary sub-12px micro-text or sloppy contrast issues.',
        metricBadge: 'WCAG AA AA Certified',
        starCount: 5,
      },
      {
        id: '5',
        name: 'David Kim',
        role: 'Founder & CTO',
        roleCategory: 'founder',
        company: 'PulseOps',
        avatar: 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=150&auto=format&fit=crop&q=80',
        handle: '@dkim_ops',
        verifiedSource: 'Twitter',
        quote:
          'Being able to run `npx shadcn-vue add` and have clean, pristine components in our git repository is the single biggest DX breakthrough since Vite.',
        metricBadge: 'Zero Upstream Lock-in',
        starCount: 5,
      },
      {
        id: '6',
        name: 'Liam O’Connor',
        role: 'Lead UI Engineer',
        roleCategory: 'frontend',
        company: 'Starlight Media',
        avatar: 'https://images.unsplash.com/photo-1522075469751-3a6694fb2f61?w=150&auto=format&fit=crop&q=80',
        handle: '@liam_dev',
        verifiedSource: 'GitHub',
        quote:
          'The marketing blocks are actually functional workbenches with live sliders, real SVG telemetry sparklines, and zero dummy shapes. Huge time saver.',
        metricBadge: '450+ Verified Blocks',
        starCount: 5,
      },
    ]
    
    export interface TestimonialMasonryVerifiedGridProps {
      className?: string
    }
    
    export function TestimonialMasonryVerifiedGrid({ className }: TestimonialMasonryVerifiedGridProps) {
      const [activeFilter, setActiveFilter] = React.useState<RoleFilter>('all')
    
      const filteredTestimonials = React.useMemo(() => {
        if (activeFilter === 'all') return testimonials
        return testimonials.filter((t) => t.roleCategory === activeFilter)
      }, [activeFilter])
    
      return (
        <section
          data-slot="testimonial-masonry-verified-grid"
          className={cn('bg-background relative overflow-hidden px-4 py-16 sm:px-6 sm:py-24 lg:px-8', className)}
        >
          <div className="mx-auto max-w-7xl space-y-12">
            {/* Section Header */}
            <div className="mx-auto max-w-3xl space-y-4 text-center">
              <Badge variant="secondary" className="gap-1.5 px-3 py-1 font-mono text-xs shadow-xs">
                <Star className="fill-warning text-warning size-3.5" />
                Verified Engineer Endorsements
              </Badge>
              <h2 className="text-foreground text-3xl font-bold tracking-tight sm:text-4xl">
                Loved by design engineers and CTOs worldwide.
              </h2>
              <p className="text-muted-foreground text-base">
                Real feedback from engineers who dumped monolithic npm packages for unbundled code ownership.
              </p>
    
              {/* Category Filters */}
              <div className="flex flex-wrap items-center justify-center gap-2 pt-2">
                <button
                  type="button"
                  className={cn(
                    'rounded-lg border px-3.5 py-1 font-mono text-xs transition-colors',
                    activeFilter === 'all'
                      ? 'border-primary bg-primary text-primary-foreground font-semibold shadow-xs'
                      : 'border-border bg-card text-muted-foreground hover:text-foreground',
                  )}
                  onClick={() => setActiveFilter('all')}
                >
                  All Perspectives ({testimonials.length})
                </button>
                <button
                  type="button"
                  className={cn(
                    'rounded-lg border px-3.5 py-1 font-mono text-xs transition-colors',
                    activeFilter === 'design-eng'
                      ? 'border-primary bg-primary text-primary-foreground font-semibold shadow-xs'
                      : 'border-border bg-card text-muted-foreground hover:text-foreground',
                  )}
                  onClick={() => setActiveFilter('design-eng')}
                >
                  Design Engineers
                </button>
                <button
                  type="button"
                  className={cn(
                    'rounded-lg border px-3.5 py-1 font-mono text-xs transition-colors',
                    activeFilter === 'frontend'
                      ? 'border-primary bg-primary text-primary-foreground font-semibold shadow-xs'
                      : 'border-border bg-card text-muted-foreground hover:text-foreground',
                  )}
                  onClick={() => setActiveFilter('frontend')}
                >
                  Frontend Architects
                </button>
                <button
                  type="button"
                  className={cn(
                    'rounded-lg border px-3.5 py-1 font-mono text-xs transition-colors',
                    activeFilter === 'founder'
                      ? 'border-primary bg-primary text-primary-foreground font-semibold shadow-xs'
                      : 'border-border bg-card text-muted-foreground hover:text-foreground',
                  )}
                  onClick={() => setActiveFilter('founder')}
                >
                  CTOs &amp; Founders
                </button>
              </div>
            </div>
    
            {/* Masonry Grid (3 Columns) */}
            <div className="grid grid-cols-1 items-start gap-6 md:grid-cols-2 lg:grid-cols-3">
              {filteredTestimonials.map((t) => (
                <Card
                  key={t.id}
                  className="border-border bg-card/95 hover:border-primary/40 group relative flex flex-col justify-between space-y-4 overflow-hidden rounded-2xl p-6 text-left shadow-lg transition-colors hover:shadow-xl"
                >
                  {/* Top Row: Avatar, Name, Handle, Verified Badge */}
                  <div className="flex items-start justify-between gap-3">
                    <div className="flex items-center gap-3">
                      <img
                        src={t.avatar}
                        alt={t.name}
                        className="border-border size-10 shrink-0 rounded-full border object-cover"
                      />
                      <div className="min-w-0">
                        <div className="flex items-center gap-1.5">
                          <h4 className="text-foreground truncate font-mono text-xs font-bold">{t.name}</h4>
                          <CheckCircle2 className="text-info size-3.5 shrink-0" />
                        </div>
                        <p className="text-muted-foreground truncate text-xs">
                          {t.role} &bull; {t.company}
                        </p>
                      </div>
                    </div>
    
                    <Badge variant="outline" className="text-muted-foreground shrink-0 font-mono text-xs">
                      {t.verifiedSource}
                    </Badge>
                  </div>
    
                  {/* Quote text */}
                  <p className="text-foreground/90 text-xs leading-relaxed italic sm:text-sm">&ldquo;{t.quote}&rdquo;</p>
    
                  {/* Footer Row: Star Rating & Impact Metric Badge */}
                  <div className="border-border/60 flex flex-wrap items-center justify-between gap-2 border-t pt-3">
                    <div className="flex items-center gap-0.5">
                      {Array.from({ length: t.starCount }).map((_, s) => (
                        <Star key={s} className="fill-warning text-warning size-3.5" />
                      ))}
                    </div>
    
                    {t.metricBadge && (
                      <Badge variant="outline" className="border-success/20 bg-success/10 text-success font-mono text-xs">
                        {t.metricBadge}
                      </Badge>
                    )}
                  </div>
                </Card>
              ))}
            </div>
          </div>
        </section>
      )
    }
    export default TestimonialMasonryVerifiedGrid
    

Raw manifest:https://uipkge.dev/r/react/testimonial-masonry-verified-grid.json