Skip to content

HappyClients Component ​

Client showcase component displaying satisfied customers, logos, and success metrics. Perfect for building trust and social proof.

Overview ​

The HappyClients component showcases your satisfied customers through logos, testimonials, and success metrics. It builds credibility and trust by displaying social proof from recognizable brands and clients.

Preview ​

Happy Clients Component Preview

Basic Usage ​

vue
<template>
  <section class="social-proof">
    <HappyClients 
      title="Trusted by 1000+ Companies"
      subtitle="Join the companies that trust ClawPlate"
    />
  </section>
</template>

<script setup lang="ts">
import HappyClients from '@/components/HappyClients.vue'
</script>

Features ​

🏢 Client Logos ​

  • Company logo carousel
  • Responsive logo sizing
  • Hover animations
  • Grayscale to color effects

📊 Success Metrics ​

  • Customer satisfaction scores
  • Usage statistics
  • Growth numbers
  • Performance metrics

💬 Quick Testimonials ​

  • Short client quotes
  • Company attribution
  • Role/position display
  • Star ratings

🎨 Visual Design ​

  • Clean, professional layout
  • Responsive grid system
  • Smooth animations
  • Brand-consistent styling

Component API ​

Props ​

PropTypeDefaultDescription
titlestring'Happy Clients'Section title
subtitlestringundefinedOptional subtitle
showLogosbooleantrueDisplay client logos
showMetricsbooleantrueShow success metrics
showQuotesbooleanfalseInclude testimonial quotes
autoplaybooleantrueAuto-rotate logos

Data Structure ​

typescript
interface Client {
  id: string
  name: string
  logo: string
  logoAlt: string
  website?: string
  testimonial?: {
    quote: string
    author: string
    role: string
    rating: number
  }
}

interface Metric {
  id: string
  value: string
  label: string
  icon?: string
}

Layout Variants ​

Logo Grid ​

vue
<HappyClients 
  layout="grid"
  :show-metrics="false"
  :show-quotes="false"
/>
vue
<HappyClients 
  layout="carousel"
  :autoplay="true"
  :show-metrics="true"
/>

Mixed Content ​

vue
<HappyClients 
  layout="mixed"
  :show-logos="true"
  :show-metrics="true"
  :show-quotes="true"
/>

Client Data Examples ​

Basic Client List ​

typescript
const clients = [
  {
    id: 'company-1',
    name: 'TechCorp Inc.',
    logo: '/logos/techcorp.svg',
    logoAlt: 'TechCorp Inc. logo',
    website: 'https://techcorp.com'
  },
  {
    id: 'company-2',
    name: 'StartupXYZ',
    logo: '/logos/startupxyz.svg',
    logoAlt: 'StartupXYZ logo',
    testimonial: {
      quote: 'ClawPlate helped us launch 3x faster!',
      author: 'Jane Smith',
      role: 'CTO',
      rating: 5
    }
  }
]

Success Metrics ​

typescript
const metrics = [
  {
    id: 'satisfaction',
    value: '98%',
    label: 'Customer Satisfaction',
    icon: 'heroicons:face-smile'
  },
  {
    id: 'users',
    value: '10K+',
    label: 'Active Users',
    icon: 'heroicons:users'
  },
  {
    id: 'uptime',
    value: '99.9%',
    label: 'Uptime',
    icon: 'heroicons:check-circle'
  }
]

Styling Options ​

Logo Styling ​

vue
<!-- Grayscale logos with color on hover -->
<div class="logo-container">
  <img 
    class="grayscale hover:grayscale-0 transition-all duration-300"
    :src="client.logo"
    :alt="client.logoAlt"
  />
</div>

Metrics Display ​

vue
<div class="metric-card">
  <Icon :name="metric.icon" class="text-blue-500" />
  <span class="text-3xl font-bold">{{ metric.value }}</span>
  <span class="text-gray-600">{{ metric.label }}</span>
</div>

Animation Features ​

  • Smooth horizontal scrolling
  • Auto-play with pause on hover
  • Infinite loop animation
  • Responsive speed adjustment

Entrance Animations ​

  • Staggered logo appearance
  • Metric counter animations
  • Fade-in effects
  • Scroll-triggered animations

Integration Examples ​

Dynamic Client Data ​

vue
<script setup lang="ts">
const { data: clients } = await $fetch('/api/clients')
const { data: metrics } = await $fetch('/api/metrics')
</script>

<template>
  <HappyClients 
    :clients="clients"
    :metrics="metrics"
    :autoplay="true"
  />
</template>

With Analytics Tracking ​

vue
<script setup lang="ts">
const trackClientClick = (clientId) => {
  gtag('event', 'client_logo_click', {
    event_category: 'social_proof',
    event_label: clientId
  })
}
</script>

<template>
  <HappyClients @client-click="trackClientClick" />
</template>

A/B Testing ​

vue
<script setup lang="ts">
const variant = await $fetch('/api/ab-test/happy-clients')

const config = {
  showLogos: variant !== 'minimal',
  showMetrics: variant === 'full',
  layout: variant === 'carousel' ? 'carousel' : 'grid'
}
</script>

Accessibility Features ​

Screen Reader Support ​

  • Alt text for all logos
  • Descriptive labels for metrics
  • Proper heading hierarchy
  • ARIA labels for interactive elements

Keyboard Navigation ​

  • Tab navigation through logos
  • Focus indicators
  • Keyboard controls for carousel
  • Skip links for long lists

Performance Optimization ​

Image Optimization ​

vue
<template>
  <NuxtImg
    :src="client.logo"
    :alt="client.logoAlt"
    format="webp"
    loading="lazy"
    class="client-logo"
  />
</template>

Lazy Loading ​

  • Load logos as they enter viewport
  • Progressive enhancement
  • Skeleton loading states
  • Optimized image formats

SEO Benefits ​

Structured Data ​

vue
<script setup lang="ts">
const organizationSchema = {
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "ClawPlate",
  "hasCredential": clients.map(client => ({
    "@type": "EducationalOccupationalCredential",
    "credentialCategory": "Client Testimonial",
    "recognizedBy": {
      "@type": "Organization",
      "name": client.name
    }
  }))
}
</script>

Trust Signals ​

  • Brand association benefits
  • Social proof for SEO
  • Credibility indicators
  • Authority building

Built with love by mhdevfr