Your Image
28
Radius:0.5
Files
components/testimonial.tsx
"use client"

import { useEffect, useState } from "react"
import { ChevronLeft, ChevronRight } from "@aliimam/icons"

import { Button } from "@/components/ui/button"

export function TestimonialsSection() {
  const [activeTestimonial, setActiveTestimonial] = useState(0)
  const [isTransitioning, setIsTransitioning] = useState(false)

  const testimonials = [
    {
      quote:
        "Working with this team elevated our entire product experience. Every interaction now feels intentional and beautifully crafted.",
      name: "Aarav Mehta",
      company: "Founder, Nova Labs",
      image: "https://github.com/shadcn.png",
    },
    {
      quote:
        "Their design thinking completely reshaped our platform. The clarity, usability, and visual polish exceeded our expectations.",
      name: "Emily Carter",
      company: "Head of Product, Lumina",
      image: "https://github.com/vercel.png",
    },
    {
      quote:
        "From branding to interface design, the attention to detail was exceptional. Our launch received incredible feedback from users.",
      name: "Daniel Kim",
      company: "CEO, Horizon Tech",
      image: "https://github.com/claude.png",
    },
  ]

  useEffect(() => {
    const interval = setInterval(() => {
      setIsTransitioning(true)
      setTimeout(() => {
        setActiveTestimonial((prev) => (prev + 1) % testimonials.length)
        setTimeout(() => {
          setIsTransitioning(false)
        }, 100)
      }, 300)
    }, 12000)

    return () => clearInterval(interval)
  }, [testimonials.length])

  const handleNavigationClick = (index: number) => {
    setIsTransitioning(true)
    setTimeout(() => {
      setActiveTestimonial(index)
      setTimeout(() => {
        setIsTransitioning(false)
      }, 100)
    }, 300)
  }

  return (
    <div className="flex min-h-svh w-full flex-col items-center justify-center">
      <div className="bg-background flex items-center justify-start self-stretch overflow-hidden border border-t-0 border-r-0 border-b border-l-0 px-2">
        <div className="flex flex-1 flex-col items-end justify-center gap-6 py-16 md:flex-row md:py-17">
          <div className="flex flex-col items-start justify-center gap-4 self-stretch px-3 md:flex-row md:px-12">
            <img
              className="h-24 w-24 rounded-md object-cover transition-all duration-700 ease-in-out md:h-50 md:w-50"
              style={{
                opacity: isTransitioning ? 0.6 : 1,
                transform: isTransitioning ? "scale(0.95)" : "scale(1)",
                transition:
                  "opacity 0.7s ease-in-out, transform 0.7s ease-in-out",
              }}
              src={testimonials[activeTestimonial].image || "/placeholder.svg"}
              alt={testimonials[activeTestimonial].name}
            />
            <div className="flex flex-1 flex-col items-start justify-start gap-3 overflow-hidden md:px-6">
              <div
                className="line-clamp-5 flex h-40 flex-col justify-start self-stretch overflow-hidden text-2xl font-medium tracking-tight transition-all duration-700 ease-in-out md:text-4xl"
                style={{
                  filter: isTransitioning ? "blur(4px)" : "blur(0px)",
                  transition: "filter 0.7s ease-in-out",
                }}
              >
                {testimonials[activeTestimonial].quote}
              </div>
              <div
                className="flex items-start justify-start gap-1 self-stretch transition-all duration-700 ease-in-out"
                style={{
                  filter: isTransitioning ? "blur(4px)" : "blur(0px)",
                  transition: "filter 0.7s ease-in-out",
                }}
              >
                <div className="flex flex-col justify-center self-stretch text-lg font-medium">
                  {testimonials[activeTestimonial].name} -
                </div>
                <div className="text-muted-foreground flex flex-col justify-center self-stretch text-lg font-medium">
                  {testimonials[activeTestimonial].company}
                </div>
              </div>
            </div>
          </div>

          <div className="flex items-start justify-start gap-3 pr-6">
            <Button
              size={"icon"}
              variant={"outline"}
              onClick={() =>
                handleNavigationClick(
                  (activeTestimonial - 1 + testimonials.length) %
                    testimonials.length
                )
              }
            >
              <ChevronLeft />
            </Button>
            <Button
              size={"icon"}
              variant={"outline"}
              onClick={() =>
                handleNavigationClick(
                  (activeTestimonial + 1) % testimonials.length
                )
              }
            >
              <ChevronRight />
            </Button>
          </div>
        </div>
      </div>

      <div className="relative h-12 self-stretch overflow-hidden border-b">
        <div className="absolute inset-0 h-full w-full overflow-hidden">
          <div className="relative h-full w-full">
            {Array.from({ length: 300 }).map((_, i) => (
              <div
                key={i}
                className="outline-primary/40 absolute h-4 w-full origin-top-left -rotate-45 outline-[0.5px] outline-offset-[-0.25px]"
                style={{
                  top: `${i * 16 - 120}px`,
                  left: "-100%",
                  width: "300%",
                }}
              ></div>
            ))}
          </div>
        </div>
      </div>
    </div>
  )
}
A simple testimonials section.
testimonials-01
testimonials-01
Files
components/testimonial.tsx
import { Quote } from "@aliimam/icons"

