Merge version_2_1781894030874 into main #2

Merged
bender merged 1 commits from version_2_1781894030874 into main 2026-06-19 18:35:21 +00:00
9 changed files with 425 additions and 226 deletions

View File

@@ -1,238 +1,36 @@
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import FeaturesMediaCards from '@/components/sections/features/FeaturesMediaCards';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import HeroSplit from '@/components/sections/hero/HeroSplit';
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
import { Award, Leaf, Smile } 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. 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 TestimonialsSection from './HomePage/sections/Testimonials';
import ProductsSection from './HomePage/sections/Products';
import FaqSection from './HomePage/sections/Faq';
import MetricsSection from './HomePage/sections/Metrics';
import ContactSection from './HomePage/sections/Contact';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroSplit
tag="Wholesome Living"
title="Natural Goodness for Your Home"
description="At Old Paths Natural Market, we provide high-quality organic produce, artisanal goods, and natural lifestyle products to support your healthy journey."
primaryButton={{
text: "View Products",
href: "#products",
}}
secondaryButton={{
text: "Contact Us",
href: "#contact",
}}
imageSrc="http://img.b2bpic.net/free-photo/front-view-wooden-box-with-vegetables_23-2148678869.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTestimonial
tag="Our Story"
quote="Our mission is to return to the simple, natural ways of nourishment. We select every product in our market with care for the health of our community and the planet."
author="The Old Paths Team"
role="Natural Market Founders"
imageSrc="http://img.b2bpic.net/free-photo/wooden-background-with-basket-full-vegetables_23-2147609629.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesMediaCards
tag="What We Offer"
title="Why Choose Old Paths?"
description="We specialize in carefully curated, clean, and sustainable products that help you live your best life."
items={[
{
title: "Fresh Produce",
description: "Locally sourced organic fruits and vegetables delivered fresh daily.",
imageSrc: "http://img.b2bpic.net/free-photo/elevated-view-tasty-bruschetta-fresh-italian-ingredients-table_23-2148195026.jpg",
},
{
title: "Natural Pantry",
description: "Wholesome grains, legumes, and pantry staples free from artificial additives.",
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-pasta-ingredients-table_23-2148361339.jpg",
},
{
title: "Artisanal Finds",
description: "Handcrafted soaps, teas, and local artisanal gifts with natural ingredients.",
imageSrc: "http://img.b2bpic.net/free-photo/fresh-herbs-wooden-board_1147-379.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<FeaturesSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialColumnMarqueeCards
tag="Community"
title="Heartfelt Feedback"
description="Our customers are at the heart of everything we do."
testimonials={[
{
name: "Alice P.",
role: "Local Resident",
quote: "The best organic produce I have found in town. Everything feels so fresh!",
imageSrc: "http://img.b2bpic.net/free-photo/fit-young-woman-ready-training_23-2148381972.jpg",
},
{
name: "Bob D.",
role: "Healthy Eater",
quote: "Love the bulk selection and the natural ingredient soaps here.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-person-shopping-freshly-harvested-fruits-veggies_482257-99839.jpg",
},
{
name: "Carla S.",
role: "Family Mom",
quote: "My kids love the fresh snacks and I appreciate the quality standards.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-cheerful-couple-holding-paper-shopping-bag_171337-2322.jpg",
},
{
name: "David L.",
role: "Chef",
quote: "Great artisanal ingredients that really make a difference in my recipes.",
imageSrc: "http://img.b2bpic.net/free-photo/organic-vegetables-close-up-beautiful-young-woman-shopping-supermarket-buying-fresh-organic-vegetables_169016-2200.jpg",
},
{
name: "Ellen W.",
role: "Wellness Enthusiast",
quote: "Old Paths is my go-to for everything natural. Always reliable.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-talking-phone-holding-vegetables_23-2148332187.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="products" data-section="products">
<SectionErrorBoundary name="products">
<FeaturesRevealCardsBento
tag="Our Catalog"
title="Curated Marketplace"
description="Explore our wide range of products."
items={[
{
title: "Raw Honey",
description: "Pure, local raw honey from sustainable sources.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/ecofriendly-beauty-product_23-2150669131.jpg",
},
{
title: "Sourdough Bread",
description: "Artisanal fresh sourdough baked daily.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-breakfast-wooden-background_23-2148230455.jpg",
},
{
title: "Pasture-Raised Eggs",
description: "Fresh eggs from free-roaming hens.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/front-close-view-white-whole-eggs-with-golden-one-white-wall_140725-38020.jpg",
},
{
title: "Nut Butters",
description: "Small-batch nut butters without added sugar.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-yogurt-jar-with-olives-tomatoes-slices-brown-bread-dill-stand-white-background_141793-49387.jpg",
},
{
title: "Organic Teas",
description: "Premium selection of organic herbal teas.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-tea-brewer-with-honey_23-2148567598.jpg",
},
{
title: "Natural Skincare",
description: "Handmade herbal skincare for sensitive skin.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/spa-composition-with-care-products-wooden-box-white-isolated_169016-17133.jpg",
},
{
title: "Harvest Baskets",
description: "Seasonal variety boxes for families.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/sliced-cabbage-bell-pepper-cucumber-wooden-kitchen-board-top-view_169016-50121.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ProductsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Help"
title="Common Questions"
description="Learn more about our sourcing and shop policies."
items={[
{
question: "Are your products truly organic?",
answer: "We prioritize organic and ethically sourced products, working closely with local farmers to ensure transparency.",
},
{
question: "Can I order online?",
answer: "Yes, you can browse our catalog and call us to place an order for pickup at the store.",
},
{
question: "Do you accept special requests?",
answer: "We are always happy to hear your requests! Speak with our staff during your next visit.",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsIconCards
tag="Impact"
title="Supporting Our Community"
description="The numbers behind our mission."
metrics={[
{
icon: Leaf,
title: "Local Farmers",
value: "25+",
},
{
icon: Smile,
title: "Happy Customers",
value: "1k+",
},
{
icon: Award,
title: "Natural Products",
value: "500+",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Find Us"
text="Come visit Old Paths Natural Market today and experience the difference of clean, natural living."
primaryButton={{
text: "Get Directions",
href: "https://maps.google.com",
}}
secondaryButton={{
text: "Call Us",
href: "tel:+1234567890",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View 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="Our mission is to return to the simple, natural ways of nourishment. We select every product in our market with care for the health of our community and the planet."
author="The Old Paths Team"
role="Natural Market Founders"
imageSrc="http://img.b2bpic.net/free-photo/wooden-background-with-basket-full-vegetables_23-2147609629.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contact" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Find Us"
text="Come visit Old Paths Natural Market today and experience the difference of clean, natural living."
primaryButton={{
text: "Get Directions",
href: "https://maps.google.com",
}}
secondaryButton={{
text: "Call Us",
href: "tel:+1234567890",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,34 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "faq" section.
import React from 'react';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Help"
title="Common Questions"
description="Learn more about our sourcing and shop policies."
items={[
{
question: "Are your products truly organic?",
answer: "We prioritize organic and ethically sourced products, working closely with local farmers to ensure transparency.",
},
{
question: "Can I order online?",
answer: "Yes, you can browse our catalog and call us to place an order for pickup at the store.",
},
{
question: "Do you accept special requests?",
answer: "We are always happy to hear your requests! Speak with our staff during your next visit.",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,37 @@
// 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 FeaturesMediaCards from '@/components/sections/features/FeaturesMediaCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FeaturesSection(): React.JSX.Element {
return (
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesMediaCards
tag="What We Offer"
title="Why Choose Old Paths?"
description="We specialize in carefully curated, clean, and sustainable products that help you live your best life."
items={[
{
title: "Fresh Produce",
description: "Locally sourced organic fruits and vegetables delivered fresh daily.",
imageSrc: "http://img.b2bpic.net/free-photo/elevated-view-tasty-bruschetta-fresh-italian-ingredients-table_23-2148195026.jpg",
},
{
title: "Natural Pantry",
description: "Wholesome grains, legumes, and pantry staples free from artificial additives.",
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-pasta-ingredients-table_23-2148361339.jpg",
},
{
title: "Artisanal Finds",
description: "Handcrafted soaps, teas, and local artisanal gifts with natural ingredients.",
imageSrc: "http://img.b2bpic.net/free-photo/fresh-herbs-wooden-board_1147-379.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,29 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "hero" section.
import React from 'react';
import HeroSplit from '@/components/sections/hero/HeroSplit';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroSplit
tag="Wholesome Living"
title="Natural Goodness for Your Home"
description="At Old Paths Natural Market, we provide high-quality organic produce, artisanal goods, and natural lifestyle products to support your healthy journey."
primaryButton={{
text: "View Products",
href: "#products",
}}
secondaryButton={{
text: "Contact Us",
href: "#contact",
}}
imageSrc="http://img.b2bpic.net/free-photo/front-view-wooden-box-with-vegetables_23-2148678869.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,38 @@
// 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 { Award, Leaf, Smile } 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="Impact"
title="Supporting Our Community"
description="The numbers behind our mission."
metrics={[
{
icon: Leaf,
title: "Local Farmers",
value: "25+",
},
{
icon: Smile,
title: "Happy Customers",
value: "1k+",
},
{
icon: Award,
title: "Natural Products",
value: "500+",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,162 @@
/* eslint-disable */
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
import Button from "@/components/ui/Button";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
import { cls } from "@/lib/utils";
const items = [
{
title: "Raw Honey",
description: "Pure, local raw honey from sustainable sources. $12.99",
href: "/products/raw-honey",
imageSrc: "http://img.b2bpic.net/free-photo/ecofriendly-beauty-product_23-2150669131.jpg"
},
{
title: "Sourdough Bread",
description: "Artisanal fresh sourdough baked daily. $8.50",
href: "/products/sourdough-bread",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-breakfast-wooden-background_23-2148230455.jpg"
},
{
title: "Pasture-Raised Eggs",
description: "Fresh eggs from free-roaming hens. $6.00 / dozen",
href: "/products/pasture-raised-eggs",
imageSrc: "http://img.b2bpic.net/free-photo/front-close-view-white-whole-eggs-with-golden-one-white-wall_140725-38020.jpg"
},
{
title: "Nut Butters",
description: "Small-batch nut butters without added sugar. $14.00",
href: "/products/nut-butters",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-yogurt-jar-with-olives-tomatoes-slices-brown-bread-dill-stand-white-background_141793-49387.jpg"
},
{
title: "Organic Teas",
description: "Premium selection of organic herbal teas. $10.50",
href: "/products/organic-teas",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-tea-brewer-with-honey_23-2148567598.jpg"
},
{
title: "Natural Skincare",
description: "Handmade herbal skincare for sensitive skin. $22.00",
href: "/products/natural-skincare",
imageSrc: "http://img.b2bpic.net/free-photo/spa-composition-with-care-products-wooden-box-white-isolated_169016-17133.jpg"
},
{
title: "Harvest Baskets",
description: "Seasonal variety boxes for families. $35.00",
href: "/products/harvest-baskets",
imageSrc: "http://img.b2bpic.net/free-photo/sliced-cabbage-bell-pepper-cucumber-wooden-kitchen-board-top-view_169016-50121.jpg"
}
];
type FeatureItem = {
title: string;
description: string;
href: string;
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
interface FeaturesRevealCardsBentoProps {
tag: string;
title: string;
description: string;
primaryButton?: { text: string; href: string };
secondaryButton?: { text: string; href: string };
items: [FeatureItem, FeatureItem, FeatureItem, FeatureItem, FeatureItem, FeatureItem, FeatureItem];
}
const ProductsInline = () => {
const gridClasses = [
"md:col-span-2",
"md:col-span-4",
"md:col-span-3",
"md:col-span-3",
"md:col-span-2",
"md:col-span-2",
"md:col-span-2",
];
const staggerDelays = [
0,
0.1,
0,
0.1,
0,
0.1,
0.2,
];
return (
<section aria-label="Features reveal cards bento section" className="py-20">
<div className="flex flex-col gap-8 md:gap-10">
<div className="flex flex-col items-center w-content-width mx-auto gap-2">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>{"Our Catalog"}</p>
</div>
<TextAnimation
text={"Curated Marketplace"}
variant="slide-up"
gradientText={true}
tag="h2"
className="md:max-w-8/10 text-6xl 2xl:text-7xl leading-[1.15] font-semibold text-center text-balance"
/>
<TextAnimation
text={"Explore our wide range of products."}
variant="slide-up"
gradientText={false}
tag="p"
className="md:max-w-7/10 text-lg md:text-xl leading-snug text-center text-balance"
/>
{(undefined || undefined) && (
<div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3">
{undefined && <Button text={undefined.text} href={undefined.href} variant="primary"/>}
{undefined && <Button text={undefined.text} href={undefined.href} variant="secondary" animationDelay={0.1} />}
</div>
)}
</div>
<div className="w-content-width mx-auto grid grid-cols-1 md:grid-cols-6 gap-3">
{items.map((item, index) => (
<ScrollReveal key={item.title} variant="fade-blur" delay={staggerDelays[index]} className={cls("col-span-1 group", gridClasses[index])}>
<a href={item.href} className="block relative overflow-hidden rounded">
<div className="h-80 xl:h-100 2xl:h-120 overflow-hidden">
<ImageOrVideo
imageSrc={item.imageSrc}
videoSrc={item.videoSrc}
className="rounded group-hover:scale-105 transition-transform duration-500"
/>
</div>
<div className="absolute -inset-x-px -bottom-px h-2/5 backdrop-blur-xl mask-fade-top-overlay" aria-hidden="true" />
<div className="absolute inset-x-3 bottom-3 2xl:inset-x-4 2xl:bottom-4 z-10">
<div className="relative flex flex-col gap-1 md:gap-0 md:group-hover:gap-1 p-3 2xl:p-4 transition-all duration-400">
<div className="absolute inset-0 -z-10 card rounded translate-y-0 opacity-100 md:translate-y-full md:opacity-0 transition-all duration-400 ease-out md:group-hover:translate-y-0 md:group-hover:opacity-100" />
<h3 className="text-2xl font-semibold leading-snug text-foreground md:text-white transition-colors duration-400 md:group-hover:text-foreground">
{item.title}
</h3>
<div className="grid grid-rows-[1fr] md:grid-rows-[0fr] transition-all duration-400 ease-out md:group-hover:grid-rows-[1fr]">
<p className="overflow-hidden text-base leading-snug text-foreground opacity-100 md:opacity-0 transition-opacity duration-400 md:group-hover:opacity-100">
{item.description}
</p>
</div>
</div>
</div>
</a>
</ScrollReveal>
))}
</div>
</div>
</section>
);
};
export default function ProductsSection() {
return (
<div data-webild-section="products" id="products">
<ProductsInline />
</div>
);
}

View File

@@ -0,0 +1,52 @@
// 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="Community"
title="Heartfelt Feedback"
description="Our customers are at the heart of everything we do."
testimonials={[
{
name: "Alice P.",
role: "Local Resident",
quote: "The best organic produce I have found in town. Everything feels so fresh!",
imageSrc: "http://img.b2bpic.net/free-photo/fit-young-woman-ready-training_23-2148381972.jpg",
},
{
name: "Bob D.",
role: "Healthy Eater",
quote: "Love the bulk selection and the natural ingredient soaps here.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-person-shopping-freshly-harvested-fruits-veggies_482257-99839.jpg",
},
{
name: "Carla S.",
role: "Family Mom",
quote: "My kids love the fresh snacks and I appreciate the quality standards.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-cheerful-couple-holding-paper-shopping-bag_171337-2322.jpg",
},
{
name: "David L.",
role: "Chef",
quote: "Great artisanal ingredients that really make a difference in my recipes.",
imageSrc: "http://img.b2bpic.net/free-photo/organic-vegetables-close-up-beautiful-young-woman-shopping-supermarket-buying-fresh-organic-vegetables_169016-2200.jpg",
},
{
name: "Ellen W.",
role: "Wellness Enthusiast",
quote: "Old Paths is my go-to for everything natural. Always reliable.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-talking-phone-holding-vegetables_23-2148332187.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}