Compare commits
2 Commits
version_1_
...
version_2_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a2e333566 | ||
| fd872748a4 |
@@ -1,156 +1,35 @@
|
||||
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import HeroBrand from '@/components/sections/hero/HeroBrand';
|
||||
import PricingMediaCards from '@/components/sections/pricing/PricingMediaCards';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
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 PricingSection from './HomePage/sections/Pricing';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import SocialProofSection from './HomePage/sections/SocialProof';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBrand
|
||||
brand="Akwa Ngala"
|
||||
description="Crafting bespoke elegance in the heart of Owerri. Transforming visions into timeless couture for the discerning individual at Ikenegbu Layout."
|
||||
primaryButton={{
|
||||
text: "Explore Collection", href: "#features"}}
|
||||
secondaryButton={{
|
||||
text: "Book Consultation", href: "#pricing"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/close-up-industrial-sewing-machine_482257-90413.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
<SocialProofSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutMediaOverlay
|
||||
tag="Our Legacy"
|
||||
title="Excellence in Craftsmanship"
|
||||
description="Akwa Ngala represents the pinnacle of fashion design in Ikenegbu. We blend traditional techniques with modern aesthetic, creating pieces that resonate with grace and identity."
|
||||
imageSrc="http://img.b2bpic.net/free-photo/front-view-brazilian-woman-working-as-clothing-designer_23-2150762250.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Our Work"
|
||||
title="Bespoke Collections"
|
||||
description="Each garment is a unique creation, meticulously designed and tailored to fit your lifestyle and preference."
|
||||
items={[
|
||||
{
|
||||
title: "Couture Gowns", description: "Hand-stitched evening elegance.", buttonIcon: "Sparkles", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-girl-s-day-concept_23-2148594300.jpg"},
|
||||
{
|
||||
title: "Bespoke Suiting", description: "Tailored precision for gentlemen.", buttonIcon: "CheckCircle", imageSrc: "http://img.b2bpic.net/free-photo/ukrainian-embroidery-folk-arts-crafts_469670-25.jpg"},
|
||||
{
|
||||
title: "Traditional Fusion", description: "Modern twists on cultural styles.", buttonIcon: "Zap", imageSrc: "http://img.b2bpic.net/free-photo/mature-creative-handsome-dark-haired-caucasian-male-fashion-designer-black-suit-cutting-out-clothes-parts-from-fabric-with-scissors-spending-evening-studio_176420-11843.jpg"},
|
||||
{
|
||||
title: "Bridal Wear", description: "Memorable pieces for your big day.", buttonIcon: "Star", imageSrc: "http://img.b2bpic.net/free-photo/technology-makes-work-easier-portrait-focused-determined-designer-drawing-new-garment-concept-measure-everything-calculating-with-smartphone-sitting-near-sewing-machine-fabric_176420-14585.jpg"},
|
||||
{
|
||||
title: "Casual Luxury", description: "Elevated daily wear essentials.", buttonIcon: "Award", imageSrc: "http://img.b2bpic.net/free-photo/blonde-girl-with-short-blonde-hair-poses-white-suit-by-ladder_8353-5468.jpg"},
|
||||
{
|
||||
title: "Custom Embroidery", description: "Intricate detailing by hand.", buttonIcon: "Shield", imageSrc: "http://img.b2bpic.net/free-photo/fabric-textured-background_53876-14873.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingMediaCards
|
||||
tag="Services"
|
||||
title="Bespoke Design Experience"
|
||||
description="Select the level of craftsmanship and service your vision deserves."
|
||||
plans={[
|
||||
{
|
||||
tag: "Basic Fitting", price: "Custom", period: "/service", features: [
|
||||
"Personal consultation", "Fabric selection support", "Single fitting session"],
|
||||
primaryButton: {
|
||||
text: "Inquire", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-working-darkroom-side-view_23-2149893931.jpg"},
|
||||
{
|
||||
tag: "Premium Couture", price: "Custom", period: "/service", features: [
|
||||
"Dedicated designer", "Full fitting suite", "Fabric sourcing concierge", "Multiple design iterations"],
|
||||
primaryButton: {
|
||||
text: "Inquire", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/classy-man-tailor-shop_53876-24894.jpg"},
|
||||
{
|
||||
tag: "Bridal Package", price: "Custom", period: "/service", features: [
|
||||
"Comprehensive bridal consultation", "Embroidery and beadwork", "3+ fitting sessions", "On-site dressing support"],
|
||||
primaryButton: {
|
||||
text: "Inquire", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-making-jacket_23-2148898068.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<PricingSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Client Stories"
|
||||
title="Expressions of Elegance"
|
||||
description="Trusted by Owerri’s finest to bring their fashion dreams to life."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Chioma Okafor", role: "Entrepreneur", quote: "Akwa Ngala turned my vision into the perfect dress. Absolute perfection.", imageSrc: "http://img.b2bpic.net/free-photo/adult-brunette-woman-violet-gown-background-old-vintage-house-with-stairs_627829-8784.jpg"},
|
||||
{
|
||||
name: "Obinna Nwachukwu", role: "Architect", quote: "The tailoring on my suit was unparalleled. Exceptional attention to detail.", imageSrc: "http://img.b2bpic.net/free-photo/happy-friends-shopping-clothes_23-2148385702.jpg"},
|
||||
{
|
||||
name: "Amaka Ezenwa", role: "Doctor", quote: "Their work for my traditional wedding was breathtaking. Truly works of art.", imageSrc: "http://img.b2bpic.net/free-photo/fashion-portrait-two-stylish-caucasian-woman-blazers-french-cap-classic-white-hat-stand_343596-2183.jpg"},
|
||||
{
|
||||
name: "Chidi Ude", role: "Lawyer", quote: "Professional, punctual, and highly skilled. The best in Ikenegbu.", imageSrc: "http://img.b2bpic.net/free-photo/young-caucasian-woman-holding-shopping-bags-make-selfie-by-camera-clothing-store_839833-1916.jpg"},
|
||||
{
|
||||
name: "Ifunanya Okoro", role: "Consultant", quote: "I love how they blend modern styles with our heritage. Beautiful work.", imageSrc: "http://img.b2bpic.net/free-photo/woman-dress_1303-3787.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Information"
|
||||
title="Frequently Asked Questions"
|
||||
description="Clear answers to help you get started with your bespoke experience."
|
||||
categories={[
|
||||
{
|
||||
name: "Process", items: [
|
||||
{
|
||||
question: "How long does a custom piece take?", answer: "Typical lead time is 2-4 weeks depending on the complexity of your garment."},
|
||||
{
|
||||
question: "Do you provide fabrics?", answer: "We curate luxury fabrics, but you are welcome to bring your own for approval."},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Appointments", items: [
|
||||
{
|
||||
question: "Where are you located?", answer: "We are located at Ikenegbu Layout, Owerri, Imo State."},
|
||||
{
|
||||
question: "How do I book?", answer: "Use the contact form below or visit our studio in Owerri."},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Book Now"
|
||||
text="Ready to design your unique piece? Get in touch with Akwa Ngala to start your bespoke journey today."
|
||||
primaryButton={{
|
||||
text: "Contact Studio", href: "mailto:info@akwangala.com"}}
|
||||
secondaryButton={{
|
||||
text: "View Location", href: "https://maps.google.com"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
21
src/pages/HomePage/sections/About.tsx
Normal file
21
src/pages/HomePage/sections/About.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 "about" section.
|
||||
|
||||
import React from 'react';
|
||||
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutMediaOverlay
|
||||
tag="Our Legacy"
|
||||
title="Excellence in Craftsmanship"
|
||||
description="Akwa Ngala represents the pinnacle of fashion design in Ikenegbu. We blend traditional techniques with modern aesthetic, creating pieces that resonate with grace and identity."
|
||||
imageSrc="http://img.b2bpic.net/free-photo/front-view-brazilian-woman-working-as-clothing-designer_23-2150762250.jpg"
|
||||
/>
|
||||
</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="Book Now"
|
||||
text="Ready to design your unique piece? Get in touch with Akwa Ngala to start your bespoke journey today."
|
||||
primaryButton={{
|
||||
text: "Contact Studio", href: "mailto:info@akwangala.com"}}
|
||||
secondaryButton={{
|
||||
text: "View Location", href: "https://maps.google.com"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Faq.tsx
Normal file
38
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
// 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 FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Information"
|
||||
title="Frequently Asked Questions"
|
||||
description="Clear answers to help you get started with your bespoke experience."
|
||||
categories={[
|
||||
{
|
||||
name: "Process", items: [
|
||||
{
|
||||
question: "How long does a custom piece take?", answer: "Typical lead time is 2-4 weeks depending on the complexity of your garment."},
|
||||
{
|
||||
question: "Do you provide fabrics?", answer: "We curate luxury fabrics, but you are welcome to bring your own for approval."},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Appointments", items: [
|
||||
{
|
||||
question: "Where are you located?", answer: "We are located at Ikenegbu Layout, Owerri, Imo State."},
|
||||
{
|
||||
question: "How do I book?", answer: "Use the contact form below or visit our studio in Owerri."},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
34
src/pages/HomePage/sections/Features.tsx
Normal file
34
src/pages/HomePage/sections/Features.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 "features" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Our Work"
|
||||
title="Bespoke Collections"
|
||||
description="Each garment is a unique creation, meticulously designed and tailored to fit your lifestyle and preference."
|
||||
items={[
|
||||
{
|
||||
title: "Couture Gowns", description: "Hand-stitched evening elegance.", buttonIcon: "Sparkles", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-girl-s-day-concept_23-2148594300.jpg"},
|
||||
{
|
||||
title: "Bespoke Suiting", description: "Tailored precision for gentlemen.", buttonIcon: "CheckCircle", imageSrc: "http://img.b2bpic.net/free-photo/ukrainian-embroidery-folk-arts-crafts_469670-25.jpg"},
|
||||
{
|
||||
title: "Traditional Fusion", description: "Modern twists on cultural styles.", buttonIcon: "Zap", imageSrc: "http://img.b2bpic.net/free-photo/mature-creative-handsome-dark-haired-caucasian-male-fashion-designer-black-suit-cutting-out-clothes-parts-from-fabric-with-scissors-spending-evening-studio_176420-11843.jpg"},
|
||||
{
|
||||
title: "Bridal Wear", description: "Memorable pieces for your big day.", buttonIcon: "Star", imageSrc: "http://img.b2bpic.net/free-photo/technology-makes-work-easier-portrait-focused-determined-designer-drawing-new-garment-concept-measure-everything-calculating-with-smartphone-sitting-near-sewing-machine-fabric_176420-14585.jpg"},
|
||||
{
|
||||
title: "Casual Luxury", description: "Elevated daily wear essentials.", buttonIcon: "Award", imageSrc: "http://img.b2bpic.net/free-photo/blonde-girl-with-short-blonde-hair-poses-white-suit-by-ladder_8353-5468.jpg"},
|
||||
{
|
||||
title: "Custom Embroidery", description: "Intricate detailing by hand.", buttonIcon: "Shield", imageSrc: "http://img.b2bpic.net/free-photo/fabric-textured-background_53876-14873.jpg"},
|
||||
]}
|
||||
/>
|
||||
</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="Akwa Ngala"
|
||||
description="Crafting bespoke elegance in the heart of Owerri. Transforming visions into timeless couture for the discerning individual at Ikenegbu Layout."
|
||||
primaryButton={{
|
||||
text: "Explore Collection", href: "#features"}}
|
||||
secondaryButton={{
|
||||
text: "Book Consultation", href: "#pricing"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/close-up-industrial-sewing-machine_482257-90413.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
40
src/pages/HomePage/sections/Pricing.tsx
Normal file
40
src/pages/HomePage/sections/Pricing.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 "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="Services"
|
||||
title="Bespoke Design Experience"
|
||||
description="Select the level of craftsmanship and service your vision deserves."
|
||||
plans={[
|
||||
{
|
||||
tag: "Basic Fitting", price: "Custom", period: "/service", features: [
|
||||
"Personal consultation", "Fabric selection support", "Single fitting session"],
|
||||
primaryButton: {
|
||||
text: "Inquire", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-working-darkroom-side-view_23-2149893931.jpg"},
|
||||
{
|
||||
tag: "Premium Couture", price: "Custom", period: "/service", features: [
|
||||
"Dedicated designer", "Full fitting suite", "Fabric sourcing concierge", "Multiple design iterations"],
|
||||
primaryButton: {
|
||||
text: "Inquire", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/classy-man-tailor-shop_53876-24894.jpg"},
|
||||
{
|
||||
tag: "Bridal Package", price: "Custom", period: "/service", features: [
|
||||
"Comprehensive bridal consultation", "Embroidery and beadwork", "3+ fitting sessions", "On-site dressing support"],
|
||||
primaryButton: {
|
||||
text: "Inquire", href: "#contact"},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-making-jacket_23-2148898068.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
45
src/pages/HomePage/sections/SocialProof.tsx
Normal file
45
src/pages/HomePage/sections/SocialProof.tsx
Normal file
@@ -0,0 +1,45 @@
|
||||
import TextAnimation from '@/components/ui/TextAnimation';
|
||||
import ScrollReveal from '@/components/ui/ScrollReveal';
|
||||
import LoopCarousel from '@/components/ui/LoopCarousel';
|
||||
|
||||
export default function SocialProofSection() {
|
||||
return (
|
||||
<section data-webild-section="social-proof" id="social-proof" className="relative w-full py-24 bg-background overflow-hidden">
|
||||
<div className="w-content-width mx-auto px-6 mb-12 text-center">
|
||||
<TextAnimation
|
||||
text="Featured In"
|
||||
variant="fade-blur"
|
||||
tag="h3"
|
||||
className="text-sm font-bold uppercase tracking-widest text-muted-foreground mb-4"
|
||||
gradientText={false}
|
||||
/>
|
||||
<TextAnimation
|
||||
text="Trusted & Recognized"
|
||||
variant="slide-up"
|
||||
tag="h2"
|
||||
className="text-3xl md:text-4xl font-bold text-foreground mb-4"
|
||||
gradientText={false}
|
||||
/>
|
||||
<ScrollReveal variant="fade" delay={0.2}>
|
||||
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
|
||||
Recognized by leading fashion publications and local business associations for our commitment to couture excellence in Imo State.
|
||||
</p>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
|
||||
<ScrollReveal variant="slide-up" delay={0.4}>
|
||||
<div className="w-full border-y border-border py-8 bg-card/30">
|
||||
<LoopCarousel>
|
||||
{["Owerri Fashion Week", "Imo State Business Association", "BellaNaija Style", "AsoEbiBella", "Genevieve Magazine", "African Couture Council"].map((name, idx) => (
|
||||
<div key={idx} className="flex items-center justify-center px-8 md:px-16">
|
||||
<span className="text-xl md:text-2xl font-bold text-foreground/60 whitespace-nowrap">
|
||||
{name}
|
||||
</span>
|
||||
</div>
|
||||
))}
|
||||
</LoopCarousel>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
32
src/pages/HomePage/sections/Testimonials.tsx
Normal file
32
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,32 @@
|
||||
// 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 TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Client Stories"
|
||||
title="Expressions of Elegance"
|
||||
description="Trusted by Owerri’s finest to bring their fashion dreams to life."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Chioma Okafor", role: "Entrepreneur", quote: "Akwa Ngala turned my vision into the perfect dress. Absolute perfection.", imageSrc: "http://img.b2bpic.net/free-photo/adult-brunette-woman-violet-gown-background-old-vintage-house-with-stairs_627829-8784.jpg"},
|
||||
{
|
||||
name: "Obinna Nwachukwu", role: "Architect", quote: "The tailoring on my suit was unparalleled. Exceptional attention to detail.", imageSrc: "http://img.b2bpic.net/free-photo/happy-friends-shopping-clothes_23-2148385702.jpg"},
|
||||
{
|
||||
name: "Amaka Ezenwa", role: "Doctor", quote: "Their work for my traditional wedding was breathtaking. Truly works of art.", imageSrc: "http://img.b2bpic.net/free-photo/fashion-portrait-two-stylish-caucasian-woman-blazers-french-cap-classic-white-hat-stand_343596-2183.jpg"},
|
||||
{
|
||||
name: "Chidi Ude", role: "Lawyer", quote: "Professional, punctual, and highly skilled. The best in Ikenegbu.", imageSrc: "http://img.b2bpic.net/free-photo/young-caucasian-woman-holding-shopping-bags-make-selfie-by-camera-clothing-store_839833-1916.jpg"},
|
||||
{
|
||||
name: "Ifunanya Okoro", role: "Consultant", quote: "I love how they blend modern styles with our heritage. Beautiful work.", imageSrc: "http://img.b2bpic.net/free-photo/woman-dress_1303-3787.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user