export function TestimonialDemo() {
  const testimonials = [
    {
      avatar: "https://github.com/claude.png",
      name: "Aarav Mehta",
      title: "Creative Director",
      quote:
        "The design system completely transformed our workflow. Our team now ships consistent, polished interfaces and many...",
    },
    {
      avatar: "https://github.com/vercel.png",
      name: "Sofia Khan",
      title: "UI/UX Designer",
      quote:
        "From typography to spacing, every component feels thoughtfully crafted. It helped us build a seamless user experience...",
    },
    {
      avatar: "https://github.com/shadcn.png",
      name: "Daniel Lee",
      title: "Product Designer",
      quote:
        "The attention to visual hierarchy and interaction design is outstanding. It gave our product a modern, premium feel...",
    },
  ]

  return (
    <section className="relative flex min-h-svh w-full flex-col items-center justify-center overflow-hidden py-10">
      <div
        className="absolute inset-0 z-0"
        style={{
          background:
            "linear-gradient(to bottom, var(--background) 0%, var(--background) 45%, rgba(255,255,255,0) 100%), radial-gradient(ellipse at 50% 120%, var(--primary) 0%, var(--background) 75%)",
          opacity: 0.7,
        }}
      >
        <div
          style={{
            WebkitMaskImage:
              "linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0.5) 100%)",
            backgroundImage:
              "linear-gradient(var(--primary) 1px, transparent 1px), linear-gradient(90deg, var(--primary) 1px, transparent 1px)",
            backgroundSize: "50px 30px",
            bottom: "-10%",
            height: "70%",
            left: "50%",
            maskImage:
              "linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0.5) 100%)",
            pointerEvents: "none",
            position: "absolute",
            transform: "translateX(-50%) perspective(300px) rotateX(45deg)",
            width: "200%",
          }}
        />
      </div>
      <div className="relative z-10 container">
        <div className="max-w-xl sm:text-center md:mx-auto">
          <h3 className="text-3xl font-semibold tracking-tighter sm:text-4xl">
            Loved by designers worldwide
          </h3>
          <p className="text-muted-foreground mt-3">
            Built for creators who care about details. Craft beautiful,
            scalable, and consistent user experiences with confidence.
          </p>
        </div>
        <div className="mt-12">
          <ul className="grid items-center gap-6 sm:grid-cols-2 lg:grid-cols-3">
            {testimonials.map((item, idx) => (
              <li
                key={idx}
                className="bg-background rounded-md border shadow-xl"
              >
                <div className="p-4">
                  <Quote className="fill-primary text-primary h-8 w-8" />
                </div>
                <figure>
                  <blockquote>
                    <p className="px-4 py-1 text-lg font-normal tracking-tighter">
                      {item.quote}
                    </p>
                  </blockquote>
                  <div className="bg-page-gradient mt-6 flex items-center gap-x-4 p-4">
                    <img
                      src={item.avatar}
                      alt={item.name}
                      className="h-16 w-16 rounded-md border-2"
                    />
                    <div>
                      <span className="block font-semibold">{item.name}</span>
                      <span className="text-muted-foreground mt-0.5 block text-sm">
                        {item.title}
                      </span>
                    </div>
                  </div>
                </figure>
              </li>
            ))}
          </ul>
        </div>
      </div>
    </section>
  )
}
A simple testimonials section.
testimonials-02
testimonials-02
Files
components/testimonial.tsx
import Image from "next/image"

