Merge version_3_1783087895510 into main
Merge version_3_1783087895510 into main
This commit was merged in pull request #2.
This commit is contained in:
@@ -1,264 +1,39 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroBrand from '@/components/sections/hero/HeroBrand';
|
||||
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
|
||||
import { Clock, Flame, Wheat } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
// AUTO-GENERATED shell by per-section-migrate.
|
||||
// Section bodies live in the sibling sections/ folder (one file per section).
|
||||
// Edit those section files directly. Non-block content (wrappers,
|
||||
// non-inlinable sections) is preserved inline; extracted section blocks
|
||||
// become component refs.
|
||||
|
||||
export default function HomePage() {
|
||||
import React from 'react';
|
||||
import HeroSection from './HomePage/sections/Hero';
|
||||
import AboutSection from './HomePage/sections/About';
|
||||
import ProcessSection from './HomePage/sections/Process';
|
||||
import ProductsSection from './HomePage/sections/Products';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import SocialProofSection from './HomePage/sections/SocialProof';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import FaqSection from './HomePage/sections/Faq';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBrand
|
||||
brand="True Artisanфывфывфывфывфывф Bread"
|
||||
description="Hand-crafted, long-fermented sourdoughфывфвфывфывфы, baked fresh every morning in our small-batch kitchen."
|
||||
primaryButton={{
|
||||
text: "Explore Products",
|
||||
href: "#products",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Story",
|
||||
href: "#about",
|
||||
}}
|
||||
imageSrc="https://pixabay.com/get/gc9cda3b557993f8f84f217018b313d79079b9cbda08468aba602468f6b2c48d5af66145b284eacfe5ddecce90c3d2e43d3ffd3cfd15eac296be8ef0a034f772a_1280.jpg?id=4155023"
|
||||
textAnimation="fade"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="Our Craft"
|
||||
title="Tradition iфывфывфывфывфывфn Every Loaf"
|
||||
description="We believe in the power of patience. Our process respects time, resulting in bread that is easфывфывфывфывфывфывфывфывier to digest and far richer in flavor."
|
||||
items={[
|
||||
{
|
||||
icon: Clock,
|
||||
title: "48-Hour Fermentaфвфывфывфвфывфывфыtion",
|
||||
description: "Extended proofing time for deep, complex sour notes.",
|
||||
},
|
||||
{
|
||||
icon: Wheat,
|
||||
title: "Heritage Grains",
|
||||
description: "Sourced locally to support our farmers and flavor.",
|
||||
},
|
||||
{
|
||||
icon: Flame,
|
||||
title: "Stone Hearth Baked",
|
||||
description: "Classic baking for the perfect, crackling crust.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://images.pexels.com/photos/7965900/pexels-photo-7965900.jpeg?auto=compress&cs=tinysrgb&h=650&w=940"
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="process" data-section="process">
|
||||
<SectionErrorBoundary name="process">
|
||||
<FeaturesDetailedSteps
|
||||
tag="The Process"
|
||||
title="From Grain фывфывфывфывфывфвto Glory"
|
||||
description="Witness the stages of transformation from simple flour to our signature golden crust."
|
||||
steps={[
|
||||
{
|
||||
tag: "01",
|
||||
title: "Mixing",
|
||||
subtitle: "Natural Hydration",
|
||||
description: "Combining pure spring water with our aged starter.",
|
||||
imageSrc: "https://images.pexels.com/photos/10481791/pexels-photo-10481791.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
tag: "02",
|
||||
title: "Fermentation",
|
||||
subtitle: "Patience Matters",
|
||||
description: "Resting for forty-eight hours to develop character.",
|
||||
imageSrc: "https://images.pexels.com/photos/28907097/pexels-photo-28907097.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
tag: "03",
|
||||
title: "Baking",
|
||||
subtitle: "Heat & Steam",
|
||||
description: "Finishing in our hand-built stone oven at peak temperature.",
|
||||
imageSrc: "https://images.pexels.com/photos/6594899/pexels-photo-6594899.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProcessSection />
|
||||
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Signature Loaves"
|
||||
title="Our Daily Bakes"
|
||||
description="Explore our rotation of sourdough and artisan creations."
|
||||
items={[
|
||||
{
|
||||
title: "Classic Sourdough",
|
||||
description: "Our signature country loaf.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/37888512/pexels-photo-37888512.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Heritage Rye",
|
||||
description: "Earthy, robust, and full-bodied rye.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/11570705/pexels-photo-11570705.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Olive & Rosemary",
|
||||
description: "Savory infusion with local herbs.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/30326084/pexels-photo-30326084.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Seeded Multigrain",
|
||||
description: "Rich in texture and nutty flavor.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/30632198/pexels-photo-30632198.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Walnut & Cranberry",
|
||||
description: "The perfect balance of tart and sweet.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/31922619/pexels-photo-31922619.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Rustic Baguette",
|
||||
description: "Crispy thin crust with airy center.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/30826792/pexels-photo-30826792.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Focaccia",
|
||||
description: "Soft, pillowy, and olive-oil rich.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/6937426/pexels-photo-6937426.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProductsSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsSimpleCards
|
||||
tag="Our Impact"
|
||||
title="Baking Stats"
|
||||
description="Numbers behind our sourdough devotion."
|
||||
metrics={[
|
||||
{
|
||||
value: "100%",
|
||||
description: "Natural ingredients only",
|
||||
},
|
||||
{
|
||||
value: "48hrs",
|
||||
description: "Proofing duration per batch",
|
||||
},
|
||||
{
|
||||
value: "500+",
|
||||
description: "Loaves baked weekly",
|
||||
},
|
||||
]}
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeOverlayCards
|
||||
tag="Testimonials"
|
||||
title="Loved by Locals"
|
||||
description="See why our neighbors make us part of their daily routine."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Claire Miller",
|
||||
role: "Food Blogger",
|
||||
company: "EatLocal",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/16771767/pexels-photo-16771767.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "John Doe",
|
||||
role: "Local Resident",
|
||||
company: "Neighbor",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/34699447/pexels-photo-34699447.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Sarah Smith",
|
||||
role: "Chef",
|
||||
company: "Bistro",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/8429811/pexels-photo-8429811.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Mike Ross",
|
||||
role: "Teacher",
|
||||
company: "Public School",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/6563916/pexels-photo-6563916.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Jane Wilson",
|
||||
role: "Designer",
|
||||
company: "Studio",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/24863757/pexels-photo-24863757.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
textAnimation="fade"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="social-proof" data-section="social-proof">
|
||||
<SectionErrorBoundary name="social-proof">
|
||||
<SocialProofMarquee
|
||||
tag="As Featured In"
|
||||
title="Press & Community"
|
||||
description="Recognition for our dedication to artisan baking."
|
||||
names={[
|
||||
"City Food Weekly",
|
||||
"Artisan Monthly",
|
||||
"The Daily Crust",
|
||||
"Bakery Excellence",
|
||||
"Local Eats Guide",
|
||||
"Sourdough Today",
|
||||
"Grain & Hearth",
|
||||
]}
|
||||
textAnimation="fade"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<SocialProofSection />
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Visit Us"
|
||||
text="Ready to taste the difference? Stop by our bakery or pre-order online for the freshest loaves."
|
||||
primaryButton={{
|
||||
text: "Visit Our Shop",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Call to Order",
|
||||
href: "#",
|
||||
}}
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
40
src/pages/HomePage/sections/About.tsx
Normal file
40
src/pages/HomePage/sections/About.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 "about" section.
|
||||
|
||||
import React from 'react';
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import { Clock, Flame, Wheat } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="Our Craft"
|
||||
title="Tradition iфывфывфывфывфывфn Every Loaf"
|
||||
description="We believe in the power of patience. Our process respects time, resulting in bread that is easфывфывфывфывфывфывфывфывier to digest and far richer in flavor."
|
||||
items={[
|
||||
{
|
||||
icon: Clock,
|
||||
title: "48-Hour Fermentaфвфывфывфвфывфывфыtion",
|
||||
description: "Extended proofing time for deep, complex sour notes.",
|
||||
},
|
||||
{
|
||||
icon: Wheat,
|
||||
title: "Heritage Grains",
|
||||
description: "Sourced locally to support our farmers and flavor.",
|
||||
},
|
||||
{
|
||||
icon: Flame,
|
||||
title: "Stone Hearth Baked",
|
||||
description: "Classic baking for the perfect, crackling crust.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://images.pexels.com/photos/7965900/pexels-photo-7965900.jpeg?auto=compress&cs=tinysrgb&h=650&w=940"
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Contact.tsx
Normal file
28
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Visit Us"
|
||||
text="Ready to taste the difference? Stop by our bakery or pre-order online for the freshest loaves."
|
||||
primaryButton={{
|
||||
text: "Visit Our Shop",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Call to Order",
|
||||
href: "#",
|
||||
}}
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
51
src/pages/HomePage/sections/Faq.tsx
Normal file
51
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,51 @@
|
||||
import Accordion from '@/components/ui/Accordion';
|
||||
import TextAnimation from '@/components/ui/TextAnimation';
|
||||
import Tag from '@/components/ui/Tag';
|
||||
import ScrollReveal from '@/components/ui/ScrollReveal';
|
||||
|
||||
export default function FaqSection() {
|
||||
return (
|
||||
<section data-webild-section="faq" id="faq" className="relative w-full py-24 bg-background">
|
||||
<div className="w-content-width mx-auto">
|
||||
<div className="flex flex-col items-center text-center mb-16">
|
||||
<ScrollReveal variant="fade">
|
||||
<Tag text="FAQ" className="mb-6" />
|
||||
</ScrollReveal>
|
||||
<TextAnimation
|
||||
text="Frequently Asked Questions"
|
||||
variant="fade-blur"
|
||||
tag="h2"
|
||||
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
|
||||
gradientText={false}
|
||||
/>
|
||||
<ScrollReveal variant="fade" delay={0.2}>
|
||||
<p className="text-lg text-accent max-w-2xl mx-auto">
|
||||
Everything you need to know about our artisan bread, from storage tips to pickup details.
|
||||
</p>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
|
||||
<ScrollReveal variant="fade" delay={0.3} className="max-w-3xl mx-auto">
|
||||
<Accordion items={[
|
||||
{
|
||||
title: "How long does your bread stay fresh?",
|
||||
content: "Our sourdough loaves are best enjoyed within 3-4 days. To maximize freshness, store them at room temperature in a paper bag or bread box. For longer storage, you can slice and freeze the loaf for up to 3 months."
|
||||
},
|
||||
{
|
||||
title: "Do you offer gluten-free or vegan options?",
|
||||
content: "All of our traditional sourdough breads are naturally vegan. While we use heritage grains that some find easier to digest, our bakery processes wheat, so we cannot guarantee a 100% gluten-free environment for those with celiac disease."
|
||||
},
|
||||
{
|
||||
title: "What are your pickup policies and windows?",
|
||||
content: "Pre-orders can be picked up at our bakery window between 8 AM and 2 PM, Tuesday through Saturday. Please bring your order confirmation. If you're running late, just give us a call and we'll hold your order until closing."
|
||||
},
|
||||
{
|
||||
title: "How far in advance do I need to pre-order?",
|
||||
content: "Because our sourdough undergoes a 48-hour fermentation process, we require all pre-orders to be placed at least two days in advance. This ensures we have enough time to craft your bread to perfection."
|
||||
}
|
||||
]} />
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
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 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="True Artisanфывфывфывфывфывф Bread"
|
||||
description="Hand-crafted, long-fermented sourdoughфывфвфывфывфы, baked fresh every morning in our small-batch kitchen."
|
||||
primaryButton={{
|
||||
text: "Explore Products",
|
||||
href: "#products",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Story",
|
||||
href: "#about",
|
||||
}}
|
||||
imageSrc="https://pixabay.com/get/gc9cda3b557993f8f84f217018b313d79079b9cbda08468aba602468f6b2c48d5af66145b284eacfe5ddecce90c3d2e43d3ffd3cfd15eac296be8ef0a034f772a_1280.jpg?id=4155023"
|
||||
textAnimation="fade"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
35
src/pages/HomePage/sections/Metrics.tsx
Normal file
35
src/pages/HomePage/sections/Metrics.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 "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsSimpleCards
|
||||
tag="Our Impact"
|
||||
title="Baking Stats"
|
||||
description="Numbers behind our sourdough devotion."
|
||||
metrics={[
|
||||
{
|
||||
value: "100%",
|
||||
description: "Natural ingredients only",
|
||||
},
|
||||
{
|
||||
value: "48hrs",
|
||||
description: "Proofing duration per batch",
|
||||
},
|
||||
{
|
||||
value: "500+",
|
||||
description: "Loaves baked weekly",
|
||||
},
|
||||
]}
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
44
src/pages/HomePage/sections/Process.tsx
Normal file
44
src/pages/HomePage/sections/Process.tsx
Normal file
@@ -0,0 +1,44 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "process" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ProcessSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="process" data-section="process">
|
||||
<SectionErrorBoundary name="process">
|
||||
<FeaturesDetailedSteps
|
||||
tag="The Process"
|
||||
title="From Grain фывфывфывфывфывфвto Glory"
|
||||
description="Witness the stages of transformation from simple flour to our signature golden crust."
|
||||
steps={[
|
||||
{
|
||||
tag: "01",
|
||||
title: "Mixing",
|
||||
subtitle: "Natural Hydration",
|
||||
description: "Combining pure spring water with our aged starter.",
|
||||
imageSrc: "https://images.pexels.com/photos/10481791/pexels-photo-10481791.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
tag: "02",
|
||||
title: "Fermentation",
|
||||
subtitle: "Patience Matters",
|
||||
description: "Resting for forty-eight hours to develop character.",
|
||||
imageSrc: "https://images.pexels.com/photos/28907097/pexels-photo-28907097.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
tag: "03",
|
||||
title: "Baking",
|
||||
subtitle: "Heat & Steam",
|
||||
description: "Finishing in our hand-built stone oven at peak temperature.",
|
||||
imageSrc: "https://images.pexels.com/photos/6594899/pexels-photo-6594899.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
65
src/pages/HomePage/sections/Products.tsx
Normal file
65
src/pages/HomePage/sections/Products.tsx
Normal file
@@ -0,0 +1,65 @@
|
||||
// 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="Signature Loaves"
|
||||
title="Our Daily Bakes"
|
||||
description="Explore our rotation of sourdough and artisan creations."
|
||||
items={[
|
||||
{
|
||||
title: "Classic Sourdough",
|
||||
description: "Our signature country loaf.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/37888512/pexels-photo-37888512.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Heritage Rye",
|
||||
description: "Earthy, robust, and full-bodied rye.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/11570705/pexels-photo-11570705.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Olive & Rosemary",
|
||||
description: "Savory infusion with local herbs.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/30326084/pexels-photo-30326084.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Seeded Multigrain",
|
||||
description: "Rich in texture and nutty flavor.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/30632198/pexels-photo-30632198.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Walnut & Cranberry",
|
||||
description: "The perfect balance of tart and sweet.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/31922619/pexels-photo-31922619.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Rustic Baguette",
|
||||
description: "Crispy thin crust with airy center.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/30826792/pexels-photo-30826792.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Focaccia",
|
||||
description: "Soft, pillowy, and olive-oil rich.",
|
||||
href: "#contact",
|
||||
imageSrc: "https://images.pexels.com/photos/6937426/pexels-photo-6937426.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
textAnimation="slide-up"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
30
src/pages/HomePage/sections/SocialProof.tsx
Normal file
30
src/pages/HomePage/sections/SocialProof.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "social-proof" section.
|
||||
|
||||
import React from 'react';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function SocialProofSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="social-proof" data-section="social-proof">
|
||||
<SectionErrorBoundary name="social-proof">
|
||||
<SocialProofMarquee
|
||||
tag="As Featured In"
|
||||
title="Press & Community"
|
||||
description="Recognition for our dedication to artisan baking."
|
||||
names={[
|
||||
"City Food Weekly",
|
||||
"Artisan Monthly",
|
||||
"The Daily Crust",
|
||||
"Bakery Excellence",
|
||||
"Local Eats Guide",
|
||||
"Sourdough Today",
|
||||
"Grain & Hearth",
|
||||
]}
|
||||
textAnimation="fade"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
58
src/pages/HomePage/sections/Testimonials.tsx
Normal file
58
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,58 @@
|
||||
// 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 TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeOverlayCards
|
||||
tag="Testimonials"
|
||||
title="Loved by Locals"
|
||||
description="See why our neighbors make us part of their daily routine."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Claire Miller",
|
||||
role: "Food Blogger",
|
||||
company: "EatLocal",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/16771767/pexels-photo-16771767.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "John Doe",
|
||||
role: "Local Resident",
|
||||
company: "Neighbor",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/34699447/pexels-photo-34699447.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Sarah Smith",
|
||||
role: "Chef",
|
||||
company: "Bistro",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/8429811/pexels-photo-8429811.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Mike Ross",
|
||||
role: "Teacher",
|
||||
company: "Public School",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/6563916/pexels-photo-6563916.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Jane Wilson",
|
||||
role: "Designer",
|
||||
company: "Studio",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/24863757/pexels-photo-24863757.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
textAnimation="fade"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user