Merge version_2_1781441934525 into main #2

Merged
bender merged 1 commits from version_2_1781441934525 into main 2026-06-14 13:00:13 +00:00
10 changed files with 408 additions and 228 deletions

View File

@@ -1,240 +1,41 @@
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import HeroOverlay from '@/components/sections/hero/HeroOverlay';
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
import TeamOverlayCards from '@/components/sections/team/TeamOverlayCards';
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
import { Calendar, Heart, MapPin, Smile, Star, Sun } 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 ClassesSection from './HomePage/sections/Classes';
import MetricsSection from './HomePage/sections/Metrics';
import TeachersSection from './HomePage/sections/Teachers';
import TestimonialsSection from './HomePage/sections/Testimonials';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
{/* webild-stub @2026-06-14T13:00:08.362Z: add a place to book home trial */}
import HomeTrialSection from './HomePage/sections/HomeTrial';export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroOverlay
tag="Find Your Inner Balance"
title="Welcome to PranVeda Yoga"
description="Experience deep harmony through ancient wisdom and modern practice. Join our soulful community and awaken your inner vitality."
primaryButton={{
text: "Join a Class",
href: "#contact",
}}
secondaryButton={{
text: "Our Philosophy",
href: "#about",
}}
imageSrc="http://img.b2bpic.net/free-photo/woman-doing-cobra-pose-exercise-mat_1170-290.jpg?_wi=1"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutFeaturesSplit
tag="Our Essence"
title="Authentic Yoga for Mind and Body"
description="At PranVeda, we blend traditional techniques with personalized guidance to help you navigate modern life with calm and clarity."
items={[
{
icon: Star,
title: "Meditation",
description: "Finding peace in the present moment.",
},
{
icon: Sun,
title: "Vinyasa",
description: "Flowing movement to awaken the spirit.",
},
{
icon: Heart,
title: "Restorative",
description: "Deep healing for tired minds and bodies.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/front-view-woman-holding-yoga-mat_23-2149832782.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="classes" data-section="classes">
<SectionErrorBoundary name="classes">
<FeaturesDetailedCards
tag="Our Practice"
title="Explore Our Yoga Paths"
description="Discover a variety of classes designed to suit your energy levels and wellness goals."
items={[
{
title: "Morning Vitality",
description: "Start your day with energizing flows that awaken your entire system.",
tags: [
"Beginner",
"Energetic",
],
imageSrc: "http://img.b2bpic.net/free-photo/yoga-woman-young-woman-doing-yoga-morning_654080-1064.jpg",
},
{
title: "Evening Calm",
description: "Slow down and decompress with restorative poses and deep breathing.",
tags: [
"All Levels",
"Relaxing",
],
imageSrc: "http://img.b2bpic.net/free-photo/perfectly-ordered-gym-equipment-high-angle_23-2149872120.jpg",
},
{
title: "Deep Mindfulness",
description: "Guided sessions focus on silence, meditation, and inner awareness.",
tags: [
"Mindfulness",
"Quiet",
],
imageSrc: "http://img.b2bpic.net/free-photo/yoga-outdoor-concept-health-body-care_185193-111343.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ClassesSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsIconCards
tag="Our Growth"
title="A Growing Community"
description="Trusted by hundreds of students across the city."
metrics={[
{
icon: Smile,
title: "Happy Students",
value: "500+",
},
{
icon: Calendar,
title: "Classes Held",
value: "1200+",
},
{
icon: MapPin,
title: "Years Active",
value: "5",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="teachers" data-section="teachers">
<SectionErrorBoundary name="teachers">
<TeamOverlayCards
tag="Meet Your Guides"
title="Our Compassionate Teachers"
description="Guided by experienced, certified practitioners dedicated to your path."
members={[
{
name: "Elena Ra",
role: "Lead Instructor",
imageSrc: "http://img.b2bpic.net/free-photo/pretty-sportive-woman-posing-beige-sofa_291049-2612.jpg",
},
{
name: "Marcus Dan",
role: "Vinyasa Expert",
imageSrc: "http://img.b2bpic.net/free-photo/young-fitness-woman-headband-looking-camera-with-confident-expression-with-arms-crossed-standing-light-background_141793-66812.jpg",
},
{
name: "Sarah Joy",
role: "Meditation Guide",
imageSrc: "http://img.b2bpic.net/free-photo/full-shot-senior-woman-dancing-studio_23-2150662412.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TeachersSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialColumnMarqueeCards
tag="Voices of Peace"
title="What Our Students Say"
description="Healing stories from our community members."
testimonials={[
{
name: "Anna S.",
role: "Student",
quote: "The most peaceful hour of my entire week.",
imageSrc: "http://img.b2bpic.net/free-photo/man-old-style-sport-clothing-practicing-yoga_176420-43019.jpg",
},
{
name: "Mark D.",
role: "Student",
quote: "PranVeda changed my relationship with stress.",
imageSrc: "http://img.b2bpic.net/free-photo/indoors-mature-woman-sitting-looking-away_23-2148827609.jpg",
},
{
name: "Julie L.",
role: "Student",
quote: "Authentic and welcoming, I felt at home immediately.",
imageSrc: "http://img.b2bpic.net/free-photo/everything-zen-charming-relieved-relaxed-meditating-plump-girl-unbothered-smiling-closed-eyes-standing-lotus-pose-reach-nirvana-breathing-practice-yoga-gain-patience-courage_176420-55373.jpg",
},
{
name: "Tom W.",
role: "Student",
quote: "Great teachers who really care about your growth.",
imageSrc: "http://img.b2bpic.net/free-photo/reaching-nirvana-close-up-portrait-calm-relaxed-young-smiling-asian-girl-close-eyes-meditating-practice-yoga-standing-zen-lotus-pose_176420-41953.jpg",
},
{
name: "Kelsey P.",
role: "Student",
quote: "Beautiful space and transformative practice.",
imageSrc: "http://img.b2bpic.net/free-photo/full-shot-man-with-towel_23-2149249471.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Common Queries"
title="We're Here to Help"
description="Have questions about your first class?"
categories={[
{
name: "General",
items: [
{
question: "What should I bring?",
answer: "Bring a yoga mat and an open mind.",
},
{
question: "Are classes suitable for beginners?",
answer: "Absolutely, all levels are welcome.",
},
],
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Let's Begin"
text="Ready to deepen your practice? Let's get started today."
primaryButton={{
text: "Book Your Class",
href: "#",
}}
secondaryButton={{
text: "Email Us",
href: "mailto:hello@pranvedayoga.com",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
<HomeTrialSection />
</>
);
}

View File

@@ -0,0 +1,39 @@
// 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 { Calendar, Heart, MapPin, Smile, Star, Sun } 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 Essence"
title="Authentic Yoga for Mind and Body"
description="At PranVeda, we blend traditional techniques with personalized guidance to help you navigate modern life with calm and clarity."
items={[
{
icon: Star,
title: "Meditation",
description: "Finding peace in the present moment.",
},
{
icon: Sun,
title: "Vinyasa",
description: "Flowing movement to awaken the spirit.",
},
{
icon: Heart,
title: "Restorative",
description: "Deep healing for tired minds and bodies.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/front-view-woman-holding-yoga-mat_23-2149832782.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,49 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "classes" section.
import React from 'react';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ClassesSection(): React.JSX.Element {
return (
<div id="classes" data-section="classes">
<SectionErrorBoundary name="classes">
<FeaturesDetailedCards
tag="Our Practice"
title="Explore Our Yoga Paths"
description="Discover a variety of classes designed to suit your energy levels and wellness goals."
items={[
{
title: "Morning Vitality",
description: "Start your day with energizing flows that awaken your entire system.",
tags: [
"Beginner",
"Energetic",
],
imageSrc: "http://img.b2bpic.net/free-photo/yoga-woman-young-woman-doing-yoga-morning_654080-1064.jpg",
},
{
title: "Evening Calm",
description: "Slow down and decompress with restorative poses and deep breathing.",
tags: [
"All Levels",
"Relaxing",
],
imageSrc: "http://img.b2bpic.net/free-photo/perfectly-ordered-gym-equipment-high-angle_23-2149872120.jpg",
},
{
title: "Deep Mindfulness",
description: "Guided sessions focus on silence, meditation, and inner awareness.",
tags: [
"Mindfulness",
"Quiet",
],
imageSrc: "http://img.b2bpic.net/free-photo/yoga-outdoor-concept-health-body-care_185193-111343.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="Let's Begin"
text="Ready to deepen your practice? Let's get started today."
primaryButton={{
text: "Book Your Class",
href: "#",
}}
secondaryButton={{
text: "Email Us",
href: "mailto:hello@pranvedayoga.com",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,35 @@
// 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="Common Queries"
title="We're Here to Help"
description="Have questions about your first class?"
categories={[
{
name: "General",
items: [
{
question: "What should I bring?",
answer: "Bring a yoga mat and an open mind.",
},
{
question: "Are classes suitable for beginners?",
answer: "Absolutely, all levels are welcome.",
},
],
},
]}
/>
</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 HeroOverlay from '@/components/sections/hero/HeroOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroOverlay
tag="Find Your Inner Balance"
title="Welcome to PranVeda Yoga"
description="Experience deep harmony through ancient wisdom and modern practice. Join our soulful community and awaken your inner vitality."
primaryButton={{
text: "Join a Class",
href: "#contact",
}}
secondaryButton={{
text: "Our Philosophy",
href: "#about",
}}
imageSrc="http://img.b2bpic.net/free-photo/woman-doing-cobra-pose-exercise-mat_1170-290.jpg?_wi=1"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,73 @@
import { motion } from "motion/react"
import Button from "@/components/ui/Button"
import Input from "@/components/ui/Input"
import Textarea from "@/components/ui/Textarea"
import Label from "@/components/ui/Label"
import Tag from "@/components/ui/Tag"
import TextAnimation from "@/components/ui/TextAnimation"
import ScrollReveal from "@/components/ui/ScrollReveal"
import ImageOrVideo from "@/components/ui/ImageOrVideo"
export default function HomeTrialSection() {
return (
<section data-webild-section="home-trial" id="home-trial" className="relative w-full py-24 bg-background">
<div className="w-content-width mx-auto px-6">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
<ScrollReveal variant="slide-up">
<div className="flex flex-col gap-6">
<Tag text="Home Trial" />
<TextAnimation
text="Book Your Home Trial"
variant="slide-up"
gradientText={false}
tag="h2"
className="text-4xl md:text-5xl font-bold text-foreground"
/>
<p className="text-lg text-muted-foreground">
Experience the benefits of yoga in the comfort of your own home. Fill out the form below to schedule your personalized home trial session.
</p>
<form className="flex flex-col gap-4 mt-4" onSubmit={(e) => e.preventDefault()}>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div className="flex flex-col gap-2">
<Label htmlFor="name">Your Name</Label>
<Input id="name" type="text" placeholder="Jane Doe" required />
</div>
<div className="flex flex-col gap-2">
<Label htmlFor="email">Email Address</Label>
<Input id="email" type="email" placeholder="jane@example.com" required />
</div>
</div>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div className="flex flex-col gap-2">
<Label htmlFor="phone">Phone Number</Label>
<Input id="phone" type="tel" placeholder="(555) 123-4567" />
</div>
<div className="flex flex-col gap-2">
<Label htmlFor="date">Preferred Date</Label>
<Input id="date" type="date" required />
</div>
</div>
<div className="flex flex-col gap-2">
<Label htmlFor="message">Any specific goals or injuries we should know about?</Label>
<Textarea id="message" placeholder="Tell us a bit about your practice..." rows={4} />
</div>
<Button text="Request Home Trial" variant="primary" className="w-full mt-2" />
</form>
</div>
</ScrollReveal>
<ScrollReveal variant="fade-blur" delay={0.2} className="h-full min-h-[400px] lg:min-h-[600px] relative rounded-theme overflow-hidden">
<ImageOrVideo
imageSrc="https://images.unsplash.com/photo-1544367567-0f2fcb009e0b?q=80&w=2120&auto=format&fit=crop"
className="absolute inset-0 w-full h-full object-cover"
/>
</ScrollReveal>
</div>
</div>
</section>
)
}

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 { Calendar, Heart, MapPin, Smile, Star, Sun } 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 Growth"
title="A Growing Community"
description="Trusted by hundreds of students across the city."
metrics={[
{
icon: Smile,
title: "Happy Students",
value: "500+",
},
{
icon: Calendar,
title: "Classes Held",
value: "1200+",
},
{
icon: MapPin,
title: "Years Active",
value: "5",
},
]}
/>
</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 "teachers" section.
import React from 'react';
import TeamOverlayCards from '@/components/sections/team/TeamOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TeachersSection(): React.JSX.Element {
return (
<div id="teachers" data-section="teachers">
<SectionErrorBoundary name="teachers">
<TeamOverlayCards
tag="Meet Your Guides"
title="Our Compassionate Teachers"
description="Guided by experienced, certified practitioners dedicated to your path."
members={[
{
name: "Elena Ra",
role: "Lead Instructor",
imageSrc: "http://img.b2bpic.net/free-photo/pretty-sportive-woman-posing-beige-sofa_291049-2612.jpg",
},
{
name: "Marcus Dan",
role: "Vinyasa Expert",
imageSrc: "http://img.b2bpic.net/free-photo/young-fitness-woman-headband-looking-camera-with-confident-expression-with-arms-crossed-standing-light-background_141793-66812.jpg",
},
{
name: "Sarah Joy",
role: "Meditation Guide",
imageSrc: "http://img.b2bpic.net/free-photo/full-shot-senior-woman-dancing-studio_23-2150662412.jpg",
},
]}
/>
</SectionErrorBoundary>
</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="Voices of Peace"
title="What Our Students Say"
description="Healing stories from our community members."
testimonials={[
{
name: "Anna S.",
role: "Student",
quote: "The most peaceful hour of my entire week.",
imageSrc: "http://img.b2bpic.net/free-photo/man-old-style-sport-clothing-practicing-yoga_176420-43019.jpg",
},
{
name: "Mark D.",
role: "Student",
quote: "PranVeda changed my relationship with stress.",
imageSrc: "http://img.b2bpic.net/free-photo/indoors-mature-woman-sitting-looking-away_23-2148827609.jpg",
},
{
name: "Julie L.",
role: "Student",
quote: "Authentic and welcoming, I felt at home immediately.",
imageSrc: "http://img.b2bpic.net/free-photo/everything-zen-charming-relieved-relaxed-meditating-plump-girl-unbothered-smiling-closed-eyes-standing-lotus-pose-reach-nirvana-breathing-practice-yoga-gain-patience-courage_176420-55373.jpg",
},
{
name: "Tom W.",
role: "Student",
quote: "Great teachers who really care about your growth.",
imageSrc: "http://img.b2bpic.net/free-photo/reaching-nirvana-close-up-portrait-calm-relaxed-young-smiling-asian-girl-close-eyes-meditating-practice-yoga-standing-zen-lotus-pose_176420-41953.jpg",
},
{
name: "Kelsey P.",
role: "Student",
quote: "Beautiful space and transformative practice.",
imageSrc: "http://img.b2bpic.net/free-photo/full-shot-man-with-towel_23-2149249471.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}