Compare commits
104 Commits
version_2_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9abdace094 | |||
| e60273b8ee | |||
| 69b84877d8 | |||
| be89867ec5 | |||
| 517ba56d91 | |||
| b1cffe274a | |||
| 34b60991ad | |||
| deb1aeec7a | |||
| 23fc37a4a6 | |||
| 0471b12852 | |||
| f51eee97b3 | |||
| 6cfb452c1f | |||
| 10e010a57b | |||
| e01a98d5ed | |||
| 837d6f0d1b | |||
| 0bef9e0ebd | |||
| 4859bda1a4 | |||
| 6ddc031a76 | |||
| e7694636c4 | |||
| 0ede1f2497 | |||
| ce48dc07d8 | |||
| b59f2385e9 | |||
| 628679b459 | |||
| b41b9871ed | |||
| cad2e1cc84 | |||
| 3d238b3680 | |||
| 8f675b2220 | |||
| dc19f2a4f7 | |||
| 13ea6c86df | |||
| 76153bf056 | |||
| 50e691cecd | |||
| ffbcc03d32 | |||
| ec26665075 | |||
| b725e0e165 | |||
| c0a62dc9d3 | |||
| 3cf3cb8fe6 | |||
| 6074065bd4 | |||
| 7ff268366e | |||
| ef5fb27eeb | |||
| e15a361371 | |||
| ccee6b0f7c | |||
| 80f14b3bd9 | |||
| 762107932b | |||
| a1a48e504d | |||
| 2c0c07f3a2 | |||
| 241ca5238d | |||
| 2de6a12273 | |||
|
|
651c40223b | ||
| 0783c89bb3 | |||
| 785e203fec | |||
| ee6f658beb | |||
| 68f2fddd4d | |||
| 3b02cf2acd | |||
| f85f96dd67 | |||
| 1c8df85e2f | |||
| 50c52acaf8 | |||
| 60ad47a8b1 | |||
| d90f154fc2 | |||
| 07fbae970a | |||
| 80e7448228 | |||
| c97cf96668 | |||
| a6b37fb3fc | |||
| 3cb035fe9d | |||
| 4b2673ee24 | |||
| 7020d2049b | |||
| 359a5791e9 | |||
| 52bca9a977 | |||
| 3a85b8c45f | |||
| ddab8f3515 | |||
| c824e71172 | |||
| beeee1dc34 | |||
| c066c16800 | |||
| 2ee11f6f8a | |||
| 82cc26ed14 | |||
| ec8251a4b1 | |||
| 84fb0fdf39 | |||
| 75018b8b1e | |||
| 94b683a670 | |||
| c334229a6c | |||
| b675bf09a1 | |||
| 118824317c | |||
| 34d14f1642 | |||
| b38f8f5967 | |||
| bd7ebdef80 | |||
| 7280114d9a | |||
| 12faa68198 | |||
| 4df44b295a | |||
| e77ba71aca | |||
| be906a44ac | |||
| cb7a500659 | |||
| 47c5b98ccf | |||
| 846c2f1e17 | |||
| 9b9328ebc0 | |||
| 09de09e195 | |||
| 01f5ba9779 | |||
| 2b68aa6884 | |||
| 1b3dc87e4e | |||
| db86a3cbfd | |||
| f5977ed866 | |||
| 8008b51319 | |||
| 4580baf8b5 | |||
| ca86c7467a | |||
| d87eac034d | |||
| 6154682972 |
@@ -1,288 +1,36 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee';
|
||||
import PricingSimpleCards from '@/components/sections/pricing/PricingSimpleCards';
|
||||
import TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
|
||||
import { Award, CheckCircle, GraduationCap, Star, Target, Waves } 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 ServicesSection from './HomePage/sections/Services';
|
||||
import ProductSection from './HomePage/sections/Product';
|
||||
import PricingSection from './HomePage/sections/Pricing';
|
||||
import ReviewsSection from './HomePage/sections/Reviews';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroOverlayMarquee
|
||||
tag="West Metro Surf & Charters"
|
||||
title="NorthWakeSurfCo"
|
||||
description="Professional surf lessons and boat charters in the West Metro lakes area. Your personal captain for stress-free fun on the water."
|
||||
primaryButton={{
|
||||
text: "Book Your Session",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "View Pricing",
|
||||
href: "#pricing",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
text: "Lessons & Charters",
|
||||
icon: Waves,
|
||||
},
|
||||
{
|
||||
text: "All Skill Levels",
|
||||
icon: Award,
|
||||
},
|
||||
{
|
||||
text: "Kids Camps",
|
||||
icon: GraduationCap,
|
||||
},
|
||||
]}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145801-kb33aru8.png?_wi=1"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="Dylan Nelson - Your Captain"
|
||||
title="Why NorthWakeSurfCo?"
|
||||
description="I'm Dylan Nelson, your dedicated captain and instructor. Whether you need professional surf lessons on my loaded Malibu 23 LSV or want me to captain your own boat for a stress-free day on Lake Minnetonka, Waconia, or Independence, I'm here to ensure you have a blast."
|
||||
items={[
|
||||
{
|
||||
icon: Star,
|
||||
title: "Flexible Hours",
|
||||
description: "Weekdays: 4pm-10pm | Weekends: 10am-6pm",
|
||||
},
|
||||
{
|
||||
icon: Target,
|
||||
title: "All Ages & Skills",
|
||||
description: "Perfect for beginners to pros and kids camps.",
|
||||
},
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "On-Call Service",
|
||||
description: "Highly flexible and adaptable to your needs.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145803-c6mhlaw5.png?_wi=1"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Our Offerings"
|
||||
title="Tailored Aquatic Experiences"
|
||||
description="From expert surf coaching to boat captaining services, we handle everything."
|
||||
items={[
|
||||
{
|
||||
title: "Professional Surf Lessons",
|
||||
description: "Learn to shred behind the Malibu 23 LSV.",
|
||||
buttonIcon: "Waves",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145804-mlhqdvbg.png?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Private Charters",
|
||||
description: "Stress-free days on the water for your group.",
|
||||
buttonIcon: "Ship",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145804-esjbqy4s.png?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Kids Surf Camps",
|
||||
description: "Fun, safe, and skill-focused learning for kids.",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145806-zpcm2nzc.png?_wi=1",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ServicesSection />
|
||||
|
||||
<div id="product" data-section="product">
|
||||
<SectionErrorBoundary name="product">
|
||||
<FeaturesImageBento
|
||||
tag="The Equipment"
|
||||
title="Loaded Malibu 23 LSV"
|
||||
description="The best surf boat on the market, professionally operated by your captain."
|
||||
items={[
|
||||
{
|
||||
title: "Elite Performance",
|
||||
description: "Premium wake surfing technology.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145804-mlhqdvbg.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Safety First",
|
||||
description: "Pro-level gear provided.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145804-esjbqy4s.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Expert Captaining",
|
||||
description: "Stress-free navigation.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145806-zpcm2nzc.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Instruction",
|
||||
description: "Coaching by Dylan Nelson.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145801-kb33aru8.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Flexible Booking",
|
||||
description: "On-call service.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145803-c6mhlaw5.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Kids Focus",
|
||||
description: "Special camps and lessons.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576547187-qx4hkd9v.png",
|
||||
},
|
||||
{
|
||||
title: "West Metro Lakes",
|
||||
description: "Independence, Minnetonka, Waconia.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/look-you-have-almost-caught-this-fish_329181-10589.jpg?_wi=1",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProductSection />
|
||||
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingSimpleCards
|
||||
tag="Pricing & Packages"
|
||||
title="Simple Booking Options"
|
||||
description="Straightforward rates for lessons and captaining."
|
||||
plans={[
|
||||
{
|
||||
tag: "Private Lesson",
|
||||
price: "$180/hr",
|
||||
description: "On our boat (Malibu 23 LSV)",
|
||||
features: [
|
||||
"2-hour minimum ($400)",
|
||||
"Professional coaching",
|
||||
"Pro equipment included",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Captain/Mobile",
|
||||
price: "$125/hr",
|
||||
description: "On your boat",
|
||||
features: [
|
||||
"2-hour minimum ($300)",
|
||||
"Stress-free captaining",
|
||||
"Your own gear",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Notice",
|
||||
price: "$100",
|
||||
description: "Same day booking fee",
|
||||
features: [
|
||||
"Applicable to all bookings",
|
||||
"Same day/Short notice",
|
||||
"Flexible service",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<PricingSection />
|
||||
|
||||
<div id="reviews" data-section="reviews">
|
||||
<SectionErrorBoundary name="reviews">
|
||||
<TestimonialOverlayCards
|
||||
tag="Testimonials"
|
||||
title="5-Star Experiences"
|
||||
description="See why locals trust Dylan for their time on the water."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah Miller",
|
||||
role: "Parent",
|
||||
company: "Lake Minnetonka",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-couple-traveling-together-with-map_23-2149049099.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "Jason Reed",
|
||||
role: "Surf Enthusiast",
|
||||
company: "Lake Independence",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/look-you-have-almost-caught-this-fish_329181-10589.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "Emily Chen",
|
||||
role: "Boat Owner",
|
||||
company: "Lake Waconia",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-recreateion_273609-44331.jpg",
|
||||
},
|
||||
{
|
||||
name: "Mark Stevens",
|
||||
role: "Charter Guest",
|
||||
company: "West Metro",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/attractive-fashionable-young-man-trendy-headwear-sitting-wooden-table-coffee-shop_273609-1757.jpg",
|
||||
},
|
||||
{
|
||||
name: "Jenna Davis",
|
||||
role: "Parent",
|
||||
company: "Lake Minnetonka",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/closeup-focus-portrait-handsome-adult-man-standing-pier_181624-25882.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ReviewsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTwoColumn
|
||||
tag="FAQ"
|
||||
title="Questions Answered"
|
||||
description="Everything you need to know about booking with us."
|
||||
items={[
|
||||
{
|
||||
question: "What lakes do you cover?",
|
||||
answer: "I mainly serve Lake Independence, Lake Minnetonka, and Lake Waconia, plus others in the West Metro.",
|
||||
},
|
||||
{
|
||||
question: "Can I have you captain my boat?",
|
||||
answer: "Yes! I offer mobile captain services for $125/hr so you can stay stress-free on your own boat.",
|
||||
},
|
||||
{
|
||||
question: "What if I need a last-minute session?",
|
||||
answer: "We offer late/same-day booking for a $100 short-notice fee.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer kids' lessons?",
|
||||
answer: "Absolutely! I specialize in teaching all ages and levels, including kids' camps.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Book Now"
|
||||
text="Ready to get on the water? Call Dylan at 612.814.2431 or book your spot today."
|
||||
primaryButton={{
|
||||
text: "Call Dylan",
|
||||
href: "tel:6128142431",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Follow on Instagram",
|
||||
href: "https://instagram.com/northwakesurfco",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
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 { Award, CheckCircle, GraduationCap, Star, Target, Waves } 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="Dylan Nelson - Your Captain"
|
||||
title="Why NorthWakeSurfCo?"
|
||||
description="I'm Dylan Nelson, your dedicated captain and instructor. Whether you need professional surf lessons on my loaded Malibu 23 LSV or want me to captain your own boat for a stress-free day on Lake Minnetonka, Waconia, or Independence, I'm here to ensure you have a blast."
|
||||
items={[
|
||||
{
|
||||
icon: Star,
|
||||
title: "Flexible Hours",
|
||||
description: "Weekdays: 4pm-10pm | Weekends: 10am-6pm",
|
||||
},
|
||||
{
|
||||
icon: Target,
|
||||
title: "All Ages & Skills",
|
||||
description: "Perfect for beginners to pros and kids camps.",
|
||||
},
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "On-Call Service",
|
||||
description: "Highly flexible and adaptable to your needs.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145803-c6mhlaw5.png?_wi=1"
|
||||
/>
|
||||
</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="Book Now"
|
||||
text="Ready to get on the water? Call Dylan at (612-814-2431) or message me on Facebook"
|
||||
primaryButton={{
|
||||
text: "Call Dylan",
|
||||
href: "tel:6128142431",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Follow on Facebook",
|
||||
href: "https://instagram.com/northwakesurfco",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Faq.tsx
Normal file
38
src/pages/HomePage/sections/Faq.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 "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTwoColumn
|
||||
tag="FAQ"
|
||||
title="Questions Answered"
|
||||
description="Everything you need to know about booking with us."
|
||||
items={[
|
||||
{
|
||||
question: "What lakes do you cover?",
|
||||
answer: "I mainly serve Lake Independence, Lake Minnetonka, and Lake Waconia, plus others in the West Metro.",
|
||||
},
|
||||
{
|
||||
question: "Can I have you captain my boat?",
|
||||
answer: "Yes! I offer mobile captain services for $125/hr so you can stay stress-free on your own boat.",
|
||||
},
|
||||
{
|
||||
question: "What if I need a last-minute session?",
|
||||
answer: "We offer late/same-day booking for a $100 short-notice fee.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer kids' lessons?",
|
||||
answer: "Absolutely! I specialize in teaching all ages and levels, including kids' camps.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
46
src/pages/HomePage/sections/Hero.tsx
Normal file
46
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,46 @@
|
||||
// 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 HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee';
|
||||
import { Award, CheckCircle, GraduationCap, Star, Target, Waves } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<div className="[&_p]:!text-black [&_p]:!font-medium [&_p]:!drop-shadow-md">
|
||||
<HeroOverlayMarquee
|
||||
tag="West Metro Surf & Charters"
|
||||
title=" "
|
||||
description=""
|
||||
primaryButton={{
|
||||
text: "Book Your Session",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "View Pricing",
|
||||
href: "#pricing",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
text: "Lessons & Charters",
|
||||
icon: Waves,
|
||||
},
|
||||
{
|
||||
text: "All Skill Levels",
|
||||
icon: Award,
|
||||
},
|
||||
{
|
||||
text: "Kids Camps",
|
||||
icon: GraduationCap,
|
||||
},
|
||||
]}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145801-kb33aru8.png?_wi=1"
|
||||
/>
|
||||
</div>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Pricing.tsx
Normal file
52
src/pages/HomePage/sections/Pricing.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 "pricing" section.
|
||||
|
||||
import React from 'react';
|
||||
import PricingSimpleCards from '@/components/sections/pricing/PricingSimpleCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function PricingSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingSimpleCards
|
||||
tag="Pricing & Packages"
|
||||
title="Simple Booking Options"
|
||||
description="Straightforward rates for lessons and captaining."
|
||||
plans={[
|
||||
{
|
||||
tag: "Private Lesson/Charter/Charter",
|
||||
price: "$180/hr",
|
||||
description: "On our boat (Malibu 23 LSV)",
|
||||
features: [
|
||||
"2-hour minimum ($400)",
|
||||
"Professional coaching",
|
||||
"Pro equipment included",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Captain/Mobile",
|
||||
price: "$125/hr",
|
||||
description: "On your boat",
|
||||
features: [
|
||||
"2-hour minimum ($300)",
|
||||
"Stress-free captaining",
|
||||
"Your own gear",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Late Late Notice",
|
||||
price: "$100",
|
||||
description: "Same day booking fee",
|
||||
features: [
|
||||
"Applicable to all bookings",
|
||||
"Same day/Short notice",
|
||||
"Flexible service",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Product.tsx
Normal file
57
src/pages/HomePage/sections/Product.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "product" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ProductSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="product" data-section="product">
|
||||
<SectionErrorBoundary name="product">
|
||||
<FeaturesImageBento
|
||||
tag="The Equipment"
|
||||
title="Loaded Malibu 23 LSV"
|
||||
description="The best surf boat on the market, professionally operated by your captain."
|
||||
items={[
|
||||
{
|
||||
title: "Elite Performance",
|
||||
description: "Premium wake surfing technology.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145804-mlhqdvbg.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Safety First",
|
||||
description: "Pro-level gear provided.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145804-esjbqy4s.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Expert Captaining",
|
||||
description: "Stress-free navigation.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145806-zpcm2nzc.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "",
|
||||
description: "Coaching by Dylan Nelson.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145801-kb33aru8.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Flexible Booking",
|
||||
description: "On-call service.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576145803-c6mhlaw5.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Kids Focus",
|
||||
description: "Special camps and lessons.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576547187-qx4hkd9v.png",
|
||||
},
|
||||
{
|
||||
title: "West Metro Lakes",
|
||||
description: "Independence, Minnetonka, Waconia.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576613213-umrrbd00.png",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Reviews.tsx
Normal file
57
src/pages/HomePage/sections/Reviews.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "reviews" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ReviewsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="reviews" data-section="reviews">
|
||||
<SectionErrorBoundary name="reviews">
|
||||
<TestimonialOverlayCards
|
||||
tag="Testimonials"
|
||||
title="5-Star Experiences"
|
||||
description="See why locals trust Dylan for their time on the water."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Aaron Nelson",
|
||||
role: "Surf Lessons ",
|
||||
company: "Lake Minnetonka",
|
||||
rating: 5,
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781577003524-3mfik4jb.png",
|
||||
},
|
||||
{
|
||||
name: "Carson Rock",
|
||||
role: "Charter Guest",
|
||||
company: "Lake Independence",
|
||||
rating: 5,
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576987925-5vbxlqxl.png",
|
||||
},
|
||||
{
|
||||
name: "Jennifer Johnson",
|
||||
role: "Boat Owner",
|
||||
company: "Lake Waconia",
|
||||
rating: 5,
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576943539-vv624led.png",
|
||||
},
|
||||
{
|
||||
name: "Erik Estrada",
|
||||
role: "Charter Guest",
|
||||
company: "West Metro",
|
||||
rating: 5,
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576922805-1bnfu5p3.png",
|
||||
},
|
||||
{
|
||||
name: "Christopher Estrada",
|
||||
role: "Surf Lessons ",
|
||||
company: "Lake Minnetonka",
|
||||
rating: 5,
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781576900467-8z6eeucl.png",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
40
src/pages/HomePage/sections/Services.tsx
Normal file
40
src/pages/HomePage/sections/Services.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 "services" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ServicesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Our Offerings"
|
||||
title="Aquatic Experiences"
|
||||
description="From expert surf coaching to boat captaining services, we handle everything."
|
||||
items={[
|
||||
{
|
||||
title: " Surf Lessons",
|
||||
description: "Learn to shred behind the Malibu 23 LSV.",
|
||||
buttonIcon: "Waves",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781577568821-30vgvlia.png",
|
||||
},
|
||||
{
|
||||
title: "Private Charters",
|
||||
description: "Stress-free days on the water for your group.",
|
||||
buttonIcon: "Ship",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781577467359-htvk7ice.png",
|
||||
},
|
||||
{
|
||||
title: "Kids Surf Camps",
|
||||
description: "Fun, safe, and skill-focused learning for kids.",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FCIN8Atu7x49OpvWJ7VHozMAvL/uploaded-1781577356942-kc0gftwx.png",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user