const testimonials = [
  [
    {
      content:
        "This design system gave our product a completely new identity. The polish and consistency instantly elevated our brand.",
      author: {
        name: "Aarav Mehta",
        role: "Creative Director",
        image: "https://github.com/claude.png",
      },
    },
    {
      content:
        "The components are thoughtfully crafted and incredibly flexible. It feels like it was built by designers who truly care.",
      author: {
        name: "Sofia Khan",
        role: "UI/UX Designer",
        image: "https://github.com/vercel.png",
      },
    },
    {
      content:
        "From spacing to typography, everything just works. We shipped our redesign faster than ever before.",
      author: {
        name: "Daniel Lee",
        role: "Product Designer",
        image: "https://github.com/shadcn.png",
      },
    },
    {
      content:
        "Our dashboard now feels modern and premium. Users immediately noticed the improved experience.",
      author: {
        name: "Maya Patel",
        role: "Head of Design",
        image: "https://github.com/octocat.png",
      },
    },
    {
      content:
        "The visual hierarchy and layout structure made complex data feel simple and approachable.",
      author: {
        name: "Ryan Brooks",
        role: "UX Strategist",
        image: "https://github.com/torvalds.png",
      },
    },
  ],
  [
    {
      content:
        "Collaboration between design and development has never been smoother. Everything feels systemized and scalable.",
      author: {
        name: "Isabella Cruz",
        role: "Design Lead",
        image: "https://github.com/mojombo.png",
      },
    },
    {
      content:
        "The micro-interactions add subtle delight without overwhelming the user experience.",
      author: {
        name: "Noah Kim",
        role: "Interaction Designer",
        image: "https://github.com/defunkt.png",
      },
    },
    {
      content:
        "We were able to maintain brand consistency across multiple products effortlessly.",
      author: {
        name: "Emma Wilson",
        role: "Brand Designer",
        image: "https://github.com/gaearon.png",
      },
    },
    {
      content:
        "It strikes the perfect balance between minimalism and functionality.",
      author: {
        name: "Liam Anderson",
        role: "Frontend Architect",
        image: "https://github.com/sindresorhus.png",
      },
    },
    {
      content:
        "The layout grids and spacing system helped us create clean, structured interfaces every time.",
      author: {
        name: "Olivia Martin",
        role: "Senior UI Designer",
        image: "https://github.com/yyx990803.png",
      },
    },
  ],
  [
    {
      content:
        "We reduced design inconsistencies by over 70% after adopting this system.",
      author: {
        name: "Ethan Wright",
        role: "Product Manager",
        image: "https://github.com/jashkenas.png",
      },
    },
    {
      content:
        "The dark mode implementation is flawless and visually stunning.",
      author: {
        name: "Ava Thompson",
        role: "Visual Designer",
        image: "https://github.com/dhh.png",
      },
    },
    {
      content:
        "It helped us turn complex workflows into intuitive, elegant user journeys.",
      author: {
        name: "James Rodriguez",
        role: "UX Researcher",
        image: "https://github.com/tj.png",
      },
    },
    {
      content: "The reusable components saved us weeks of development time.",
      author: {
        name: "Charlotte Nguyen",
        role: "Design Systems Engineer",
        image: "https://github.com/rauchg.png",
      },
    },
    {
      content:
        "Clean, scalable, and beautifully structured — exactly what modern products need.",
      author: {
        name: "Benjamin Scott",
        role: "Founder & Designer",
        image: "https://github.com/bradtraversy.png",
      },
    },
  ],
]

