portapower-website/components/testimonials-section.tsx

98 lines
3.5 KiB
TypeScript

"use client";
import { useInView } from "@/hooks/use-in-view";
import { Card, CardContent } from "@/components/ui/card";
import { Quote } from "lucide-react";
const testimonials = [
{
quote:
"I told my board we'd be powering the main stage with poop. They laughed. Then they saw the energy bill savings. Nobody's laughing now — well, actually we all are.",
name: "Sarah Chen",
role: "Director, SunBurst Music Festival",
},
{
quote:
"Our attendees kept asking where the generators were. When we told them the electricity was coming from the toilets, it became the most-shared fact on social media all weekend.",
name: "Marcus Johnson",
role: "Operations Lead, GreenFields Festival",
},
{
quote:
"PortaPower's units are the cleanest festival bathrooms I've ever seen. The fact that they also power our food court is just... *chef's kiss*. Literally.",
name: "Priya Patel",
role: "Founder, EchoVibe Music Fest",
},
{
quote:
"We went from 14 diesel generators to 3 after bringing PortaPower on. The noise reduction alone was worth it. The sustainability angle made our sponsors ecstatic.",
name: "Jake Morrison",
role: "Festival Manager, ToneFest",
},
];
export function TestimonialsSection() {
const { ref, isInView } = useInView(0.1);
return (
<section className="py-24 px-4" ref={ref}>
<div className="mx-auto max-w-6xl">
<div className="text-center mb-16">
<h2
className={`text-3xl sm:text-4xl md:text-5xl font-bold mb-4 ${
isInView ? "animate-fade-in-up" : "opacity-0"
}`}
>
What Festival Organizers{" "}
<span className="text-neon">Say</span>
</h2>
<p
className={`text-cream-dim text-lg max-w-2xl mx-auto ${
isInView ? "animate-fade-in-up" : "opacity-0"
}`}
style={{ animationDelay: "0.1s" }}
>
Don&apos;t just take our word for it (but seriously, it&apos;s
poop-powered electricity how cool is that?)
</p>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{testimonials.map((testimonial, index) => (
<Card
key={testimonial.name}
className={`card-hover ${
isInView ? "animate-fade-in-up" : "opacity-0"
}`}
style={{ animationDelay: `${0.2 + index * 0.1}s` }}
>
<CardContent className="pt-6">
<Quote className="h-8 w-8 text-neon/40 mb-4" />
<p className="text-cream-dim leading-relaxed mb-6 italic">
&ldquo;{testimonial.quote}&rdquo;
</p>
<div className="flex items-center gap-3">
<div className="h-10 w-10 rounded-full bg-neon/20 flex items-center justify-center text-neon font-bold text-sm">
{testimonial.name
.split(" ")
.map((n) => n[0])
.join("")}
</div>
<div>
<p className="font-bold text-cream text-sm">
{testimonial.name}
</p>
<p className="text-cream-dim text-xs">
{testimonial.role}
</p>
</div>
</div>
</CardContent>
</Card>
))}
</div>
</div>
</section>
);
}