5 Commits

Author SHA1 Message Date
1c1dab81b4 Merge version_3_1782118460164 into main
Merge version_3_1782118460164 into main
2026-06-22 09:01:35 +00:00
kudinDmitriyUp
bd83cf406b Bob AI: Replace services carousel with 3 tiles linking to sub-pages 2026-06-22 09:00:49 +00:00
b97776b32b Merge version_2_1782118002829 into main
Merge version_2_1782118002829 into main
2026-06-22 08:49:36 +00:00
kudinDmitriyUp
d50dd6de9f Bob AI: Added holiday special popup and updated hero description 2026-06-22 08:48:50 +00:00
122ac78cc1 Merge version_1_1782117650802 into main
Merge version_1_1782117650802 into main
2026-06-22 08:41:14 +00:00
7 changed files with 214 additions and 158 deletions

View File

@@ -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 />
</>
);
}

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="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>
);
}

View File

@@ -0,0 +1,19 @@
// Created by add_section_from_catalog (HeroBillboard).
import React from 'react';
import HeroBillboard from '@/components/sections/hero/HeroBillboard';
export default function HeroSection(): React.JSX.Element {
return (
<div data-webild-section="hero" id="hero">
<HeroBillboard
title="NA Maintenance"
imageSrc="https://storage.googleapis.com/webild/users/user_3CW6pk8xM4aynzUXG3oyWQAp0l3/uploaded-1782117653888-694shgr4.png?_wi=1"
description="Quality you can see — results that last. Proudly servicing the Brisbane area."
secondaryButton={{"href":"#services","text":"Our Services"}}
tag="PREMIUM HOME & GARDEN SERVICES"
primaryButton={{"text":"Get a Quote","href":"#contact"}}
/>
</div>
);
}

View 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>
);
}

View File

@@ -0,0 +1,17 @@
// Created by add_section_from_catalog (FeaturesTaggedCards).
import React from 'react';
import FeaturesTaggedCards from '@/components/sections/features/FeaturesTaggedCards';
export default function ServicesSection(): React.JSX.Element {
return (
<div data-webild-section="services" id="services">
<FeaturesTaggedCards
title="Our Expert Services"
tag="What We Do"
items={[{"description":"Complete garden redesign, garden bed maintenance, and overall property beautification services.","primaryButton":{"text":"View Landscaping","href":"/landscaping"},"title":"Landscaping","imageSrc":"http://img.b2bpic.net/free-photo/close-up-smiley-people-greenhouse_23-2149098326.jpg?_wi=1","tag":"Service"},{"title":"Lawn Care","primaryButton":{"text":"View Lawn Care","href":"/lawn-care"},"description":"Professional mowing, edging, and lawn health maintenance to keep your grass lush and green.","tag":"Service","imageSrc":"http://img.b2bpic.net/free-photo/kids-learnign-about-environment_23-2149176587.jpg?_wi=1"},{"description":"Revitalize your surfaces, driveways, and fences with our high-pressure cleaning technology.","primaryButton":{"href":"/pressure-washing","text":"View Pressure Washing"},"title":"Pressure Washing","imageSrc":"http://img.b2bpic.net/free-photo/tired-man-cleaning-window_23-2148521053.jpg?_wi=1","tag":"Service"}]}
description="Comprehensive maintenance solutions for your property in Brisbane."
/>
</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="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>
);
}

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 "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>
);
}