export function TestimonialDemo() {
  return (
    <section className="relative py-10">
      <div
        className="absolute inset-0 z-0"
        style={{
          WebkitMaskImage:
            "radial-gradient(ellipse 90% 90% at 50% 50%, black 50%, transparent 80%)",
          backgroundImage:
            "radial-gradient(circle at 0.5px 0.5px, var(--primary) 0.5px, transparent 0)",
          backgroundSize: "8px 8px",
          maskImage:
            "radial-gradient(ellipse 90% 90% at 50% 50%, black 50%, transparent 80%)",
          opacity: 0.2,
        }}
      />
      <div className="relative container">
        <div className="mx-auto max-w-2xl md:text-center">
          <h2 className="text-3xl tracking-tighter sm:text-6xl">
            Loved by businesses worldwide.
          </h2>
          <p className="text-muted-foreground mt-4 text-lg tracking-tight">
            Our software is so simple that people can’t help but fall in love
            with it. Simplicity is easy when you just skip tons of
            mission-critical features.
          </p>
        </div>
        <ul
          role="list"
          className="mx-auto mt-6 grid max-w-2xl grid-cols-1 gap-6 sm:gap-8 lg:mt-20 lg:max-w-none lg:grid-cols-3"
        >
          {testimonials.map((column, columnIndex) => (
            <li key={columnIndex}>
              <ul role="list" className="flex flex-col gap-y-6 sm:gap-y-8">
                {column.map((testimonial, testimonialIndex) => (
                  <li key={testimonialIndex}>
                    <figure className="bg-background relative transform-gpu rounded-md border p-6 shadow-xl [box-shadow:0_-20px_80px_-20px_#8686f01f_inset]">
                      <blockquote className="relative">
                        <p className="text-lg tracking-tight">
                          {testimonial.content}
                        </p>
                      </blockquote>
                      <figcaption className="relative mt-6 flex items-center justify-between border-t pt-6">
                        <div>
                          <div className="font-display text-base">
                            {testimonial.author.name}
                          </div>
                          <div className="text-muted-foreground mt-1 text-sm">
                            {testimonial.author.role}
                          </div>
                        </div>
                        <div className="overflow-hidden rounded-md">
                          <Image
                            className="h-14 w-14 object-cover"
                            src={testimonial.author.image}
                            alt=""
                            width={56}
                            height={56}
                          />
                        </div>
                      </figcaption>
                    </figure>
                  </li>
                ))}
              </ul>
            </li>
          ))}
        </ul>
      </div>
    </section>
  )
}
A simple testimonials section.
testimonials-03
testimonials-03
Files
components/testimonial.tsx
import { Vercel } from "@aliimam/logos"

import { Marquee } from "@/registry/aliimam/components/marquee"
import { Separator } from "@/components/ui/separator"

const testimonials = [
  {
    name: "Alena Zhukova",
    profession: "Software Engineer",
    description:
      "This design system helped us build modern, scalable, and consistent user interfaces with ease.",
  },
  {
    name: "Aiko",
    profession: "Design Engineer",
    description:
      "This design system helped us build modern, scalable, and consistent user interfaces with ease.",
  },
  {
    name: "Alena Zhukova",
    profession: "Software Engineer",
    description:
      "This design system helped us build modern, scalable, and consistent user interfaces with ease.",
  },
  {
    name: "Lisa Kemp",
    profession: "Frontend Developer",
    description:
      "This design system helped us build modern, scalable, and consistent user interfaces with ease.",
  },
  {
    name: "Saud",
    profession: "Game Developer",
    description:
      "This design system helped us build modern, scalable, and consistent user interfaces with ease.",
  },
  {
    name: "Paula Smith",
    profession: "UX Designer",
    description:
      "This design system helped us build modern, scalable, and consistent user interfaces with ease.",
  },
]

