Merge version_2_1780867556600 into main #4
@@ -1,272 +1,28 @@
|
||||
import AboutText from '@/components/sections/about/AboutText';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import FeaturesAttributeCards from '@/components/sections/features/FeaturesAttributeCards';
|
||||
import FeaturesBento from '@/components/sections/features/FeaturesBento';
|
||||
import HeroSplitVerticalMarquee from '@/components/sections/hero/HeroSplitVerticalMarquee';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import TestimonialAvatarCard from '@/components/sections/testimonial/TestimonialAvatarCard';
|
||||
import { Apple, ChefHat, Cookie, CookingPot, Egg, Heart, Leaf, Microwave, Milk, Sparkles, Thermometer, Timer, Weight, Wheat, Circle } from "lucide-react";
|
||||
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; this shell only fixes render order.
|
||||
|
||||
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 WhyUsSection from './HomePage/sections/WhyUs';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
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">
|
||||
<HeroSplitVerticalMarquee
|
||||
tag="Daily Fresh"
|
||||
title="Freshly Baked Goodness, Made Daily"
|
||||
description="Artisan breads, pastries, and custom cakes crafted with premium ingredients. Order online or visit us today."
|
||||
primaryButton={{
|
||||
text: "Order Now", href: "#products"}}
|
||||
secondaryButton={{
|
||||
text: "Our Story", href: "#about"}}
|
||||
leftItems={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/vertical-shot-rustic-village-bread-cut-slices-wooden-board_181624-59450.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-french-macarons-with-flower-inside-plate-pink-table-cake-biscuit-sugar-sweet_140725-28580.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/male-hands-knead-dough_639032-1377.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tartalettes-with-summer-fruits-blue-wooden-table_114579-11572.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/bakery-atmospheric-photo_1321-4640.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/teenagers-kids-tasting-cutting-cake_23-2147783768.jpg"},
|
||||
]}
|
||||
rightItems={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-putting-homemade-wheat-bread-with-flour-it-white-towel-with-two-hands_114579-2680.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/homemade-delicious-rustic-summer-berry-tartles_114579-10171.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/composition-bakery-elements_23-2148006293.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-delicious-dessert-picnic_23-2151982823.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/indian-couple-performs-transactions-from-bank-atm_627829-12289.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-sweet-biscuits-with-nuts-presents-light-table_140725-143558.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutText
|
||||
title="Our Passion for Baking"
|
||||
primaryButton={{
|
||||
text: "See Our Menu", href: "#products"}}
|
||||
secondaryButton={{
|
||||
text: "Visit Us", href: "#contact"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesAttributeCards
|
||||
tag="Our Delights"
|
||||
title="Irresistible Baked Goods"
|
||||
description="From flaky croissants to rich chocolate cakes, explore our exquisite range of handcrafted treats, made fresh daily with the finest ingredients."
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-homemade-croissants-ready-be-served_23-2148543678.jpg", title: "Butter Croissant", tags: "Flaky & Buttery", details: [
|
||||
{
|
||||
icon: ChefHat,
|
||||
label: "Baked Fresh", value: "Daily"},
|
||||
{
|
||||
icon: Leaf,
|
||||
label: "Ingredients", value: "Premium"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-bread-black-cloth_23-2148288058.jpg", title: "Artisan Sourdough", tags: "Rustic Loaf", details: [
|
||||
{
|
||||
icon: Wheat,
|
||||
label: "Fermentation", value: "Slow"},
|
||||
{
|
||||
icon: Weight,
|
||||
label: "Weight", value: "750g"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/chocolate-cake-wood_1339-6722.jpg", title: "Decadent Chocolate Cake", tags: "Rich & Indulgent", details: [
|
||||
{
|
||||
icon: Circle,
|
||||
label: "Occasion", value: "Celebration"},
|
||||
{
|
||||
icon: Sparkles,
|
||||
label: "Flavor", value: "Classic"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/blueberry-muffin_74190-2634.jpg", title: "Blueberry Muffin", tags: "Soft & Sweet", details: [
|
||||
{
|
||||
icon: Apple,
|
||||
label: "Variety", value: "Blueberry"},
|
||||
{
|
||||
icon: Timer,
|
||||
label: "Ready In", value: "Minutes"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/delicious-rainbow-cupcakes-still-life_23-2150154597.jpg", title: "Assorted Cupcakes", tags: "Miniature Treats", details: [
|
||||
{
|
||||
icon: Heart,
|
||||
label: "Perfect For", value: "Gifts"},
|
||||
{
|
||||
icon: Sparkles,
|
||||
label: "Customizable", value: "Yes"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tasty-cookies-dessert_1220-392.jpg", title: "Chocolate Chip Cookies", tags: "Chewy & Delicious", details: [
|
||||
{
|
||||
icon: Cookie,
|
||||
label: "Flavor", value: "Chocolate Chip"},
|
||||
{
|
||||
icon: Thermometer,
|
||||
label: "Warm Serve", value: "Optional"},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="why-us" data-section="why-us">
|
||||
<SectionErrorBoundary name="why-us">
|
||||
<FeaturesBento
|
||||
tag="Our Promise"
|
||||
title="Crafting Joy, One Bake at a Time"
|
||||
description="Experience the difference that fresh ingredients, passionate bakers, and a commitment to community make in every bite."
|
||||
features={[
|
||||
{
|
||||
title: "Daily Fresh Ingredients", description: "We source the finest local ingredients, ensuring exceptional flavor and quality in every creation.", bentoComponent: "info-card-marquee", infoCards: [
|
||||
{
|
||||
icon: Wheat,
|
||||
label: "Flour", value: "Local Mills"},
|
||||
{
|
||||
icon: Egg,
|
||||
label: "Eggs", value: "Farm Fresh"},
|
||||
{
|
||||
icon: Milk,
|
||||
label: "Dairy", value: "Artisanal"},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Artisan Baking Techniques", description: "Our bakers combine time-honored traditions with modern expertise for perfect results, every time.", bentoComponent: "tilted-stack-cards", stackCards: [
|
||||
{
|
||||
icon: Circle,
|
||||
title: "Slow Proofing", subtitle: "Traditional methods", detail: "Enhances flavor & texture"},
|
||||
{
|
||||
icon: CookingPot,
|
||||
title: "Hand Mixing", subtitle: "Careful attention", detail: "Ensures consistency"},
|
||||
{
|
||||
icon: Microwave,
|
||||
title: "Stone Ovens", subtitle: "Perfect crust", detail: "Even heat distribution"},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Custom Orders & Catering", description: "From wedding cakes to corporate events, we create bespoke baked goods tailored to your special occasions.", bentoComponent: "checklist-timeline", heading: "Your Vision, Our Craft", subheading: "Seamless experience from inquiry to delivery.", checklistItems: [
|
||||
{
|
||||
label: "Consultation", detail: "Discuss your needs & preferences"},
|
||||
{
|
||||
label: "Design & Tasting", detail: "Finalize flavors & aesthetics"},
|
||||
{
|
||||
label: "Baking & Delivery", detail: "Enjoy your fresh, custom order"},
|
||||
],
|
||||
completedLabel: "Event Success!"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialAvatarCard
|
||||
tag="Happy Customers"
|
||||
title="What Our Community Says"
|
||||
primaryButton={{
|
||||
text: "Read All Reviews", href: "#"}}
|
||||
secondaryButton={{
|
||||
text: "Leave a Review", href: "#contact"}}
|
||||
avatars={[
|
||||
{
|
||||
name: "Sarah Johnson", imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-asian-woman-with-pensive-smiling-face-holding-cupcake-thinking-bakery-pastry_1258-173976.jpg"},
|
||||
{
|
||||
name: "Michael Chen", imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-young-man_1268-21877.jpg"},
|
||||
{
|
||||
name: "Emily Rodriguez", imageSrc: "http://img.b2bpic.net/free-photo/female-baker-with-baked-bread-pastry-shop_23-2150379549.jpg"},
|
||||
{
|
||||
name: "David Kim", imageSrc: "http://img.b2bpic.net/free-photo/portrait-happy-young-businessman-looking-camera_23-2147839978.jpg"},
|
||||
{
|
||||
name: "James Wilson", imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-handsome-hipster-man-with-beard-smiling-laughing_176420-12168.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="Our Impact"
|
||||
title="Behind the Scenes of Our Passion"
|
||||
description="Our dedication is reflected in the numbers, from fresh ingredients to happy customers."
|
||||
metrics={[
|
||||
{
|
||||
icon: Wheat,
|
||||
title: "Loaves Baked Daily", value: "500+"},
|
||||
{
|
||||
icon: Heart,
|
||||
title: "Happy Customers", value: "10,000+"},
|
||||
{
|
||||
icon: Wheat,
|
||||
title: "Local Ingredients", value: "75%"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Questions?"
|
||||
title="Frequently Asked Questions"
|
||||
description="Find answers to common questions about our products, ordering, and services."
|
||||
categories={[
|
||||
{
|
||||
name: "Ordering & Products", items: [
|
||||
{
|
||||
question: "Do you offer gluten-free options?", answer: "Yes, we have a selection of delicious gluten-free breads and pastries. Please check our menu or ask our staff for today's offerings."},
|
||||
{
|
||||
question: "How can I place a custom cake order?", answer: "You can place a custom cake order by visiting our bakery, calling us directly, or filling out the custom order form on our website. We recommend ordering at least one week in advance."},
|
||||
{
|
||||
question: "Do you offer local delivery?", answer: "Yes, we offer local delivery within a 10-mile radius for orders over $30. Delivery fees apply. You can select delivery at checkout when ordering online."},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Connect With Us"
|
||||
text="Ready to taste the difference? Visit our bakery or place an order online for fresh, handcrafted delights."
|
||||
primaryButton={{
|
||||
text: "Get Directions", href: "https://www.google.com/maps/search/bakery+near+me"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us", href: "mailto:info@thebakeryco.com"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<HeroSection />
|
||||
<AboutSection />
|
||||
<ProductsSection />
|
||||
<WhyUsSection />
|
||||
<TestimonialsSection />
|
||||
<MetricsSection />
|
||||
<FaqSection />
|
||||
<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="Our Passion for Baking"
|
||||
primaryButton={{
|
||||
text: "See Our Menu", href: "#products"}}
|
||||
secondaryButton={{
|
||||
text: "Visit Us", href: "#contact"}}
|
||||
/>
|
||||
</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="Connect With Us"
|
||||
text="Ready to taste the difference? Visit our bakery or place an order online for fresh, handcrafted delights."
|
||||
primaryButton={{
|
||||
text: "Get Directions", href: "https://www.google.com/maps/search/bakery+near+me"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us", href: "mailto:info@thebakeryco.com"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
32
src/pages/HomePage/sections/Faq.tsx
Normal file
32
src/pages/HomePage/sections/Faq.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 "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="Questions?"
|
||||
title="Frequently Asked Questions"
|
||||
description="Find answers to common questions about our products, ordering, and services."
|
||||
categories={[
|
||||
{
|
||||
name: "Ordering & Products", items: [
|
||||
{
|
||||
question: "Do you offer gluten-free options?", answer: "Yes, we have a selection of delicious gluten-free breads and pastries. Please check our menu or ask our staff for today's offerings."},
|
||||
{
|
||||
question: "How can I place a custom cake order?", answer: "You can place a custom cake order by visiting our bakery, calling us directly, or filling out the custom order form on our website. We recommend ordering at least one week in advance."},
|
||||
{
|
||||
question: "Do you offer local delivery?", answer: "Yes, we offer local delivery within a 10-mile radius for orders over $30. Delivery fees apply. You can select delivery at checkout when ordering online."},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
72
src/pages/HomePage/sections/Hero.tsx
Normal file
72
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,72 @@
|
||||
import React from 'react';
|
||||
import TextAnimation from '@/components/ui/TextAnimation';
|
||||
import ScrollReveal from '@/components/ui/ScrollReveal';
|
||||
import Button from '@/components/ui/Button';
|
||||
import Tag from '@/components/ui/Tag';
|
||||
|
||||
export default function HeroSection() {
|
||||
return (
|
||||
<section id="hero" className="relative w-full overflow-hidden flex items-center min-h-svh">
|
||||
<div className="max-w-content-width mx-auto px-6 grid lg:grid-cols-2 items-center relative z-10">
|
||||
<div className="flex flex-col items-start gap-6">
|
||||
<ScrollReveal variant="slide-up">
|
||||
<Tag text="Daily Fresh" />
|
||||
</ScrollReveal>
|
||||
<TextAnimation
|
||||
text="Taste the Tradition: Handcrafted Baked Goods Daily"
|
||||
variant="fade-blur"
|
||||
gradientText={false}
|
||||
tag="h1"
|
||||
className="text-5xl md:text-6xl lg:text-7xl font-bold tracking-tight text-foreground"
|
||||
/>
|
||||
<ScrollReveal variant="slide-up" delay={0.2}>
|
||||
<p className="text-lg md:text-xl text-muted-foreground max-w-content-width">
|
||||
Artisan breads, pastries, and custom cakes crafted with premium ingredients. Order online or visit us today.
|
||||
</p>
|
||||
</ScrollReveal>
|
||||
<ScrollReveal variant="slide-up" delay={0.3} className="flex flex-wrap gap-4 mt-4">
|
||||
<Button text="Order Now" variant="primary" href="#products" />
|
||||
<Button text="Our Story" variant="secondary" href="#about" />
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-2 gap-4 relative">
|
||||
<div className="flex flex-col gap-4">
|
||||
<ScrollReveal variant="slide-up" delay={0.2}>
|
||||
<div className="w-full aspect-square rounded-theme overflow-hidden shadow-sm">
|
||||
<img src="" alt="Colorful macarons on a plate" className="w-full h-full object-cover" />
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
<ScrollReveal variant="slide-up" delay={0.4}>
|
||||
<div className="w-full aspect-square rounded-theme overflow-hidden shadow-sm">
|
||||
<img src="" alt="Baker's hands kneading fresh dough" className="w-full h-full object-cover" />
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
<ScrollReveal variant="slide-up" delay={0.6}>
|
||||
<div className="w-full aspect-video rounded-theme overflow-hidden shadow-sm">
|
||||
<img src="" alt="Assorted breakfast pastries" className="w-full h-full object-cover" />
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
<div className="flex flex-col gap-4">
|
||||
<ScrollReveal variant="slide-up" delay={0.3}>
|
||||
<div className="w-full aspect-video rounded-theme overflow-hidden shadow-sm">
|
||||
<img src="" alt="Slicing a loaf of crusty bread" className="w-full h-full object-cover" />
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
<ScrollReveal variant="slide-up" delay={0.5}>
|
||||
<div className="w-full aspect-square rounded-theme overflow-hidden shadow-sm">
|
||||
<img src="" alt="Freshly baked artisan bread loaf" className="w-full h-full object-cover" />
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
<ScrollReveal variant="slide-up" delay={0.7}>
|
||||
<div className="w-full aspect-square rounded-theme overflow-hidden shadow-sm">
|
||||
<img src="" alt="Fruit tarts with fresh berries" className="w-full h-full object-cover" />
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
32
src/pages/HomePage/sections/Metrics.tsx
Normal file
32
src/pages/HomePage/sections/Metrics.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 "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import { Apple, ChefHat, Cookie, CookingPot, Egg, Heart, Leaf, Microwave, Milk, Sparkles, Thermometer, Timer, Weight, Wheat, Circle } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="Our Impact"
|
||||
title="Behind the Scenes of Our Passion"
|
||||
description="Our dedication is reflected in the numbers, from fresh ingredients to happy customers."
|
||||
metrics={[
|
||||
{
|
||||
icon: Wheat,
|
||||
title: "Loaves Baked Daily", value: "500+"},
|
||||
{
|
||||
icon: Heart,
|
||||
title: "Happy Customers", value: "10,000+"},
|
||||
{
|
||||
icon: Wheat,
|
||||
title: "Local Ingredients", value: "75%"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
83
src/pages/HomePage/sections/Products.tsx
Normal file
83
src/pages/HomePage/sections/Products.tsx
Normal file
@@ -0,0 +1,83 @@
|
||||
// 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 FeaturesAttributeCards from '@/components/sections/features/FeaturesAttributeCards';
|
||||
import { Apple, ChefHat, Cookie, CookingPot, Egg, Heart, Leaf, Microwave, Milk, Sparkles, Thermometer, Timer, Weight, Wheat, Circle } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ProductsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesAttributeCards
|
||||
tag="Our Delights"
|
||||
title="Irresistible Baked Goods"
|
||||
description="From flaky croissants to rich chocolate cakes, explore our exquisite range of handcrafted treats, made fresh daily with the finest ingredients."
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-homemade-croissants-ready-be-served_23-2148543678.jpg", title: "Butter Croissant", tags: "Flaky & Buttery", details: [
|
||||
{
|
||||
icon: ChefHat,
|
||||
label: "Baked Fresh", value: "Daily"},
|
||||
{
|
||||
icon: Leaf,
|
||||
label: "Ingredients", value: "Premium"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-bread-black-cloth_23-2148288058.jpg", title: "Artisan Sourdough", tags: "Rustic Loaf", details: [
|
||||
{
|
||||
icon: Wheat,
|
||||
label: "Fermentation", value: "Slow"},
|
||||
{
|
||||
icon: Weight,
|
||||
label: "Weight", value: "750g"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/chocolate-cake-wood_1339-6722.jpg", title: "Decadent Chocolate Cake", tags: "Rich & Indulgent", details: [
|
||||
{
|
||||
icon: Circle,
|
||||
label: "Occasion", value: "Celebration"},
|
||||
{
|
||||
icon: Sparkles,
|
||||
label: "Flavor", value: "Classic"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/blueberry-muffin_74190-2634.jpg", title: "Blueberry Muffin", tags: "Soft & Sweet", details: [
|
||||
{
|
||||
icon: Apple,
|
||||
label: "Variety", value: "Blueberry"},
|
||||
{
|
||||
icon: Timer,
|
||||
label: "Ready In", value: "Minutes"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/delicious-rainbow-cupcakes-still-life_23-2150154597.jpg", title: "Assorted Cupcakes", tags: "Miniature Treats", details: [
|
||||
{
|
||||
icon: Heart,
|
||||
label: "Perfect For", value: "Gifts"},
|
||||
{
|
||||
icon: Sparkles,
|
||||
label: "Customizable", value: "Yes"},
|
||||
],
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tasty-cookies-dessert_1220-392.jpg", title: "Chocolate Chip Cookies", tags: "Chewy & Delicious", details: [
|
||||
{
|
||||
icon: Cookie,
|
||||
label: "Flavor", value: "Chocolate Chip"},
|
||||
{
|
||||
icon: Thermometer,
|
||||
label: "Warm Serve", value: "Optional"},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
35
src/pages/HomePage/sections/Testimonials.tsx
Normal file
35
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,35 @@
|
||||
// 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 TestimonialAvatarCard from '@/components/sections/testimonial/TestimonialAvatarCard';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialAvatarCard
|
||||
tag="Happy Customers"
|
||||
title="What Our Community Says"
|
||||
primaryButton={{
|
||||
text: "Read All Reviews", href: "#"}}
|
||||
secondaryButton={{
|
||||
text: "Leave a Review", href: "#contact"}}
|
||||
avatars={[
|
||||
{
|
||||
name: "Sarah Johnson", imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-asian-woman-with-pensive-smiling-face-holding-cupcake-thinking-bakery-pastry_1258-173976.jpg"},
|
||||
{
|
||||
name: "Michael Chen", imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-young-man_1268-21877.jpg"},
|
||||
{
|
||||
name: "Emily Rodriguez", imageSrc: "http://img.b2bpic.net/free-photo/female-baker-with-baked-bread-pastry-shop_23-2150379549.jpg"},
|
||||
{
|
||||
name: "David Kim", imageSrc: "http://img.b2bpic.net/free-photo/portrait-happy-young-businessman-looking-camera_23-2147839978.jpg"},
|
||||
{
|
||||
name: "James Wilson", imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-handsome-hipster-man-with-beard-smiling-laughing_176420-12168.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
60
src/pages/HomePage/sections/WhyUs.tsx
Normal file
60
src/pages/HomePage/sections/WhyUs.tsx
Normal file
@@ -0,0 +1,60 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "why-us" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesBento from '@/components/sections/features/FeaturesBento';
|
||||
import { Apple, ChefHat, Cookie, CookingPot, Egg, Heart, Leaf, Microwave, Milk, Sparkles, Thermometer, Timer, Weight, Wheat, Circle } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function WhyUsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="why-us" data-section="why-us">
|
||||
<SectionErrorBoundary name="why-us">
|
||||
<FeaturesBento
|
||||
tag="Our Promise"
|
||||
title="Crafting Joy, One Bake at a Time"
|
||||
description="Experience the difference that fresh ingredients, passionate bakers, and a commitment to community make in every bite."
|
||||
features={[
|
||||
{
|
||||
title: "Daily Fresh Ingredients", description: "We source the finest local ingredients, ensuring exceptional flavor and quality in every creation.", bentoComponent: "info-card-marquee", infoCards: [
|
||||
{
|
||||
icon: Wheat,
|
||||
label: "Flour", value: "Local Mills"},
|
||||
{
|
||||
icon: Egg,
|
||||
label: "Eggs", value: "Farm Fresh"},
|
||||
{
|
||||
icon: Milk,
|
||||
label: "Dairy", value: "Artisanal"},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Artisan Baking Techniques", description: "Our bakers combine time-honored traditions with modern expertise for perfect results, every time.", bentoComponent: "tilted-stack-cards", stackCards: [
|
||||
{
|
||||
icon: Circle,
|
||||
title: "Slow Proofing", subtitle: "Traditional methods", detail: "Enhances flavor & texture"},
|
||||
{
|
||||
icon: CookingPot,
|
||||
title: "Hand Mixing", subtitle: "Careful attention", detail: "Ensures consistency"},
|
||||
{
|
||||
icon: Microwave,
|
||||
title: "Stone Ovens", subtitle: "Perfect crust", detail: "Even heat distribution"},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Custom Orders & Catering", description: "From wedding cakes to corporate events, we create bespoke baked goods tailored to your special occasions.", bentoComponent: "checklist-timeline", heading: "Your Vision, Our Craft", subheading: "Seamless experience from inquiry to delivery.", checklistItems: [
|
||||
{
|
||||
label: "Consultation", detail: "Discuss your needs & preferences"},
|
||||
{
|
||||
label: "Design & Tasting", detail: "Finalize flavors & aesthetics"},
|
||||
{
|
||||
label: "Baking & Delivery", detail: "Enjoy your fresh, custom order"},
|
||||
],
|
||||
completedLabel: "Event Success!"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user