Merge version_2_1781441934525 into main
Merge version_2_1781441934525 into main
This commit was merged in pull request #2.
This commit is contained in:
@@ -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 />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
39
src/pages/HomePage/sections/About.tsx
Normal file
39
src/pages/HomePage/sections/About.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
49
src/pages/HomePage/sections/Classes.tsx
Normal file
49
src/pages/HomePage/sections/Classes.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Contact.tsx
Normal file
27
src/pages/HomePage/sections/Contact.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
35
src/pages/HomePage/sections/Faq.tsx
Normal file
35
src/pages/HomePage/sections/Faq.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 "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>
|
||||
);
|
||||
}
|
||||
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 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>
|
||||
);
|
||||
}
|
||||
73
src/pages/HomePage/sections/HomeTrial.tsx
Normal file
73
src/pages/HomePage/sections/HomeTrial.tsx
Normal 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>
|
||||
)
|
||||
}
|
||||
38
src/pages/HomePage/sections/Metrics.tsx
Normal file
38
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "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>
|
||||
);
|
||||
}
|
||||
37
src/pages/HomePage/sections/Teachers.tsx
Normal file
37
src/pages/HomePage/sections/Teachers.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Testimonials.tsx
Normal file
52
src/pages/HomePage/sections/Testimonials.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user