Merge version_2_1782118002829 into main #2
@@ -1,167 +1,29 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import HeroBillboard from '@/components/sections/hero/HeroBillboard';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import { CheckCircle, Clock, Star } 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 ServicesSection from './HomePage/sections/Services';
|
||||
import WhyUsSection from './HomePage/sections/WhyUs';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import HolidaySpecialSection from './HomePage/sections/HolidaySpecial';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboard
|
||||
tag="PREMIUM HOME & GARDEN SERVICES"
|
||||
title="NA Maintenance"
|
||||
description="Quality you can see — results that last. Holiday Special: 25% off all jobs over $150."
|
||||
primaryButton={{
|
||||
text: "Get a Quote",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Services",
|
||||
href: "#services",
|
||||
}}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3CW6pk8xM4aynzUXG3oyWQAp0l3/uploaded-1782117653888-694shgr4.png?_wi=1"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
<HolidaySpecialSection />
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesMediaCarousel
|
||||
tag="What We Do"
|
||||
title="Our Expert Services"
|
||||
description="Comprehensive maintenance solutions for your property in Brisbane."
|
||||
items={[
|
||||
{
|
||||
title: "Pressure Washing",
|
||||
description: "Revitalize your surfaces, driveways, and fences with our high-pressure cleaning technology.",
|
||||
buttonIcon: "Droplets",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3CW6pk8xM4aynzUXG3oyWQAp0l3/uploaded-1782117653888-694shgr4.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Lawn Care",
|
||||
description: "Professional mowing, edging, and lawn health maintenance to keep your grass lush and green.",
|
||||
buttonIcon: "Scissors",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/kids-learnign-about-environment_23-2149176587.jpg?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Landscaping",
|
||||
description: "Complete garden redesign, garden bed maintenance, and overall property beautification services.",
|
||||
buttonIcon: "Leaf",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-people-greenhouse_23-2149098326.jpg?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Gutter Cleaning",
|
||||
description: "Safely clear your gutters to prevent blockages and water damage to your property roof.",
|
||||
buttonIcon: "Wind",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tired-man-cleaning-window_23-2148521053.jpg?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Window Cleaning",
|
||||
description: "Streak-free cleaning for your residential windows, letting in natural light and clarity.",
|
||||
buttonIcon: "Sun",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-working-tech-brand-together_23-2150966128.jpg?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Deck Restoration",
|
||||
description: "Protect and enhance your timber decks with professional sanding and sealing services.",
|
||||
buttonIcon: "Hammer",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-servant-caring-garden_23-2149530842.jpg?_wi=1",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ServicesSection />
|
||||
|
||||
<div id="why-us" data-section="why-us">
|
||||
<SectionErrorBoundary name="why-us">
|
||||
<AboutFeaturesSplit
|
||||
tag="Why Choose Us"
|
||||
title="Reliable Care for Your Home"
|
||||
description="We are dedicated to providing Brisbane residents with the highest standard of property maintenance."
|
||||
items={[
|
||||
{
|
||||
icon: Star,
|
||||
title: "Free Quotes",
|
||||
description: "No cost, no obligation — we assess and give you an honest price upfront.",
|
||||
},
|
||||
{
|
||||
icon: Clock,
|
||||
title: "Affordable Prices",
|
||||
description: "Premium results without the premium price tag — fair rates every time.",
|
||||
},
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "Reliable Service",
|
||||
description: "We show up on time and get the job done right, every single visit.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3CW6pk8xM4aynzUXG3oyWQAp0l3/uploaded-1782117653888-694shgr4.png?_wi=3"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<WhyUsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Customer Feedback"
|
||||
title="Trusted by Brisbane Homeowners"
|
||||
description="Hear what our valued clients have to say about our maintenance work."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.",
|
||||
role: "Resident",
|
||||
quote: "NA Maintenance did an incredible job on our lawn and pressure washing. Highly recommended!",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/kids-learnign-about-environment_23-2149176587.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "Michael B.",
|
||||
role: "Homeowner",
|
||||
quote: "Fast, professional, and excellent quality. The 25% discount was a great bonus.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-people-greenhouse_23-2149098326.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "David W.",
|
||||
role: "Property Manager",
|
||||
quote: "Consistently reliable service. NA Maintenance is my go-to for all property upkeep needs.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tired-man-cleaning-window_23-2148521053.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "Emily P.",
|
||||
role: "Local Resident",
|
||||
quote: "The team was punctual and left my garden looking brand new. Very impressed.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-working-tech-brand-together_23-2150966128.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "James K.",
|
||||
role: "Homeowner",
|
||||
quote: "Outstanding value for money. They really care about the quality of their work.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-servant-caring-garden_23-2149530842.jpg?_wi=2",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Get Started"
|
||||
text="Get your free quote today - No obligation - we come to you."
|
||||
primaryButton={{
|
||||
text: "0413 274 837",
|
||||
href: "tel:0413274837",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Email Us",
|
||||
href: "mailto:napressurebrisbane@gmail.com",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
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="Get Started"
|
||||
text="Get your free quote today - No obligation - we come to you."
|
||||
primaryButton={{
|
||||
text: "0413 274 837",
|
||||
href: "tel:0413274837",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Email Us",
|
||||
href: "mailto:napressurebrisbane@gmail.com",
|
||||
}}
|
||||
/>
|
||||
</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 HeroBillboard from '@/components/sections/hero/HeroBillboard';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboard
|
||||
tag="PREMIUM HOME & GARDEN SERVICES"
|
||||
title="NA Maintenance"
|
||||
description="Quality you can see — results that last. Proudly servicing the Brisbane area."
|
||||
primaryButton={{
|
||||
text: "Get a Quote",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Services",
|
||||
href: "#services",
|
||||
}}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3CW6pk8xM4aynzUXG3oyWQAp0l3/uploaded-1782117653888-694shgr4.png?_wi=1"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
40
src/pages/HomePage/sections/HolidaySpecial.tsx
Normal file
40
src/pages/HomePage/sections/HolidaySpecial.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import { X } from 'lucide-react';
|
||||
import Button from '@/components/ui/Button';
|
||||
|
||||
export default function HolidaySpecialSection() {
|
||||
const [isVisible, setIsVisible] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const timer = setTimeout(() => {
|
||||
setIsVisible(true);
|
||||
}, 1500);
|
||||
return () => clearTimeout(timer);
|
||||
}, []);
|
||||
|
||||
if (!isVisible) return null;
|
||||
|
||||
return (
|
||||
<div data-webild-section="holiday-special" id="holiday-special" className="fixed bottom-4 right-4 z-50 w-full max-w-sm p-6 bg-card border border-primary-cta/20 rounded-lg shadow-2xl transition-all duration-500 ease-in-out">
|
||||
<button
|
||||
className="absolute top-4 right-4 text-accent hover:text-primary-cta transition-colors"
|
||||
onClick={() => setIsVisible(false)}
|
||||
>
|
||||
<X size={20} />
|
||||
</button>
|
||||
<div className="pr-6">
|
||||
<h3 className="text-xl font-bold text-primary-cta mb-2">Holiday Special! 🎄</h3>
|
||||
<p className="text-foreground mb-4">
|
||||
Get <span className="font-bold text-primary-cta">25% off</span> all jobs over $150. Limited time only!
|
||||
</p>
|
||||
<Button
|
||||
text="Claim Offer"
|
||||
href="#contact"
|
||||
variant="primary"
|
||||
className="w-full"
|
||||
onClick={() => setIsVisible(false)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
58
src/pages/HomePage/sections/Services.tsx
Normal file
58
src/pages/HomePage/sections/Services.tsx
Normal file
@@ -0,0 +1,58 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "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="What We Do"
|
||||
title="Our Expert Services"
|
||||
description="Comprehensive maintenance solutions for your property in Brisbane."
|
||||
items={[
|
||||
{
|
||||
title: "Pressure Washing",
|
||||
description: "Revitalize your surfaces, driveways, and fences with our high-pressure cleaning technology.",
|
||||
buttonIcon: "Droplets",
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3CW6pk8xM4aynzUXG3oyWQAp0l3/uploaded-1782117653888-694shgr4.png?_wi=2",
|
||||
},
|
||||
{
|
||||
title: "Lawn Care",
|
||||
description: "Professional mowing, edging, and lawn health maintenance to keep your grass lush and green.",
|
||||
buttonIcon: "Scissors",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/kids-learnign-about-environment_23-2149176587.jpg?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Landscaping",
|
||||
description: "Complete garden redesign, garden bed maintenance, and overall property beautification services.",
|
||||
buttonIcon: "Leaf",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-people-greenhouse_23-2149098326.jpg?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Gutter Cleaning",
|
||||
description: "Safely clear your gutters to prevent blockages and water damage to your property roof.",
|
||||
buttonIcon: "Wind",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tired-man-cleaning-window_23-2148521053.jpg?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Window Cleaning",
|
||||
description: "Streak-free cleaning for your residential windows, letting in natural light and clarity.",
|
||||
buttonIcon: "Sun",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-working-tech-brand-together_23-2150966128.jpg?_wi=1",
|
||||
},
|
||||
{
|
||||
title: "Deck Restoration",
|
||||
description: "Protect and enhance your timber decks with professional sanding and sealing services.",
|
||||
buttonIcon: "Hammer",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-servant-caring-garden_23-2149530842.jpg?_wi=1",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</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="Customer Feedback"
|
||||
title="Trusted by Brisbane Homeowners"
|
||||
description="Hear what our valued clients have to say about our maintenance work."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.",
|
||||
role: "Resident",
|
||||
quote: "NA Maintenance did an incredible job on our lawn and pressure washing. Highly recommended!",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/kids-learnign-about-environment_23-2149176587.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "Michael B.",
|
||||
role: "Homeowner",
|
||||
quote: "Fast, professional, and excellent quality. The 25% discount was a great bonus.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-people-greenhouse_23-2149098326.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "David W.",
|
||||
role: "Property Manager",
|
||||
quote: "Consistently reliable service. NA Maintenance is my go-to for all property upkeep needs.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tired-man-cleaning-window_23-2148521053.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "Emily P.",
|
||||
role: "Local Resident",
|
||||
quote: "The team was punctual and left my garden looking brand new. Very impressed.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-working-tech-brand-together_23-2150966128.jpg?_wi=2",
|
||||
},
|
||||
{
|
||||
name: "James K.",
|
||||
role: "Homeowner",
|
||||
quote: "Outstanding value for money. They really care about the quality of their work.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-servant-caring-garden_23-2149530842.jpg?_wi=2",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
39
src/pages/HomePage/sections/WhyUs.tsx
Normal file
39
src/pages/HomePage/sections/WhyUs.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 "why-us" section.
|
||||
|
||||
import React from 'react';
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import { CheckCircle, Clock, Star } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function WhyUsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="why-us" data-section="why-us">
|
||||
<SectionErrorBoundary name="why-us">
|
||||
<AboutFeaturesSplit
|
||||
tag="Why Choose Us"
|
||||
title="Reliable Care for Your Home"
|
||||
description="We are dedicated to providing Brisbane residents with the highest standard of property maintenance."
|
||||
items={[
|
||||
{
|
||||
icon: Star,
|
||||
title: "Free Quotes",
|
||||
description: "No cost, no obligation — we assess and give you an honest price upfront.",
|
||||
},
|
||||
{
|
||||
icon: Clock,
|
||||
title: "Affordable Prices",
|
||||
description: "Premium results without the premium price tag — fair rates every time.",
|
||||
},
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "Reliable Service",
|
||||
description: "We show up on time and get the job done right, every single visit.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3CW6pk8xM4aynzUXG3oyWQAp0l3/uploaded-1782117653888-694shgr4.png?_wi=3"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user