Merge version_2_1781564746160 into main #4
@@ -1,144 +1,38 @@
|
||||
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import FeaturesBento from '@/components/sections/features/FeaturesBento';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import HeroBrand from '@/components/sections/hero/HeroBrand';
|
||||
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
|
||||
import TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
|
||||
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 ProductsSection from './HomePage/sections/Products';
|
||||
import FeaturesSection from './HomePage/sections/Features';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import CredibilitySection from './HomePage/sections/Credibility';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBrand
|
||||
brand="Mini Market Bab Salam"
|
||||
description="Your neighborhood destination for fresh produce, daily essentials, and local artisanal favorites. Quality you can trust, service you deserve."
|
||||
primaryButton={{
|
||||
text: "View Products", href: "#products"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us", href: "#contact"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/small-business-owners-giving-delivery-order-male-courier_482257-67620.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
<CredibilitySection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTextSplit
|
||||
title="Our Story"
|
||||
descriptions={[
|
||||
"Bab Salam was established to bring high-quality, farm-fresh ingredients to the heart of our community. We believe in transparency, sustainability, and building lasting relationships with our customers.", "Our team carefully selects every item on our shelves to ensure you only get the best for your home. From locally grown vegetables to daily fresh essentials, we are committed to freshness and excellence in everything we do."]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesImageBento
|
||||
tag="Fresh Selection"
|
||||
title="Shop Our Best"
|
||||
description="Discover a diverse selection of fresh and pantry items."
|
||||
items={[
|
||||
{ title: "Fresh Fruits", description: "Hand-picked daily.", imageSrc: "http://img.b2bpic.net/free-photo/avocado-lemon-with-bowl-spicy-green-plums-orange-avocado-lemons-tangerine-wicker-basket-picnic-cloth-top-view_176474-5262.jpg" },
|
||||
{ title: "Artisanal Bread", description: "Freshly baked every morning.", imageSrc: "http://img.b2bpic.net/free-photo/baked-breads-buns-kept-shelf_1170-2315.jpg" },
|
||||
{ title: "Premium Dairy", description: "Farm-fresh milk and cheese.", imageSrc: "http://img.b2bpic.net/free-photo/glass-showcase-pastry-shop-with-variety-fresh-cakes-pastries-popular-sweet-desserts-offered-sale_639032-1341.jpg" },
|
||||
{ title: "Organic Vegetables", description: "Grown locally, healthy choice.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-green-leafy-vegetables-shopping-cart-black-backdrop_23-2147944256.jpg" },
|
||||
{ title: "Specialty Spices", description: "Elevate your home cooking.", imageSrc: "http://img.b2bpic.net/free-photo/arranhement-with-jars-shelves_23-2148972903.jpg" },
|
||||
{ title: "Healthy Snacks", description: "Convenient and nutritious.", imageSrc: "http://img.b2bpic.net/free-photo/focused-african-american-man-holding-alcohol-drink_74855-3410.jpg" },
|
||||
{ title: "Gourmet Preserves", description: "Jams, honey, and pickles.", imageSrc: "http://img.b2bpic.net/free-photo/front-view-natural-pigments-composition-made-with-raw-elements_23-2148734443.jpg" },
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProductsSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesBento
|
||||
tag="Why Us"
|
||||
title="Quality First Commitment"
|
||||
description="Why the community loves shopping at Bab Salam."
|
||||
features={[
|
||||
{
|
||||
title: "Farm Fresh", description: "Direct from producers.", bentoComponent: "info-card-marquee", infoCards: [
|
||||
{ icon: "Leaf", label: "Freshness", value: "100%" },
|
||||
{ icon: "Truck", label: "Speed", value: "Daily" },
|
||||
{ icon: "Award", label: "Quality", value: "Top" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Community Focus", description: "Supporting local farmers.", bentoComponent: "chat-marquee", aiIcon: "Building2", userIcon: "Heart", exchanges: [
|
||||
{ userMessage: "Do you stock local honey?", aiResponse: "Yes! From local apiaries." },
|
||||
],
|
||||
placeholder: "Ask about our products..."},
|
||||
{
|
||||
title: "Sustainable Practices", description: "Reducing our carbon footprint.", bentoComponent: "orbiting-icons", centerIcon: "Recycle", orbitIcons: ["Leaf", "Sun", "Droplet", "Check"],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialQuoteCards
|
||||
tag="Customer Love"
|
||||
title="Hear From Our Community"
|
||||
description="Our customers are at the heart of everything we do."
|
||||
testimonials={[
|
||||
{ name: "Sarah Ahmed", role: "Regular Shopper", quote: "The freshest produce in the area. Always a pleasure visiting.", imageSrc: "http://img.b2bpic.net/free-photo/young-woman-supermarket-with-vegetables-fruits-buying-groceries_169016-19098.jpg" },
|
||||
{ name: "Omar Khalil", role: "Family Head", quote: "Reliable quality and friendly staff. My go-to market.", imageSrc: "http://img.b2bpic.net/free-photo/delivery-man-giving-groceries-order-customer_23-2149950077.jpg" },
|
||||
{ name: "Fatima Zahra", role: "Local Chef", quote: "Best selection of artisanal items. Great service too.", imageSrc: "http://img.b2bpic.net/free-photo/woman-with-shopping-bags-showing-something-shop-window_329181-18696.jpg" },
|
||||
{ name: "Ali Hassan", role: "Customer", quote: "I appreciate the local focus. Always fresh and clean.", imageSrc: "http://img.b2bpic.net/free-photo/cheerful-multiethnic-couple-grocery-store_23-2148216070.jpg" },
|
||||
{ name: "Layla Mansour", role: "Mom", quote: "Perfect for daily essentials. Very convenient location.", imageSrc: "http://img.b2bpic.net/free-photo/family-wearing-face-masks-walking-street_9975-24114.jpg" },
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsFeatureCards
|
||||
tag="By Numbers"
|
||||
title="Our Impact"
|
||||
description="Building a better community, one basket at a time."
|
||||
metrics={[
|
||||
{ value: "500+", title: "Products Stocked", features: ["Fresh produce", "Pantry staples", "Local delicacies"] },
|
||||
{ value: "15+", title: "Local Farmers", features: ["Direct partnerships", "Sustainable growth", "Organic focus"] },
|
||||
{ value: "2000+", title: "Happy Customers", features: ["Loyal shoppers", "Community trust", "Everyday service"] },
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTwoColumn
|
||||
tag="Support"
|
||||
title="Frequently Asked Questions"
|
||||
description="Need more information? We are here to help."
|
||||
items={[
|
||||
{ question: "Where are you located?", answer: "We are located at the heart of the community." },
|
||||
{ question: "Do you offer delivery?", answer: "Yes, we offer local delivery services." },
|
||||
{ question: "What are your opening hours?", answer: "We are open daily from 8:00 AM to 10:00 PM." },
|
||||
{ question: "Do you stock organic products?", answer: "Yes, a large selection of our produce is organic." },
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Visit Us"
|
||||
text="Have a question or looking for a specific item? Let us know!"
|
||||
primaryButton={{ text: "Contact Us", href: "mailto:hello@babsalam.com" }}
|
||||
secondaryButton={{ text: "Directions", href: "#" }}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
20
src/pages/HomePage/sections/About.tsx
Normal file
20
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
// 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 AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTextSplit
|
||||
title="Our Story"
|
||||
descriptions={[
|
||||
"Bab Salam was established to bring high-quality, farm-fresh ingredients to the heart of our community. We believe in transparency, sustainability, and building lasting relationships with our customers.", "Our team carefully selects every item on our shelves to ensure you only get the best for your home. From locally grown vegetables to daily fresh essentials, we are committed to freshness and excellence in everything we do."]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Contact.tsx
Normal file
21
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
// 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="Visit Us"
|
||||
text="Have a question or looking for a specific item? Let us know!"
|
||||
primaryButton={{ text: "Contact Us", href: "mailto:hello@babsalam.com" }}
|
||||
secondaryButton={{ text: "Directions", href: "#" }}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
67
src/pages/HomePage/sections/Credibility.tsx
Normal file
67
src/pages/HomePage/sections/Credibility.tsx
Normal file
@@ -0,0 +1,67 @@
|
||||
import { ShieldCheck, Leaf, Award, HeartHandshake } from "lucide-react";
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import Tag from "@/components/ui/Tag";
|
||||
|
||||
export default function CredibilitySection() {
|
||||
const features = [
|
||||
{
|
||||
icon: Award,
|
||||
title: "Quality Guaranteed",
|
||||
description: "Every item on our shelves meets our strict quality standards."
|
||||
},
|
||||
{
|
||||
icon: Leaf,
|
||||
title: "Certified Local",
|
||||
description: "We partner with local farmers to bring you fresh, seasonal produce."
|
||||
},
|
||||
{
|
||||
icon: ShieldCheck,
|
||||
title: "Food Safety First",
|
||||
description: "Rigorous hygiene and safety protocols in every aisle."
|
||||
},
|
||||
{
|
||||
icon: HeartHandshake,
|
||||
title: "Community Trusted",
|
||||
description: "Serving our neighborhood with pride and dedication."
|
||||
}
|
||||
];
|
||||
|
||||
return (
|
||||
<section data-webild-section="credibility" id="credibility" className="py-24 bg-background relative overflow-hidden">
|
||||
<div className="w-content-width mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="text-center max-w-3xl mx-auto mb-16">
|
||||
<ScrollReveal variant="fade">
|
||||
<Tag text="Quality First" className="mb-4" />
|
||||
</ScrollReveal>
|
||||
<TextAnimation
|
||||
text="Our Commitment to Excellence"
|
||||
variant="fade-blur"
|
||||
tag="h2"
|
||||
className="text-3xl md:text-4xl font-bold text-foreground mb-4"
|
||||
gradientText={false}
|
||||
/>
|
||||
<ScrollReveal variant="fade" delay={0.1}>
|
||||
<p className="text-lg text-muted-foreground">
|
||||
We source the finest local produce and guarantee the highest quality standards for our community.
|
||||
</p>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
|
||||
{features.map((feature, index) => (
|
||||
<ScrollReveal variant="fade" key={index} delay={0.1 * (index + 1)}>
|
||||
<div className="card p-6 flex flex-col items-center text-center h-full">
|
||||
<div className="w-16 h-16 rounded-full bg-primary-cta/10 flex items-center justify-center mb-6 text-primary-cta">
|
||||
<feature.icon className="w-8 h-8" />
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-3">{feature.title}</h3>
|
||||
<p className="text-muted-foreground">{feature.description}</p>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
26
src/pages/HomePage/sections/Faq.tsx
Normal file
26
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
// 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 FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTwoColumn
|
||||
tag="Support"
|
||||
title="Frequently Asked Questions"
|
||||
description="Need more information? We are here to help."
|
||||
items={[
|
||||
{ question: "Where are you located?", answer: "We are located at the heart of the community." },
|
||||
{ question: "Do you offer delivery?", answer: "Yes, we offer local delivery services." },
|
||||
{ question: "What are your opening hours?", answer: "We are open daily from 8:00 AM to 10:00 PM." },
|
||||
{ question: "Do you stock organic products?", answer: "Yes, a large selection of our produce is organic." },
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
37
src/pages/HomePage/sections/Features.tsx
Normal file
37
src/pages/HomePage/sections/Features.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 "features" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesBento from '@/components/sections/features/FeaturesBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesBento
|
||||
tag="Why Us"
|
||||
title="Quality First Commitment"
|
||||
description="Why the community loves shopping at Bab Salam."
|
||||
features={[
|
||||
{
|
||||
title: "Farm Fresh", description: "Direct from producers.", bentoComponent: "info-card-marquee", infoCards: [
|
||||
{ icon: "Leaf", label: "Freshness", value: "100%" },
|
||||
{ icon: "Truck", label: "Speed", value: "Daily" },
|
||||
{ icon: "Award", label: "Quality", value: "Top" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Community Focus", description: "Supporting local farmers.", bentoComponent: "chat-marquee", aiIcon: "Building2", userIcon: "Heart", exchanges: [
|
||||
{ userMessage: "Do you stock local honey?", aiResponse: "Yes! From local apiaries." },
|
||||
],
|
||||
placeholder: "Ask about our products..."},
|
||||
{
|
||||
title: "Sustainable Practices", description: "Reducing our carbon footprint.", bentoComponent: "orbiting-icons", centerIcon: "Recycle", orbitIcons: ["Leaf", "Sun", "Droplet", "Check"],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
24
src/pages/HomePage/sections/Hero.tsx
Normal file
24
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,24 @@
|
||||
// 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 HeroBrand from '@/components/sections/hero/HeroBrand';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBrand
|
||||
brand="Mini Market Bab Salam"
|
||||
description="Your neighborhood destination for fresh produce, daily essentials, and local artisanal favorites. Quality you can trust, service you deserve."
|
||||
primaryButton={{
|
||||
text: "View Products", href: "#products"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us", href: "#contact"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/small-business-owners-giving-delivery-order-male-courier_482257-67620.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
25
src/pages/HomePage/sections/Metrics.tsx
Normal file
25
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,25 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsFeatureCards
|
||||
tag="By Numbers"
|
||||
title="Our Impact"
|
||||
description="Building a better community, one basket at a time."
|
||||
metrics={[
|
||||
{ value: "500+", title: "Products Stocked", features: ["Fresh produce", "Pantry staples", "Local delicacies"] },
|
||||
{ value: "15+", title: "Local Farmers", features: ["Direct partnerships", "Sustainable growth", "Organic focus"] },
|
||||
{ value: "2000+", title: "Happy Customers", features: ["Loyal shoppers", "Community trust", "Everyday service"] },
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Products.tsx
Normal file
29
src/pages/HomePage/sections/Products.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 "products" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ProductsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesImageBento
|
||||
tag="Fresh Selection"
|
||||
title="Shop Our Best"
|
||||
description="Discover a diverse selection of fresh and pantry items."
|
||||
items={[
|
||||
{ title: "Fresh Fruits", description: "Hand-picked daily.", imageSrc: "http://img.b2bpic.net/free-photo/avocado-lemon-with-bowl-spicy-green-plums-orange-avocado-lemons-tangerine-wicker-basket-picnic-cloth-top-view_176474-5262.jpg" },
|
||||
{ title: "Artisanal Bread", description: "Freshly baked every morning.", imageSrc: "http://img.b2bpic.net/free-photo/baked-breads-buns-kept-shelf_1170-2315.jpg" },
|
||||
{ title: "Premium Dairy", description: "Farm-fresh milk and cheese.", imageSrc: "http://img.b2bpic.net/free-photo/glass-showcase-pastry-shop-with-variety-fresh-cakes-pastries-popular-sweet-desserts-offered-sale_639032-1341.jpg" },
|
||||
{ title: "Organic Vegetables", description: "Grown locally, healthy choice.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-green-leafy-vegetables-shopping-cart-black-backdrop_23-2147944256.jpg" },
|
||||
{ title: "Specialty Spices", description: "Elevate your home cooking.", imageSrc: "http://img.b2bpic.net/free-photo/arranhement-with-jars-shelves_23-2148972903.jpg" },
|
||||
{ title: "Healthy Snacks", description: "Convenient and nutritious.", imageSrc: "http://img.b2bpic.net/free-photo/focused-african-american-man-holding-alcohol-drink_74855-3410.jpg" },
|
||||
{ title: "Gourmet Preserves", description: "Jams, honey, and pickles.", imageSrc: "http://img.b2bpic.net/free-photo/front-view-natural-pigments-composition-made-with-raw-elements_23-2148734443.jpg" },
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Testimonials.tsx
Normal file
27
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
// 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 TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialQuoteCards
|
||||
tag="Customer Love"
|
||||
title="Hear From Our Community"
|
||||
description="Our customers are at the heart of everything we do."
|
||||
testimonials={[
|
||||
{ name: "Sarah Ahmed", role: "Regular Shopper", quote: "The freshest produce in the area. Always a pleasure visiting.", imageSrc: "http://img.b2bpic.net/free-photo/young-woman-supermarket-with-vegetables-fruits-buying-groceries_169016-19098.jpg" },
|
||||
{ name: "Omar Khalil", role: "Family Head", quote: "Reliable quality and friendly staff. My go-to market.", imageSrc: "http://img.b2bpic.net/free-photo/delivery-man-giving-groceries-order-customer_23-2149950077.jpg" },
|
||||
{ name: "Fatima Zahra", role: "Local Chef", quote: "Best selection of artisanal items. Great service too.", imageSrc: "http://img.b2bpic.net/free-photo/woman-with-shopping-bags-showing-something-shop-window_329181-18696.jpg" },
|
||||
{ name: "Ali Hassan", role: "Customer", quote: "I appreciate the local focus. Always fresh and clean.", imageSrc: "http://img.b2bpic.net/free-photo/cheerful-multiethnic-couple-grocery-store_23-2148216070.jpg" },
|
||||
{ name: "Layla Mansour", role: "Mom", quote: "Perfect for daily essentials. Very convenient location.", imageSrc: "http://img.b2bpic.net/free-photo/family-wearing-face-masks-walking-street_9975-24114.jpg" },
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user