Merge version_2_1782192209606 into main #3
@@ -1,170 +1,38 @@
|
||||
import AboutText from '@/components/sections/about/AboutText';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSimple from '@/components/sections/faq/FaqSimple';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroCenteredLogos from '@/components/sections/hero/HeroCenteredLogos';
|
||||
import PricingMediaCards from '@/components/sections/pricing/PricingMediaCards';
|
||||
import TeamListCards from '@/components/sections/team/TeamListCards';
|
||||
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
// AUTO-GENERATED shell by per-section-migrate.
|
||||
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
|
||||
// files directly. Non-block content (wrappers, non-inlinable sections) is
|
||||
// preserved inline; extracted section blocks become <XSection/> refs.
|
||||
|
||||
export default function HomePage() {
|
||||
import React from 'react';
|
||||
import HeroSection from './HomePage/sections/Hero';
|
||||
import AboutSection from './HomePage/sections/About';
|
||||
import FloralSection from './HomePage/sections/Floral';
|
||||
import PricingSection from './HomePage/sections/Pricing';
|
||||
import TeamSection from './HomePage/sections/Team';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import TrustBannerSection from './HomePage/sections/TrustBanner';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroCenteredLogos
|
||||
avatarsSrc={[
|
||||
"http://img.b2bpic.net/free-photo/young-woman-with-afro-haircut-receiving-bouquet-flowers_273609-21737.jpg", "http://img.b2bpic.net/free-photo/charming-florist-talking-smartphone_23-2147762195.jpg", "http://img.b2bpic.net/free-photo/woman-making-beautiful-floral-bouquet_23-2148846519.jpg", "http://img.b2bpic.net/free-photo/top-view-colorful-flowers-with-copy-space_23-2148823710.jpg"]}
|
||||
avatarText="Loved by floral enthusiasts"
|
||||
title="Bringing Nature's Elegance to Your Moments"
|
||||
description="Handcrafted floral designs curated with passion, designed to make every occasion feel truly unforgettable."
|
||||
primaryButton={{
|
||||
text: "Explore Collection", href: "#floral"}}
|
||||
secondaryButton={{
|
||||
text: "Book Consultation", href: "#contact"}}
|
||||
names={[
|
||||
"Savi", "The Team", "Artisans", "Partners"]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/front-view-woman-with-dried-plants_23-2149513666.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
<TrustBannerSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutText
|
||||
title="At Petals With Savi, we believe every flower tells a story. Our passion for botany and design meets artistic creativity to create arrangements that are as unique as the memories they celebrate."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="floral" data-section="floral">
|
||||
<SectionErrorBoundary name="floral">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Collection"
|
||||
title="Handcrafted Floral Arrangements"
|
||||
description="Explore our curated designs for every occasion, from intimate gifts to grand celebrations."
|
||||
items={[
|
||||
{
|
||||
title: "Classic Roses", description: "Timeless elegance for every romantic gesture.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/furoshiki-packages-arrangement-still-life_23-2150642989.jpg"},
|
||||
{
|
||||
title: "Peony Dreams", description: "Soft and lush blooms that captivate hearts.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-colorful-rose-flower-wicker-basket-blue_114579-82665.jpg"},
|
||||
{
|
||||
title: "Wedding Grace", description: "Bespoke arrangements for your special day.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/aesthetic-background-trippy-beige-buttercup-flower_53876-128682.jpg"},
|
||||
{
|
||||
title: "Seasonal Joy", description: "Fresh picks from the changing seasons.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/flower-composition-bucket-roses-chrysanthemum-side-view_141793-4420.jpg"},
|
||||
{
|
||||
title: "Lilies of Love", description: "Pure beauty that defines grace.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/woman-making-pretty-floral-arrangement_23-2148846540.jpg"},
|
||||
{
|
||||
title: "Wild Meadows", description: "Bohemian style for free spirits.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/elegant-couple-spend-time-restaurant_1157-20498.jpg"},
|
||||
{
|
||||
title: "Sunny Sunflowers", description: "Bright and cheerful to warm the space.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/close-up-dark-pink-dahlia-flower_84443-94362.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FloralSection />
|
||||
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingMediaCards
|
||||
tag="Pricing"
|
||||
title="Transparent Floral Services"
|
||||
description="Flexible plans to suit your needs, from weekly subscriptions to custom event designs."
|
||||
plans={[
|
||||
{
|
||||
tag: "Essential", price: "$55", period: "/ delivery", features: [
|
||||
"Hand-picked stems", "Local delivery", "Care instructions"],
|
||||
primaryButton: {
|
||||
text: "Select", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/shy-toddler-holding-flower-copy-space_23-2148442474.jpg"},
|
||||
{
|
||||
tag: "Premium", price: "$120", period: "/ design", features: [
|
||||
"Bespoke design", "Premium flowers", "Priority delivery", "Gift note included"],
|
||||
primaryButton: {
|
||||
text: "Select", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-dark-blue-flowers-white-colored-water_23-2148256399.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<PricingSection />
|
||||
|
||||
<div id="team" data-section="team">
|
||||
<SectionErrorBoundary name="team">
|
||||
<TeamListCards
|
||||
tag="Meet the Artists"
|
||||
title="The Hands Behind the Petals"
|
||||
description="Meet our dedicated team of floral artisans committed to creating beauty."
|
||||
groups={[
|
||||
{
|
||||
title: "Our Studio Team", members: [
|
||||
{
|
||||
name: "Savi", role: "Lead Florist", detail: "Creative director with 10+ years of botanical design.", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-typing-something-tablet_23-2148377281.jpg"},
|
||||
{
|
||||
name: "Alex", role: "Floral Specialist", detail: "Expert in sustainable sourcing and care.", imageSrc: "http://img.b2bpic.net/free-photo/roses-bouquet_23-2148013609.jpg"},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TeamSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeOverlayCards
|
||||
tag="Reviews"
|
||||
title="What Our Clients Say"
|
||||
description="Stories from people who have experienced the magic of our arrangements."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.", role: "Bride", company: "Happy Client", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/pleased-romantic-woman-gets-beautiful-bouquet-as-present-closes-eyes-smiles-gently-dressed-pink-jacket_273609-43435.jpg"},
|
||||
{
|
||||
name: "Michael D.", role: "Gift Giver", company: "Frequent Buyer", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-people-celebrating-mother-s-day_23-2151207241.jpg"},
|
||||
{
|
||||
name: "Elena R.", role: "Event Planner", company: "Industry Pro", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-holding-flowers_23-2149326532.jpg"},
|
||||
{
|
||||
name: "Tom B.", role: "Subscriber", company: "Home Decor", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-african-female-florist-smiling-cutting-stems-working-flower-shop-white-wall_176420-12231.jpg"},
|
||||
{
|
||||
name: "Lisa K.", role: "Wedding Client", company: "Happy Bride", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-couple-celebrating-engagement_23-2149401307.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSimple
|
||||
tag="Support"
|
||||
title="Frequently Asked Questions"
|
||||
description="Everything you need to know about our services and delivery options."
|
||||
items={[
|
||||
{
|
||||
question: "Do you deliver locally?", answer: "Yes, we offer same-day delivery within a 15-mile radius of our studio."},
|
||||
{
|
||||
question: "Can I request custom arrangements?", answer: "Absolutely! Contact us for bespoke requests and personalized designs."},
|
||||
{
|
||||
question: "How long do the flowers last?", answer: "With proper care, our arrangements typically last 5–7 days."},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Let's Connect"
|
||||
text="Ready to bring beauty into your space? Reach out for orders or consultations."
|
||||
primaryButton={{
|
||||
text: "Contact Us", href: "mailto:savi@petalswithsavi.com"}}
|
||||
secondaryButton={{
|
||||
text: "Call Now", href: "tel:+1555555555"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
18
src/pages/HomePage/sections/About.tsx
Normal file
18
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,18 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "about" section.
|
||||
|
||||
import React from 'react';
|
||||
import AboutText from '@/components/sections/about/AboutText';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutText
|
||||
title="At Petals With Savi, we believe every flower tells a story. Our passion for botany and design meets artistic creativity to create arrangements that are as unique as the memories they celebrate."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
23
src/pages/HomePage/sections/Contact.tsx
Normal file
23
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,23 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Let's Connect"
|
||||
text="Ready to bring beauty into your space? Reach out for orders or consultations."
|
||||
primaryButton={{
|
||||
text: "Contact Us", href: "mailto:savi@petalswithsavi.com"}}
|
||||
secondaryButton={{
|
||||
text: "Call Now", href: "tel:+1555555555"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Faq.tsx
Normal file
28
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqSimple from '@/components/sections/faq/FaqSimple';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSimple
|
||||
tag="Support"
|
||||
title="Frequently Asked Questions"
|
||||
description="Everything you need to know about our services and delivery options."
|
||||
items={[
|
||||
{
|
||||
question: "Do you deliver locally?", answer: "Yes, we offer same-day delivery within a 15-mile radius of our studio."},
|
||||
{
|
||||
question: "Can I request custom arrangements?", answer: "Absolutely! Contact us for bespoke requests and personalized designs."},
|
||||
{
|
||||
question: "How long do the flowers last?", answer: "With proper care, our arrangements typically last 5–7 days."},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
36
src/pages/HomePage/sections/Floral.tsx
Normal file
36
src/pages/HomePage/sections/Floral.tsx
Normal file
@@ -0,0 +1,36 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "floral" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FloralSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="floral" data-section="floral">
|
||||
<SectionErrorBoundary name="floral">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Collection"
|
||||
title="Handcrafted Floral Arrangements"
|
||||
description="Explore our curated designs for every occasion, from intimate gifts to grand celebrations."
|
||||
items={[
|
||||
{
|
||||
title: "Classic Roses", description: "Timeless elegance for every romantic gesture.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/furoshiki-packages-arrangement-still-life_23-2150642989.jpg"},
|
||||
{
|
||||
title: "Peony Dreams", description: "Soft and lush blooms that captivate hearts.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-colorful-rose-flower-wicker-basket-blue_114579-82665.jpg"},
|
||||
{
|
||||
title: "Wedding Grace", description: "Bespoke arrangements for your special day.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/aesthetic-background-trippy-beige-buttercup-flower_53876-128682.jpg"},
|
||||
{
|
||||
title: "Seasonal Joy", description: "Fresh picks from the changing seasons.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/flower-composition-bucket-roses-chrysanthemum-side-view_141793-4420.jpg"},
|
||||
{
|
||||
title: "Lilies of Love", description: "Pure beauty that defines grace.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/woman-making-pretty-floral-arrangement_23-2148846540.jpg"},
|
||||
{
|
||||
title: "Wild Meadows", description: "Bohemian style for free spirits.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/elegant-couple-spend-time-restaurant_1157-20498.jpg"},
|
||||
{
|
||||
title: "Sunny Sunflowers", description: "Bright and cheerful to warm the space.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/close-up-dark-pink-dahlia-flower_84443-94362.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Hero.tsx
Normal file
29
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "hero" section.
|
||||
|
||||
import React from 'react';
|
||||
import HeroCenteredLogos from '@/components/sections/hero/HeroCenteredLogos';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroCenteredLogos
|
||||
avatarsSrc={[
|
||||
"http://img.b2bpic.net/free-photo/young-woman-with-afro-haircut-receiving-bouquet-flowers_273609-21737.jpg", "http://img.b2bpic.net/free-photo/charming-florist-talking-smartphone_23-2147762195.jpg", "http://img.b2bpic.net/free-photo/woman-making-beautiful-floral-bouquet_23-2148846519.jpg", "http://img.b2bpic.net/free-photo/top-view-colorful-flowers-with-copy-space_23-2148823710.jpg"]}
|
||||
avatarText="Loved by floral enthusiasts"
|
||||
title="Bringing Nature's Elegance to Your Moments"
|
||||
description="Handcrafted floral designs curated with passion, designed to make every occasion feel truly unforgettable."
|
||||
primaryButton={{
|
||||
text: "Explore Collection", href: "#floral"}}
|
||||
secondaryButton={{
|
||||
text: "Book Consultation", href: "#contact"}}
|
||||
names={[
|
||||
"Savi", "The Team", "Artisans", "Partners"]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/front-view-woman-with-dried-plants_23-2149513666.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
34
src/pages/HomePage/sections/Pricing.tsx
Normal file
34
src/pages/HomePage/sections/Pricing.tsx
Normal file
@@ -0,0 +1,34 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "pricing" section.
|
||||
|
||||
import React from 'react';
|
||||
import PricingMediaCards from '@/components/sections/pricing/PricingMediaCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function PricingSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingMediaCards
|
||||
tag="Pricing"
|
||||
title="Transparent Floral Services"
|
||||
description="Flexible plans to suit your needs, from weekly subscriptions to custom event designs."
|
||||
plans={[
|
||||
{
|
||||
tag: "Essential", price: "$55", period: "/ delivery", features: [
|
||||
"Hand-picked stems", "Local delivery", "Care instructions"],
|
||||
primaryButton: {
|
||||
text: "Select", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/shy-toddler-holding-flower-copy-space_23-2148442474.jpg"},
|
||||
{
|
||||
tag: "Premium", price: "$120", period: "/ design", features: [
|
||||
"Bespoke design", "Premium flowers", "Priority delivery", "Gift note included"],
|
||||
primaryButton: {
|
||||
text: "Select", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-dark-blue-flowers-white-colored-water_23-2148256399.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
30
src/pages/HomePage/sections/Team.tsx
Normal file
30
src/pages/HomePage/sections/Team.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "team" section.
|
||||
|
||||
import React from 'react';
|
||||
import TeamListCards from '@/components/sections/team/TeamListCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TeamSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="team" data-section="team">
|
||||
<SectionErrorBoundary name="team">
|
||||
<TeamListCards
|
||||
tag="Meet the Artists"
|
||||
title="The Hands Behind the Petals"
|
||||
description="Meet our dedicated team of floral artisans committed to creating beauty."
|
||||
groups={[
|
||||
{
|
||||
title: "Our Studio Team", members: [
|
||||
{
|
||||
name: "Savi", role: "Lead Florist", detail: "Creative director with 10+ years of botanical design.", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-typing-something-tablet_23-2148377281.jpg"},
|
||||
{
|
||||
name: "Alex", role: "Floral Specialist", detail: "Expert in sustainable sourcing and care.", imageSrc: "http://img.b2bpic.net/free-photo/roses-bouquet_23-2148013609.jpg"},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
37
src/pages/HomePage/sections/Testimonials.tsx
Normal file
37
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,37 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "testimonials" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeOverlayCards
|
||||
tag="Reviews"
|
||||
title="What Our Clients Say"
|
||||
description="Stories from people who have experienced the magic of our arrangements."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.", role: "Bride", company: "Happy Client", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/pleased-romantic-woman-gets-beautiful-bouquet-as-present-closes-eyes-smiles-gently-dressed-pink-jacket_273609-43435.jpg"},
|
||||
{
|
||||
name: "Michael D.", role: "Gift Giver", company: "Frequent Buyer", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-people-celebrating-mother-s-day_23-2151207241.jpg"},
|
||||
{
|
||||
name: "Elena R.", role: "Event Planner", company: "Industry Pro", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-holding-flowers_23-2149326532.jpg"},
|
||||
{
|
||||
name: "Tom B.", role: "Subscriber", company: "Home Decor", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-african-female-florist-smiling-cutting-stems-working-flower-shop-white-wall_176420-12231.jpg"},
|
||||
{
|
||||
name: "Lisa K.", role: "Wedding Client", company: "Happy Bride", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-couple-celebrating-engagement_23-2149401307.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
41
src/pages/HomePage/sections/TrustBanner.tsx
Normal file
41
src/pages/HomePage/sections/TrustBanner.tsx
Normal file
@@ -0,0 +1,41 @@
|
||||
import { Leaf, Globe, Truck } from "lucide-react";
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
|
||||
export default function TrustBanner() {
|
||||
const features = [
|
||||
{
|
||||
icon: Leaf,
|
||||
title: "Freshness Guaranteed",
|
||||
description: "Our flowers are hand-picked daily to ensure maximum freshness and longevity."
|
||||
},
|
||||
{
|
||||
icon: Globe,
|
||||
title: "Sustainably Sourced",
|
||||
description: "We partner with eco-conscious farms that prioritize sustainable growing practices."
|
||||
},
|
||||
{
|
||||
icon: Truck,
|
||||
title: "Same-Day Delivery",
|
||||
description: "Need it now? We offer reliable same-day delivery for those last-minute surprises."
|
||||
}
|
||||
];
|
||||
|
||||
return (
|
||||
<section data-webild-section="trust-banner" id="trust-banner" className="relative w-full py-16 bg-background">
|
||||
<div className="w-content-width mx-auto">
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
{features.map((feature, index) => (
|
||||
<ScrollReveal variant="fade" key={index} delay={index * 0.1} className="flex flex-col items-center text-center p-6 card rounded-lg">
|
||||
<div className="w-12 h-12 rounded-full bg-background-accent/10 flex items-center justify-center mb-4 text-accent">
|
||||
<feature.icon className="w-6 h-6" />
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-2">{feature.title}</h3>
|
||||
<p className="text-accent">{feature.description}</p>
|
||||
</ScrollReveal>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user