Testimonial Masonry Verified Grid
blockmarketingMasonry grid of verified engineer endorsements with role filters, star ratings, avatar badges, and quantifiable impact metrics.
Installation
$pnpm dlx shadcn-vue@latest add https://uipkge.dev/r/vue/testimonial-masonry-verified-grid.json$npx shadcn-vue@latest add https://uipkge.dev/r/vue/testimonial-masonry-verified-grid.json$yarn dlx shadcn-vue@latest add https://uipkge.dev/r/vue/testimonial-masonry-verified-grid.json$bunx shadcn-vue@latest add https://uipkge.dev/r/vue/testimonial-masonry-verified-grid.jsonNamed registry:
npx shadcn-vue@latest add @uipkge/testimonial-masonry-verified-gridInstalls to:app/components/blocks/Variants
Loading interactive previews…
Loading interactive previews…
Schema
Type aliases exported from this item's source. Use these to shape the data you pass in.
Testimonialinterface 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
Files installed (1)
app/components/blocks/TestimonialMasonryVerifiedGrid.vue9.1 kB
<script setup lang="ts"> import { computed, ref } from 'vue' import { CheckCircle2, Star } from 'lucide-vue-next' import { Badge } from '@/components/ui/badge' import { Card } from '@/components/ui/card' 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, }, ] const activeFilter = ref<RoleFilter>('all') const filteredTestimonials = computed(() => { if (activeFilter.value === 'all') return testimonials return testimonials.filter((t) => t.roleCategory === activeFilter.value) }) </script> <template> <section data-slot="testimonial-masonry-verified-grid" class="bg-background relative overflow-hidden px-4 py-16 sm:px-6 sm:py-24 lg:px-8" > <div class="mx-auto max-w-7xl space-y-12"> <!-- Section Header --> <div class="mx-auto max-w-3xl space-y-4 text-center"> <Badge variant="secondary" class="gap-1.5 px-3 py-1 font-mono text-xs shadow-xs"> <Star class="fill-warning text-warning size-3.5" /> Verified Engineer Endorsements </Badge> <h2 class="text-foreground text-3xl font-bold tracking-tight sm:text-4xl"> Loved by design engineers and CTOs worldwide. </h2> <p class="text-muted-foreground text-base"> Real feedback from engineers who dumped monolithic npm packages for unbundled code ownership. </p> <!-- Category Filters --> <div class="flex flex-wrap items-center justify-center gap-2 pt-2"> <button type="button" class="rounded-lg border px-3.5 py-1 font-mono text-xs transition-colors" :class=" activeFilter === 'all' ? 'border-primary bg-primary text-primary-foreground font-semibold shadow-xs' : 'border-border bg-card text-muted-foreground hover:text-foreground' " @click="activeFilter = 'all'" > All Perspectives ({{ testimonials.length }}) </button> <button type="button" class="rounded-lg border px-3.5 py-1 font-mono text-xs transition-colors" :class=" activeFilter === 'design-eng' ? 'border-primary bg-primary text-primary-foreground font-semibold shadow-xs' : 'border-border bg-card text-muted-foreground hover:text-foreground' " @click="activeFilter = 'design-eng'" > Design Engineers </button> <button type="button" class="rounded-lg border px-3.5 py-1 font-mono text-xs transition-colors" :class=" activeFilter === 'frontend' ? 'border-primary bg-primary text-primary-foreground font-semibold shadow-xs' : 'border-border bg-card text-muted-foreground hover:text-foreground' " @click="activeFilter = 'frontend'" > Frontend Architects </button> <button type="button" class="rounded-lg border px-3.5 py-1 font-mono text-xs transition-colors" :class=" activeFilter === 'founder' ? 'border-primary bg-primary text-primary-foreground font-semibold shadow-xs' : 'border-border bg-card text-muted-foreground hover:text-foreground' " @click="activeFilter = 'founder'" > CTOs & Founders </button> </div> </div> <!-- Masonry Grid (3 Columns) --> <div class="grid grid-cols-1 items-start gap-6 md:grid-cols-2 lg:grid-cols-3"> <Card v-for="t in filteredTestimonials" :key="t.id" class="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 class="flex items-start justify-between gap-3"> <div class="flex items-center gap-3"> <img :src="t.avatar" :alt="t.name" class="border-border size-10 shrink-0 rounded-full border object-cover" /> <div class="min-w-0"> <div class="flex items-center gap-1.5"> <h4 class="text-foreground truncate font-mono text-xs font-bold">{{ t.name }}</h4> <CheckCircle2 class="text-info size-3.5 shrink-0" /> </div> <p class="text-muted-foreground truncate text-xs">{{ t.role }} • {{ t.company }}</p> </div> </div> <Badge variant="outline" class="text-muted-foreground shrink-0 font-mono text-xs"> {{ t.verifiedSource }} </Badge> </div> <!-- Quote text --> <p class="text-foreground/90 text-xs leading-relaxed italic sm:text-sm">“{{ t.quote }}”</p> <!-- Footer Row: Star Rating & Impact Metric Badge --> <div class="border-border/60 flex flex-wrap items-center justify-between gap-2 border-t pt-3"> <div class="flex items-center gap-0.5"> <Star v-for="s in t.starCount" :key="s" class="fill-warning text-warning size-3.5" /> </div> <Badge v-if="t.metricBadge" variant="outline" class="border-success/20 bg-success/10 text-success font-mono text-xs" > {{ t.metricBadge }} </Badge> </div> </Card> </div> </div> </section> </template>
Raw manifest:https://uipkge.dev/r/vue/testimonial-masonry-verified-grid.json