From e3673eea09f20e158b554087bfbfec9786d1a2e4 Mon Sep 17 00:00:00 2001 From: kudinDmitriyUp Date: Tue, 21 Apr 2026 06:51:01 +0000 Subject: [PATCH] Bob AI: replace the existing hero section with the [Block: Hero Bill --- src/App.tsx | 5 + .../sections/hero/HeroBillboardCarousel.tsx | 106 ++++++++---------- src/components/shared/TestimonialCard.tsx | 15 +++ src/index.css | 34 ++++++ 4 files changed, 98 insertions(+), 62 deletions(-) create mode 100644 src/components/shared/TestimonialCard.tsx diff --git a/src/App.tsx b/src/App.tsx index ada5b9b..cfadd8e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -85,6 +85,11 @@ export default function App() { imageSrc: "http://img.b2bpic.net/free-photo/top-view-plastic-box-with-leftover-cookie_23-2148666825.jpg?_wi=1", }, ]} + testimonials={[ + { name: "Sarah J.", review: "The Kimchi Carbonara is absolutely divine! A perfect blend of creamy and spicy. I could eat this every day." }, + { name: "Michael K.", review: "Incredible flavors and super fast delivery. SeoulPasta is my new go-to for takeout. The Gochujang Bolognese is a must-try." }, + { name: "Emily R.", review: "I was skeptical about Korean-Italian fusion, but I'm a convert! The Bulgogi Lasagna was rich, savory, and so unique." }, + ]} /> diff --git a/src/components/sections/hero/HeroBillboardCarousel.tsx b/src/components/sections/hero/HeroBillboardCarousel.tsx index 3eefcb1..dd032cc 100644 --- a/src/components/sections/hero/HeroBillboardCarousel.tsx +++ b/src/components/sections/hero/HeroBillboardCarousel.tsx @@ -1,13 +1,10 @@ "use client"; import useEmblaCarousel from "embla-carousel-react"; -import { ChevronLeft, ChevronRight } from "lucide-react"; -import { motion } from "motion/react"; - -import Button from "@/components/ui/Button"; -import TextAnimation from "@/components/ui/TextAnimation"; -import ImageOrVideo from "@/components/ui/ImageOrVideo"; import { useCarouselControls } from "@/hooks/useCarouselControls"; +import Button from "@/components/ui/Button"; +import TestimonialCard from "@/components/shared/TestimonialCard"; +import { ChevronLeft, ChevronRight } from "lucide-react"; type Slide = { tag: string; @@ -15,78 +12,63 @@ type Slide = { description: string; primaryButton: { text: string; href: string }; secondaryButton: { text: string; href: string }; -} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }); + imageSrc: string; +}; + +type Testimonial = { + name: string; + review: string; +}; type HeroBillboardCarouselProps = { slides: Slide[]; + testimonials: Testimonial[]; }; -const HeroBillboardCarousel = ({ slides }: HeroBillboardCarouselProps) => { +const HeroBillboardCarousel = ({ slides, testimonials }: HeroBillboardCarouselProps) => { const [emblaRef, emblaApi] = useEmblaCarousel({ loop: true }); - const { prevDisabled, nextDisabled, scrollPrev, scrollNext, scrollProgress } = useCarouselControls(emblaApi); + const { scrollPrev, scrollNext, scrollProgress } = useCarouselControls(emblaApi); return ( -
-
-
+
+
+
{slides.map((slide, index) => ( -
-
- -
-
- {slide.tag} - - -
-
+
+ {slide.title} +
+ {slide.tag} +

{slide.title}

+

{slide.description}

+
+ {slide.primaryButton &&
))}
- -
-
- - + +
+ +
+
-
- + +
+ +
+
+
+ {testimonials.map((testimonial, index) => ( + + ))} +
diff --git a/src/components/shared/TestimonialCard.tsx b/src/components/shared/TestimonialCard.tsx new file mode 100644 index 0000000..7219957 --- /dev/null +++ b/src/components/shared/TestimonialCard.tsx @@ -0,0 +1,15 @@ +type TestimonialCardProps = { + name: string; + review: string; +}; + +const TestimonialCard = ({ name, review }: TestimonialCardProps) => { + return ( +
+

"{review}"

+

- {name}

+
+ ); +}; + +export default TestimonialCard; \ No newline at end of file diff --git a/src/index.css b/src/index.css index b9d0434..4ffbea5 100644 --- a/src/index.css +++ b/src/index.css @@ -173,3 +173,37 @@ h6 { var(--color-secondary-cta); box-shadow: 2.10837px 3.16256px 9.48767px color-mix(in srgb, var(--color-accent) 10%, transparent); } + +.testimonials-section { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + padding: 2rem 0; + background: linear-gradient(to top, rgba(0, 0, 0, 0.7) 20%, transparent); +} + +.testimonial-card { + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.2); + padding: 1.5rem; + border-radius: var(--radius); + max-width: 350px; + text-align: left; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + color: #ffffff; +} + +.testimonial-card .review { + font-style: italic; + margin-bottom: 1rem; + font-size: var(--text-base); + opacity: 0.9; +} + +.testimonial-card .name { + font-weight: bold; + text-align: right; + font-size: var(--text-sm); +}