Compare commits
2 Commits
version_1_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 938487ea48 | |||
|
|
36713f801f |
@@ -5,15 +5,15 @@
|
||||
|
||||
:root {
|
||||
/* @colorThemes/lightTheme/grayNavyBlue */
|
||||
--background: #f5faff;
|
||||
--card: #ffffff;
|
||||
--foreground: #001122;
|
||||
--primary-cta: #15479c;
|
||||
--primary-cta-text: #f5faff;
|
||||
--background: #ffffff;
|
||||
--card: #fbfbfb;
|
||||
--foreground: #1a1a1a;
|
||||
--primary-cta: #c5a059;
|
||||
--primary-cta-text: #ffffff;
|
||||
--secondary-cta: #ffffff;
|
||||
--secondary-cta-text: #001122;
|
||||
--accent: #a8cce8;
|
||||
--background-accent: #7ba3cf;
|
||||
--secondary-cta-text: #1a1a1a;
|
||||
--accent: #f4e4c1;
|
||||
--background-accent: #e6d5b8;
|
||||
|
||||
/* @layout/border-radius/rounded */
|
||||
--radius: 0.5rem;
|
||||
|
||||
@@ -1,251 +1,36 @@
|
||||
import AboutText from '@/components/sections/about/AboutText';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroSplit from '@/components/sections/hero/HeroSplit';
|
||||
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
|
||||
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
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 FeaturesSection from './HomePage/sections/Features';
|
||||
import ProductsSection from './HomePage/sections/Products';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplit
|
||||
tag="NEW COLLECTION"
|
||||
title="Timeless Elegance by SB Boutique"
|
||||
description="Discover curated fashion that defines your unique style. Sophisticated designs crafted for the modern individual."
|
||||
primaryButton={{
|
||||
text: "View Catalog",
|
||||
href: "#products",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Story",
|
||||
href: "#about",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/pensive-girl-shopping-center_23-2147669887.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutText
|
||||
title="Refining Modern Luxury"
|
||||
primaryButton={{
|
||||
text: "Read Our Vision",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesDetailedSteps
|
||||
tag="Quality"
|
||||
title="Excellence in Every Detail"
|
||||
description="We ensure every item meets our high standards for craftsmanship."
|
||||
steps={[
|
||||
{
|
||||
tag: "Craft",
|
||||
title: "Artisanal",
|
||||
subtitle: "Quality Focus",
|
||||
description: "Hand-picked materials and finishes.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/sewing-buttons_23-2148145926.jpg",
|
||||
},
|
||||
{
|
||||
tag: "Trend",
|
||||
title: "Timeless",
|
||||
subtitle: "Design Ethos",
|
||||
description: "Classic looks designed to last.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stacked-aesthetic-objects-still-life_23-2150230644.jpg",
|
||||
},
|
||||
{
|
||||
tag: "Style",
|
||||
title: "Exclusive",
|
||||
subtitle: "Curated Pieces",
|
||||
description: "Items tailored for uniqueness.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-traveler-women-s-outfit-accessories_1357-91.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Selection"
|
||||
title="Our Featured Products"
|
||||
description="Explore our curated boutique collection."
|
||||
items={[
|
||||
{
|
||||
title: "Silk Scarf",
|
||||
description: "100% premium silk.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-woman-beach-covering-her-face-with-veil_23-2149460544.jpg",
|
||||
},
|
||||
{
|
||||
title: "Gold Bracelet",
|
||||
description: "18k gold plated.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stylish-woman-vacation-beach-colorful-yellow-sunglasess-smiling-happy-accessories-jewelry_285396-6638.jpg",
|
||||
},
|
||||
{
|
||||
title: "Leather Bag",
|
||||
description: "Full grain leather.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/elderly-woman-coat-outside-cafe_1303-19485.jpg",
|
||||
},
|
||||
{
|
||||
title: "Classic Watch",
|
||||
description: "Precision timekeeping.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/still-life-tech-device_23-2150722614.jpg",
|
||||
},
|
||||
{
|
||||
title: "Evening Clutch",
|
||||
description: "Elegant design.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934356.jpg",
|
||||
},
|
||||
{
|
||||
title: "Stud Earrings",
|
||||
description: "Minimalist gold.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/expensive-golden-ring-with-white-powder-background_23-2150347039.jpg",
|
||||
},
|
||||
{
|
||||
title: "Leather Belt",
|
||||
description: "Premium finish.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/fashion-portrait-young-businessman-handsome-model-man-casual-cloth-suit-with-accesories-hands_158538-9446.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProductsSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsMediaCards
|
||||
tag="Growth"
|
||||
title="Boutique Achievements"
|
||||
description="Serving fashion enthusiasts worldwide."
|
||||
metrics={[
|
||||
{
|
||||
value: "1500+",
|
||||
title: "Happy Clients",
|
||||
description: "Trusted by discerning shoppers.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-women-taking-selfie-together_23-2148385694.jpg",
|
||||
},
|
||||
{
|
||||
value: "500+",
|
||||
title: "Styles Curated",
|
||||
description: "Diverse high-end selection.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-man-going-art-gallery_23-2149709093.jpg",
|
||||
},
|
||||
{
|
||||
value: "10+",
|
||||
title: "Awards Won",
|
||||
description: "Recognition for design excellence.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/positive-female-assistant-serving-young-customer-clothing-boutique_23-2148101718.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Reviews"
|
||||
title="What Our Clients Say"
|
||||
description="Customer experiences at SB Boutique."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Amira K.",
|
||||
role: "Fashion Editor",
|
||||
quote: "The gold collection is absolutely stunning.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-beautiful-fashionable-woman-stylish-clothes-glasses-standing-against-skyscraper_613910-20972.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah L.",
|
||||
role: "Designer",
|
||||
quote: "Elegant designs and fast shipping.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-woman-dress-eyeglasses_171337-2832.jpg",
|
||||
},
|
||||
{
|
||||
name: "Leila B.",
|
||||
role: "Blogger",
|
||||
quote: "SB Boutique defines class in every stitch.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/fashionable-young-woman-taking-selfie-smart-phone-outdoor_23-2148148153.jpg",
|
||||
},
|
||||
{
|
||||
name: "Omar D.",
|
||||
role: "Architect",
|
||||
quote: "Gifted my wife a piece; she loved it.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-leaning-table-near-plant-pot-looking-camera_23-2148042721.jpg",
|
||||
},
|
||||
{
|
||||
name: "Nora H.",
|
||||
role: "Marketing",
|
||||
quote: "Great quality and customer service.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/indoor-shot-charming-young-female-with-chocolate-hair-wearing-black-dress_273609-9527.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTwoColumn
|
||||
tag="Support"
|
||||
title="Frequently Asked Questions"
|
||||
description="Information regarding our boutique services."
|
||||
items={[
|
||||
{
|
||||
question: "Shipping times?",
|
||||
answer: "Usually 3-5 business days.",
|
||||
},
|
||||
{
|
||||
question: "Return policy?",
|
||||
answer: "14-day hassle-free returns.",
|
||||
},
|
||||
{
|
||||
question: "Gold quality?",
|
||||
answer: "All gold is certified 18k.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Get In Touch"
|
||||
text="Join our newsletter for exclusive style updates."
|
||||
primaryButton={{
|
||||
text: "Contact Us",
|
||||
href: "mailto:support@sbboutique.com",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Follow Us",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
22
src/pages/HomePage/sections/About.tsx
Normal file
22
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,22 @@
|
||||
// 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="Refining Modern Luxury"
|
||||
primaryButton={{
|
||||
text: "Read Our Vision",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Contact.tsx
Normal file
27
src/pages/HomePage/sections/Contact.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 "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="Get In Touch"
|
||||
text="Join our newsletter for exclusive style updates."
|
||||
primaryButton={{
|
||||
text: "Contact Us",
|
||||
href: "mailto:support@sbboutique.com",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Follow Us",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
34
src/pages/HomePage/sections/Faq.tsx
Normal file
34
src/pages/HomePage/sections/Faq.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 "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="Information regarding our boutique services."
|
||||
items={[
|
||||
{
|
||||
question: "Shipping times?",
|
||||
answer: "Usually 3-5 business days.",
|
||||
},
|
||||
{
|
||||
question: "Return policy?",
|
||||
answer: "14-day hassle-free returns.",
|
||||
},
|
||||
{
|
||||
question: "Gold quality?",
|
||||
answer: "All gold is certified 18k.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
43
src/pages/HomePage/sections/Features.tsx
Normal file
43
src/pages/HomePage/sections/Features.tsx
Normal file
@@ -0,0 +1,43 @@
|
||||
// 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 FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesDetailedSteps
|
||||
tag="Quality"
|
||||
title="Excellence in Every Detail"
|
||||
description="We ensure every item meets our high standards for craftsmanship."
|
||||
steps={[
|
||||
{
|
||||
tag: "Craft",
|
||||
title: "Artisanal",
|
||||
subtitle: "Quality Focus",
|
||||
description: "Hand-picked materials and finishes.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/sewing-buttons_23-2148145926.jpg",
|
||||
},
|
||||
{
|
||||
tag: "Trend",
|
||||
title: "Timeless",
|
||||
subtitle: "Design Ethos",
|
||||
description: "Classic looks designed to last.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stacked-aesthetic-objects-still-life_23-2150230644.jpg",
|
||||
},
|
||||
{
|
||||
tag: "Style",
|
||||
title: "Exclusive",
|
||||
subtitle: "Curated Pieces",
|
||||
description: "Items tailored for uniqueness.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-traveler-women-s-outfit-accessories_1357-91.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 HeroSplit from '@/components/sections/hero/HeroSplit';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplit
|
||||
tag="NEW COLLECTION"
|
||||
title="Timeless Elegance by SB Boutique"
|
||||
description="Discover curated fashion that defines your unique style. Sophisticated designs crafted for the modern individual."
|
||||
primaryButton={{
|
||||
text: "View Catalog",
|
||||
href: "#products",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Story",
|
||||
href: "#about",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/pensive-girl-shopping-center_23-2147669887.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
40
src/pages/HomePage/sections/Metrics.tsx
Normal file
40
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
// 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 MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsMediaCards
|
||||
tag="Growth"
|
||||
title="Boutique Achievements"
|
||||
description="Serving fashion enthusiasts worldwide."
|
||||
metrics={[
|
||||
{
|
||||
value: "1500+",
|
||||
title: "Happy Clients",
|
||||
description: "Trusted by discerning shoppers.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-women-taking-selfie-together_23-2148385694.jpg",
|
||||
},
|
||||
{
|
||||
value: "500+",
|
||||
title: "Styles Curated",
|
||||
description: "Diverse high-end selection.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-man-going-art-gallery_23-2149709093.jpg",
|
||||
},
|
||||
{
|
||||
value: "10+",
|
||||
title: "Awards Won",
|
||||
description: "Recognition for design excellence.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/positive-female-assistant-serving-young-customer-clothing-boutique_23-2148101718.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
64
src/pages/HomePage/sections/Products.tsx
Normal file
64
src/pages/HomePage/sections/Products.tsx
Normal file
@@ -0,0 +1,64 @@
|
||||
// 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 FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ProductsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Selection"
|
||||
title="Our Featured Products"
|
||||
description="Explore our curated boutique collection."
|
||||
items={[
|
||||
{
|
||||
title: "Silk Scarf",
|
||||
description: "100% premium silk.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-woman-beach-covering-her-face-with-veil_23-2149460544.jpg",
|
||||
},
|
||||
{
|
||||
title: "Gold Bracelet",
|
||||
description: "18k gold plated.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stylish-woman-vacation-beach-colorful-yellow-sunglasess-smiling-happy-accessories-jewelry_285396-6638.jpg",
|
||||
},
|
||||
{
|
||||
title: "Leather Bag",
|
||||
description: "Full grain leather.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/elderly-woman-coat-outside-cafe_1303-19485.jpg",
|
||||
},
|
||||
{
|
||||
title: "Classic Watch",
|
||||
description: "Precision timekeeping.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/still-life-tech-device_23-2150722614.jpg",
|
||||
},
|
||||
{
|
||||
title: "Evening Clutch",
|
||||
description: "Elegant design.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934356.jpg",
|
||||
},
|
||||
{
|
||||
title: "Stud Earrings",
|
||||
description: "Minimalist gold.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/expensive-golden-ring-with-white-powder-background_23-2150347039.jpg",
|
||||
},
|
||||
{
|
||||
title: "Leather Belt",
|
||||
description: "Premium finish.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/fashion-portrait-young-businessman-handsome-model-man-casual-cloth-suit-with-accesories-hands_158538-9446.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Testimonials.tsx
Normal file
57
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// 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 TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Reviews"
|
||||
title="What Our Clients Say"
|
||||
description="Customer experiences at SB Boutique."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Amira K.",
|
||||
role: "Fashion Editor",
|
||||
quote: "The gold collection is absolutely stunning.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-beautiful-fashionable-woman-stylish-clothes-glasses-standing-against-skyscraper_613910-20972.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah L.",
|
||||
role: "Designer",
|
||||
quote: "Elegant designs and fast shipping.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-woman-dress-eyeglasses_171337-2832.jpg",
|
||||
},
|
||||
{
|
||||
name: "Leila B.",
|
||||
role: "Blogger",
|
||||
quote: "SB Boutique defines class in every stitch.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/fashionable-young-woman-taking-selfie-smart-phone-outdoor_23-2148148153.jpg",
|
||||
},
|
||||
{
|
||||
name: "Omar D.",
|
||||
role: "Architect",
|
||||
quote: "Gifted my wife a piece; she loved it.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-leaning-table-near-plant-pot-looking-camera_23-2148042721.jpg",
|
||||
},
|
||||
{
|
||||
name: "Nora H.",
|
||||
role: "Marketing",
|
||||
quote: "Great quality and customer service.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/indoor-shot-charming-young-female-with-chocolate-hair-wearing-black-dress_273609-9527.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user