Merge version_2_1781437252817 into main #2
@@ -35,7 +35,7 @@ export default function Layout() {
|
||||
<SiteBackgroundSlot />
|
||||
<SectionErrorBoundary name="navbar">
|
||||
<NavbarFloatingLogo
|
||||
logo="Black Toque"
|
||||
logo="Black Toque Patisserie"
|
||||
logoImageSrc="http://img.b2bpic.net/free-vector/retro-bakery-logo-concept_23-2148496816.jpg"
|
||||
ctaButton={{
|
||||
text: "Order Online", href: "#contact"}}
|
||||
|
||||
@@ -1,171 +1,36 @@
|
||||
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||
import FeaturesArrowCards from '@/components/sections/features/FeaturesArrowCards';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
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 ProductsSection from './HomePage/sections/Products';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import SocialSection from './HomePage/sections/Social';
|
||||
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">
|
||||
<HeroBillboardCarousel
|
||||
tag="Artisanal Perfection"
|
||||
title="Black Toque Patisserie"
|
||||
description="Experience the delicate artistry of authentic French pastry, crafted daily with premium ingredients and passion."
|
||||
primaryButton={{
|
||||
text: "View Menu", href: "#products"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us", href: "#contact"}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/half-shot-delicious-mini-cake-with-fruits-green-plate-mixed-color-background_140725-140193.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/selective-focus-shot-delicious-poppy-seed-rolls-with-sugar-glaze-basket_181624-44761.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/closeup-photo-huge-variety-desserts-buffet_627829-6133.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/slice-coconut-cake-with-nuts-berries-served-with-cup-red-drink_114579-38703.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-woman-choosing-cake-standing-front-glass-cabinet_23-2148027959.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-tasty-dessert-arrangement_23-2149022020.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTestimonial
|
||||
tag="Our Story"
|
||||
quote="Every pastry tells a story of tradition, refined technique, and the finest local ingredients we can find."
|
||||
author="Chef Julianne"
|
||||
role="Founder & Head Pastry Chef"
|
||||
imageSrc="http://img.b2bpic.net/free-photo/front-view-children-eating-cookies-together-christmas-day_23-2148738678.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesArrowCards
|
||||
tag="The Black Toque Difference"
|
||||
title="Why Our Pastries Are Different"
|
||||
description="We believe in slow-baking processes and heritage recipes that honor the French craft."
|
||||
items={[
|
||||
{
|
||||
title: "100% Organic Butter", tags: [
|
||||
"Premium", "Quality"],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/espresso-coffee-braided-with-pecans-maple-syrup-dark-table-sweet-pastries-breakfast-hotel-view-from_166373-2512.jpg"},
|
||||
{
|
||||
title: "Heritage Grains", tags: [
|
||||
"Traditional", "Healthy"],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/baguettes-market-france_1147-553.jpg"},
|
||||
{
|
||||
title: "Fresh Daily Production", tags: [
|
||||
"Fresh", "Artisan"],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/glass-showcase-pastry-shop-with-variety-fresh-cakes-pastries-popular-sweet-desserts-offered-sale_639032-1341.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesImageBento
|
||||
tag="Our Menu"
|
||||
title="Handcrafted Delicacies"
|
||||
description="Explore our curated selection of signature French pastries."
|
||||
items={[
|
||||
{
|
||||
title: "Macaron Selection", description: "Classic French almond cookies.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-chocolate-eclairs-rectangle-plate-dark-wooden-surface_140725-90867.jpg"},
|
||||
{
|
||||
title: "Buttery Croissants", description: "Flaky, golden goodness.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-homemade-delicious-jam-croissants_23-2148525206.jpg"},
|
||||
{
|
||||
title: "Seasonal Fruit Tarts", description: "Fresh, locally sourced fruits.", imageSrc: "http://img.b2bpic.net/free-photo/view-freshly-baked-soft-cake-with-fruits-flowers-mixed-color-table_140725-86509.jpg"},
|
||||
{
|
||||
title: "Chocolate Ganache", description: "Rich, decadent dark chocolate.", imageSrc: "http://img.b2bpic.net/free-photo/fresh-homemade-cookies-wooden-board_114579-61372.jpg"},
|
||||
{
|
||||
title: "Classic Madeleines", description: "Soft, zesty sponge cakes.", imageSrc: "http://img.b2bpic.net/free-photo/bowl-flaky-cookies-decorative-branches-marble-background_114579-25775.jpg"},
|
||||
{
|
||||
title: "Signature Millefeuille", description: "Layered puff pastry delight.", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-puff-pastry-cake-decorated-with-berries_1262-19975.jpg"},
|
||||
{
|
||||
title: "Delicate Profiteroles", description: "Creamy puffs with chocolate.", imageSrc: "http://img.b2bpic.net/free-photo/caramel-chocolate-sauce-drizzling-dessert_84443-94462.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProductsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Words from Lovers"
|
||||
title="What People Say About Us"
|
||||
description="Join our community of pastry enthusiasts who appreciate the craft."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Claire R.", role: "Food Critic", quote: "The best croissants in the city, bar none.", imageSrc: "http://img.b2bpic.net/free-photo/curly-girl-with-beatiful-smile-keeping-cup-coffee-looking-camera_7502-9179.jpg"},
|
||||
{
|
||||
name: "Mark D.", role: "Regular", quote: "A daily ritual I simply cannot skip.", imageSrc: "http://img.b2bpic.net/free-photo/girl-with-cheesecake_1303-3947.jpg"},
|
||||
{
|
||||
name: "Elena S.", role: "Wedding Planner", quote: "Stunning presentation and even better taste.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-cheerful-dark-skinned-female-with-frizzy-hair-blogs-networks-smart-phone-has-dinner-break-eats-exotic-dish-cafe-connected-high-speed-internet-woman-sends-messages_273609-2188.jpg"},
|
||||
{
|
||||
name: "Jason W.", role: "Food Blogger", quote: "Authentic French quality in every bite.", imageSrc: "http://img.b2bpic.net/free-photo/woman-showing-her-perfect-straight-white-teeth_114579-58837.jpg"},
|
||||
{
|
||||
name: "Sarah P.", role: "Customer", quote: "Pure perfection. I'm hooked!", imageSrc: "http://img.b2bpic.net/free-photo/happiness-leisure-lifestyle-concept-smiling-african-american-female-recreates-cafe-restaurant-eats-delicious-dessert-drinks-cocktail-happy-have-pleasant-conversation-with-interlocutor_273609-2194.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="social" data-section="social">
|
||||
<SectionErrorBoundary name="social">
|
||||
<SocialProofMarquee
|
||||
tag="Recognized Excellence"
|
||||
title="Featured In"
|
||||
description="Our work has been recognized by top culinary publications and experts."
|
||||
names={[
|
||||
"Food & Wine", "The Daily Eater", "Artisan Monthly", "Patisserie Guild", "City Tastes", "Culinary Excellence", "The Local Foodie"]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<SocialSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSplitMedia
|
||||
tag="Common Questions"
|
||||
title="We're Here to Help"
|
||||
description="Everything you need to know about our patisserie and ordering."
|
||||
items={[
|
||||
{
|
||||
question: "Do you offer catering?", answer: "Yes, we specialize in high-end catering for weddings and corporate events."},
|
||||
{
|
||||
question: "Are ingredients organic?", answer: "We prioritize organic and locally sourced ingredients whenever possible."},
|
||||
{
|
||||
question: "Can I place custom orders?", answer: "Custom orders require 48 hours notice; please contact us to discuss your needs."},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/sweet-homemade-layered-honey-cake-with-spices-nuts_114579-29744.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Get In Touch"
|
||||
text="Ready to taste the difference? Visit our boutique or place an order today."
|
||||
primaryButton={{
|
||||
text: "View Location", href: "#"}}
|
||||
secondaryButton={{
|
||||
text: "Send Message", href: "mailto:hello@blacktoque.com"}}
|
||||
/>
|
||||
</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 AboutTestimonial from '@/components/sections/about/AboutTestimonial';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTestimonial
|
||||
tag="Our Story"
|
||||
quote="Every pastry tells a story of tradition, refined technique, and the finest local ingredients we can find."
|
||||
author="Chef Julianne"
|
||||
role="Founder & Head Pastry Chef"
|
||||
imageSrc="http://img.b2bpic.net/free-photo/front-view-children-eating-cookies-together-christmas-day_23-2148738678.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="Get In Touch"
|
||||
text="Ready to taste the difference? Visit our boutique or place an order today."
|
||||
primaryButton={{
|
||||
text: "View Location", href: "#"}}
|
||||
secondaryButton={{
|
||||
text: "Send Message", href: "mailto:hello@blacktoque.com"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Faq.tsx
Normal file
29
src/pages/HomePage/sections/Faq.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 "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSplitMedia
|
||||
tag="Common Questions"
|
||||
title="We're Here to Help"
|
||||
description="Everything you need to know about our patisserie and ordering."
|
||||
items={[
|
||||
{
|
||||
question: "Do you offer catering?", answer: "Yes, we specialize in high-end catering for weddings and corporate events."},
|
||||
{
|
||||
question: "Are ingredients organic?", answer: "We prioritize organic and locally sourced ingredients whenever possible."},
|
||||
{
|
||||
question: "Can I place custom orders?", answer: "Custom orders require 48 hours notice; please contact us to discuss your needs."},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/sweet-homemade-layered-honey-cake-with-spices-nuts_114579-29744.jpg"
|
||||
/>
|
||||
</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 FeaturesArrowCards from '@/components/sections/features/FeaturesArrowCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesArrowCards
|
||||
tag="The Black Toque Difference"
|
||||
title="Why Our Pastries Are Different"
|
||||
description="We believe in slow-baking processes and heritage recipes that honor the French craft."
|
||||
items={[
|
||||
{
|
||||
title: "100% Organic Butter", tags: [
|
||||
"Premium", "Quality"],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/espresso-coffee-braided-with-pecans-maple-syrup-dark-table-sweet-pastries-breakfast-hotel-view-from_166373-2512.jpg"},
|
||||
{
|
||||
title: "Heritage Grains", tags: [
|
||||
"Traditional", "Healthy"],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/baguettes-market-france_1147-553.jpg"},
|
||||
{
|
||||
title: "Fresh Daily Production", tags: [
|
||||
"Fresh", "Artisan"],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/glass-showcase-pastry-shop-with-variety-fresh-cakes-pastries-popular-sweet-desserts-offered-sale_639032-1341.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Hero.tsx
Normal file
38
src/pages/HomePage/sections/Hero.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 "hero" section.
|
||||
|
||||
import React from 'react';
|
||||
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardCarousel
|
||||
tag="Artisanal Perfection"
|
||||
title="Black Toque Patisserie"
|
||||
description="Experience the delicate artistry of authentic French pastry, crafted daily with premium ingredients and passion."
|
||||
primaryButton={{
|
||||
text: "View Menu", href: "#products"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us", href: "#contact"}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/half-shot-delicious-mini-cake-with-fruits-green-plate-mixed-color-background_140725-140193.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/selective-focus-shot-delicious-poppy-seed-rolls-with-sugar-glaze-basket_181624-44761.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/closeup-photo-huge-variety-desserts-buffet_627829-6133.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/slice-coconut-cake-with-nuts-berries-served-with-cup-red-drink_114579-38703.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-woman-choosing-cake-standing-front-glass-cabinet_23-2148027959.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-tasty-dessert-arrangement_23-2149022020.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
36
src/pages/HomePage/sections/Products.tsx
Normal file
36
src/pages/HomePage/sections/Products.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 "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="Our Menu"
|
||||
title="Handcrafted Delicacies"
|
||||
description="Explore our curated selection of signature French pastries."
|
||||
items={[
|
||||
{
|
||||
title: "Macaron Selection", description: "Classic French almond cookies.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-chocolate-eclairs-rectangle-plate-dark-wooden-surface_140725-90867.jpg"},
|
||||
{
|
||||
title: "Buttery Croissants", description: "Flaky, golden goodness.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-homemade-delicious-jam-croissants_23-2148525206.jpg"},
|
||||
{
|
||||
title: "Seasonal Fruit Tarts", description: "Fresh, locally sourced fruits.", imageSrc: "http://img.b2bpic.net/free-photo/view-freshly-baked-soft-cake-with-fruits-flowers-mixed-color-table_140725-86509.jpg"},
|
||||
{
|
||||
title: "Chocolate Ganache", description: "Rich, decadent dark chocolate.", imageSrc: "http://img.b2bpic.net/free-photo/fresh-homemade-cookies-wooden-board_114579-61372.jpg"},
|
||||
{
|
||||
title: "Classic Madeleines", description: "Soft, zesty sponge cakes.", imageSrc: "http://img.b2bpic.net/free-photo/bowl-flaky-cookies-decorative-branches-marble-background_114579-25775.jpg"},
|
||||
{
|
||||
title: "Signature Millefeuille", description: "Layered puff pastry delight.", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-puff-pastry-cake-decorated-with-berries_1262-19975.jpg"},
|
||||
{
|
||||
title: "Delicate Profiteroles", description: "Creamy puffs with chocolate.", imageSrc: "http://img.b2bpic.net/free-photo/caramel-chocolate-sauce-drizzling-dessert_84443-94462.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
22
src/pages/HomePage/sections/Social.tsx
Normal file
22
src/pages/HomePage/sections/Social.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 "social" section.
|
||||
|
||||
import React from 'react';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function SocialSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="social" data-section="social">
|
||||
<SectionErrorBoundary name="social">
|
||||
<SocialProofMarquee
|
||||
tag="Recognized Excellence"
|
||||
title="Featured In"
|
||||
description="Our work has been recognized by top culinary publications and experts."
|
||||
names={[
|
||||
"Food & Wine", "The Daily Eater", "Artisan Monthly", "Patisserie Guild", "City Tastes", "Culinary Excellence", "The Local Foodie"]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
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="Words from Lovers"
|
||||
title="What People Say About Us"
|
||||
description="Join our community of pastry enthusiasts who appreciate the craft."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Claire R.", role: "Food Critic", quote: "The best croissants in the city, bar none.", imageSrc: "http://img.b2bpic.net/free-photo/curly-girl-with-beatiful-smile-keeping-cup-coffee-looking-camera_7502-9179.jpg"},
|
||||
{
|
||||
name: "Mark D.", role: "Regular", quote: "A daily ritual I simply cannot skip.", imageSrc: "http://img.b2bpic.net/free-photo/girl-with-cheesecake_1303-3947.jpg"},
|
||||
{
|
||||
name: "Elena S.", role: "Wedding Planner", quote: "Stunning presentation and even better taste.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-cheerful-dark-skinned-female-with-frizzy-hair-blogs-networks-smart-phone-has-dinner-break-eats-exotic-dish-cafe-connected-high-speed-internet-woman-sends-messages_273609-2188.jpg"},
|
||||
{
|
||||
name: "Jason W.", role: "Food Blogger", quote: "Authentic French quality in every bite.", imageSrc: "http://img.b2bpic.net/free-photo/woman-showing-her-perfect-straight-white-teeth_114579-58837.jpg"},
|
||||
{
|
||||
name: "Sarah P.", role: "Customer", quote: "Pure perfection. I'm hooked!", imageSrc: "http://img.b2bpic.net/free-photo/happiness-leisure-lifestyle-concept-smiling-african-american-female-recreates-cafe-restaurant-eats-delicious-dessert-drinks-cocktail-happy-have-pleasant-conversation-with-interlocutor_273609-2194.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user