const FUITestimonialWithSlide = () => {
  return (
    <div className="relative flex min-h-svh w-full flex-col items-center justify-center overflow-hidden py-10">
      <div className="mx-auto w-full">
        <div className="mb-10">
          <p className="mx-auto mt-8 max-w-2xl text-center text-5xl tracking-tight">
            What Our Clients Say
          </p>
          <p className="text-muted-foreground mx-auto mt-4 max-w-xl text-center text-lg tracking-tight">
            Trusted by designers and developers to build modern, scalable, and
            beautifully crafted user experiences.
          </p>
        </div>

        <div className="relative flex shrink-0 justify-around gap-5 overflow-hidden">
          <Marquee pauseOnHover fade={true} gap={6} className="w-full">
            {testimonials.map((testimonial, indx) => {
              return (
                <div
                  key={indx}
                  className="bg-background flex h-full w-120 flex-col space-x-4 rounded-md border last:mr-2"
                >
                  <p className="text-text-primary dark:text-dark-text-primary px-5 py-5 text-xl font-extralight tracking-tighter text-pretty sm:text-xl md:text-2xl">
                    &quot;{testimonial.description}.&quot;
                  </p>
                  <div className="flex w-full gap-1 overflow-hidden border-t-[1.2px]">
                    <div className="flex w-3/4 items-center gap-3 px-4 py-3">
                      <img
                        className="h-16 w-16 rounded-md"
                        src="/ali.jpg"
                        alt="ali"
                      />
                      <div className="flex flex-1 flex-col items-start justify-start gap-0">
                        <h5 className="text-base font-medium md:text-lg">
                          {testimonial.name}
                        </h5>
                        <p className="text-text-tertiary dark:text-dark-text-tertiary -mt-1 text-sm">
                          {testimonial.profession}
                        </p>
                      </div>
                    </div>
                    <Separator orientation="vertical" />
                    <div className="self-center pl-10">
                      <Vercel />
                    </div>
                  </div>
                </div>
              )
            })}
          </Marquee>
        </div>
      </div>
    </div>
  )
}
export FUITestimonialWithSlide
A simple testimonials section.
testimonials-04
testimonials-04
Files
components/testimonial.tsx
import {
  Avatar,
  AvatarFallback,
  AvatarImage,
} from "@/components/ui/avatar"

export function TestimonialDemo() {
  return (
    <section className="relative flex min-h-svh w-full flex-col items-center justify-center overflow-hidden py-10">
      <div className="mx-auto max-w-5xl">
        <div className="mx-auto max-w-2xl text-center">
          <blockquote>
            <p className="text-lg font-medium sm:text-xl md:text-3xl">
              Adopting this design system transformed the way we build products.
              It brings clarity, consistency, and a premium feel to every
              interface we ship.
            </p>

            <div className="mt-12 flex items-center justify-center gap-6">
              <Avatar className="size-12">
                <AvatarImage
                  src="/ali.jpg"
                  alt="Ali Imam"
                  height="400"
                  width="400"
                  loading="lazy"
                />
                <AvatarFallback>AI</AvatarFallback>
              </Avatar>

              <div className="space-y-1 border-l pl-6">
                <cite className="font-medium">Ali Imam</cite>
                <span className="text-muted-foreground block text-sm">
                  Creative Design Engineer
                </span>
              </div>
            </div>
          </blockquote>
        </div>
      </div>
    </section>
  )
}
A simple testimonials section.
testimonials-05
testimonials-05

Not Playing

·

Spotify

·

Ali Imam