3 Commits

Author SHA1 Message Date
1a35a05177 Merge version_2_1781620421949 into main
Merge version_2_1781620421949 into main
2026-06-16 14:35:33 +00:00
kudinDmitriyUp
123edcf4a6 Bob AI: Add service areas section listing Houston neighborhoods 2026-06-16 14:34:47 +00:00
923a8638c6 Merge version_1_1781620184243 into main
Merge version_1_1781620184243 into main
2026-06-16 14:32:27 +00:00
10 changed files with 342 additions and 164 deletions

View File

@@ -1,176 +1,38 @@
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import HeroBillboardTiltedCarousel from '@/components/sections/hero/HeroBillboardTiltedCarousel';
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
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 MetricsSection from './HomePage/sections/Metrics';
import TestimonialsSection from './HomePage/sections/Testimonials';
import FaqSection from './HomePage/sections/Faq';
import SocialSection from './HomePage/sections/Social';
import ContactSection from './HomePage/sections/Contact';
import ServiceAreasSection from './HomePage/sections/ServiceAreas';export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardTiltedCarousel
tag="Available 24/7"
title="Your Trusted First Aid for Plumbing Emergencies"
description="Professional plumbing services in Houston, TX. Quality repair, installation, and maintenance with a focus on fast results."
primaryButton={{
text: "Call Now", href: "tel:+18322793065"}}
secondaryButton={{
text: "Get Directions", href: "https://maps.google.com"}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/man-engaged-household-task_23-2151741241.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/person-white-bathrobe-filling-bath-with-water_259150-59743.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-as-plumber_23-2150746311.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/pleased-young-male-builder-wearing-uniform-safety-helmet-holding-out-wrench-camera-white_141793-74993.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/profile-man-touching-socket-wall-with-screwdriver_259150-58245.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/dinosaurs-inside-panel-ai-generated_268835-18600.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTestimonial
tag="About Us"
quote="First Aid Plumbing Specialist INC provides reliable, 24/7 emergency care for all your home and business plumbing needs throughout the Houston area."
author="Management"
role="Plumbing Specialists"
imageSrc="http://img.b2bpic.net/free-photo/sanitary-technician-gesturing-thumb-up_23-2147772204.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesImageBento
tag="Our Services"
title="Complete Plumbing Solutions"
description="Covering all essential residential and commercial plumbing needs with precision."
items={[
{
title: "Leak Detection", description: "Quick identification of pipe leaks.", imageSrc: "http://img.b2bpic.net/free-photo/plumber-repair-experienced-attentive-middleaged-man-examining-bottom-kitchen-sink_259150-58266.jpg"},
{
title: "Toilet Repair", description: "Complete service for all toilet issues.", imageSrc: "http://img.b2bpic.net/free-photo/male-plumber-working-fix-problems-client-s-house_23-2150990706.jpg"},
{
title: "Water Heaters", description: "Repair and installation for heaters.", imageSrc: "http://img.b2bpic.net/free-photo/worker-repairing-water-heater_23-2149334232.jpg"},
{
title: "Drain Cleaning", description: "High-pressure drain clearance.", imageSrc: "http://img.b2bpic.net/free-photo/woman-pouring-water-barbershop_23-2147737008.jpg"},
{
title: "Fixtures", description: "Installations of sinks and faucets.", imageSrc: "http://img.b2bpic.net/free-photo/woman-with-question-gesture-plumber-looking-broken-faucet_259150-58296.jpg"},
{
title: "Safety Inspection", description: "Detailed home plumbing inspection.", imageSrc: "http://img.b2bpic.net/free-photo/male-plumber-working-fix-problems-client-s-house_23-2150990703.jpg"},
{
title: "Emergency Help", description: "Always ready for urgent repairs.", imageSrc: "http://img.b2bpic.net/free-photo/seasoned-mechanic-using-soft-dusting-brush-sweep-away-built-up-layer-dirt-debris-from-hvac-system-coil-while-adept-repairman-refills-air-conditioner-cooling-system-refrigerant-tank_482257-63969.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<ServiceAreasSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsFeatureCards
tag="Our Stats"
title="Why Choose Us"
description="Quality backed by proven experience."
metrics={[
{
value: "53+", title: "Verified Reviews", features: [
"Google rating 4.9/5", "Verified customers"],
},
{
value: "24/7", title: "Availability", features: [
"Round-the-clock service", "Fast response time"],
},
{
value: "Local", title: "Houston Service", features: [
"Local area experts", "Fully insured"],
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialMarqueeOverlayCards
tag="Customer Stories"
title="What Our Clients Say"
description="Trusted by hundreds in Houston."
testimonials={[
{
name: "Sarah J.", role: "Homeowner", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/expressive-senior-female-posing-indoor_344912-358.jpg"},
{
name: "David R.", role: "Resident", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/horizontal-portrait-cheerful-woman-with-appealing-smile-having-pinkish-hair-bun-tattoo-wearing-casual-clothes_273609-307.jpg"},
{
name: "Emily B.", role: "Property Owner", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-young-carpenter_329181-15638.jpg"},
{
name: "Marcus W.", role: "Customer", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/positive-confident-girl-choosing-you_1262-17150.jpg"},
{
name: "Jessica L.", role: "Homeowner", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-woman-looking-photographer_23-2148339179.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSplitMedia
tag="Answers"
title="Frequently Asked"
description="Quick help for your common concerns."
items={[
{
question: "Are you open on weekends?", answer: "Yes, we provide 24/7 plumbing services."},
{
question: "Where do you serve?", answer: "We serve the Houston and surrounding areas."},
{
question: "Do you offer emergency repairs?", answer: "Yes, emergency repairs are our specialty."},
]}
imageSrc="http://img.b2bpic.net/free-photo/pleased-young-male-builder-wearing-uniform-safety-helmet-showing-two-pink_141793-74761.jpg"
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="social" data-section="social">
<SectionErrorBoundary name="social">
<SocialProofMarquee
tag="Credentials"
title="Certified and Recognized"
description="Quality and safety standards in every job."
names={[
"Licensed Professional", "Bonded & Insured", "Houston Plumbing Assoc.", "24/7 Certified", "Safety Inspected", "Environmentally Safe", "Verified Expert"]}
/>
</SectionErrorBoundary>
</div>
<SocialSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Need Help?"
text="Call First Aid Plumbing Specialist INC today for fast service."
primaryButton={{
text: "Call +1 832-279-3065", href: "tel:+18322793065"}}
secondaryButton={{
text: "Get Directions", href: "https://maps.google.com"}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,22 @@
// 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 AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTestimonial
tag="About Us"
quote="First Aid Plumbing Specialist INC provides reliable, 24/7 emergency care for all your home and business plumbing needs throughout the Houston area."
author="Management"
role="Plumbing Specialists"
imageSrc="http://img.b2bpic.net/free-photo/sanitary-technician-gesturing-thumb-up_23-2147772204.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,23 @@
// 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="Need Help?"
text="Call First Aid Plumbing Specialist INC today for fast service."
primaryButton={{
text: "Call +1 832-279-3065", href: "tel:+18322793065"}}
secondaryButton={{
text: "Get Directions", href: "https://maps.google.com"}}
/>
</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 "faq" section.
import React from 'react';
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSplitMedia
tag="Answers"
title="Frequently Asked"
description="Quick help for your common concerns."
items={[
{
question: "Are you open on weekends?", answer: "Yes, we provide 24/7 plumbing services."},
{
question: "Where do you serve?", answer: "We serve the Houston and surrounding areas."},
{
question: "Do you offer emergency repairs?", answer: "Yes, emergency repairs are our specialty."},
]}
imageSrc="http://img.b2bpic.net/free-photo/pleased-young-male-builder-wearing-uniform-safety-helmet-showing-two-pink_141793-74761.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

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 "hero" section.
import React from 'react';
import HeroBillboardTiltedCarousel from '@/components/sections/hero/HeroBillboardTiltedCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardTiltedCarousel
tag="Available 24/7"
title="Your Trusted First Aid for Plumbing Emergencies"
description="Professional plumbing services in Houston, TX. Quality repair, installation, and maintenance with a focus on fast results."
primaryButton={{
text: "Call Now", href: "tel:+18322793065"}}
secondaryButton={{
text: "Get Directions", href: "https://maps.google.com"}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/man-engaged-household-task_23-2151741241.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/person-white-bathrobe-filling-bath-with-water_259150-59743.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-as-plumber_23-2150746311.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/pleased-young-male-builder-wearing-uniform-safety-helmet-holding-out-wrench-camera-white_141793-74993.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/profile-man-touching-socket-wall-with-screwdriver_259150-58245.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/dinosaurs-inside-panel-ai-generated_268835-18600.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,34 @@
// 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 MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsFeatureCards
tag="Our Stats"
title="Why Choose Us"
description="Quality backed by proven experience."
metrics={[
{
value: "53+", title: "Verified Reviews", features: [
"Google rating 4.9/5", "Verified customers"],
},
{
value: "24/7", title: "Availability", features: [
"Round-the-clock service", "Fast response time"],
},
{
value: "Local", title: "Houston Service", features: [
"Local area experts", "Fully insured"],
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,75 @@
import { MapPin } from "lucide-react"
import Tag from "@/components/ui/Tag"
import TextAnimation from "@/components/ui/TextAnimation"
import ScrollReveal from "@/components/ui/ScrollReveal"
export default function ServiceAreas() {
const areas = [
{
title: "Downtown Houston",
description: "Fast and reliable commercial and residential plumbing for the heart of the city.",
},
{
title: "The Heights",
description: "Expert plumbing repairs and installations for historic and modern homes.",
},
{
title: "Katy",
description: "Comprehensive plumbing solutions for families and businesses in Katy.",
},
{
title: "Sugar Land",
description: "Trusted local plumbers serving the Sugar Land community 24/7.",
},
{
title: "Pearland",
description: "Emergency plumbing and routine maintenance for Pearland residents.",
},
{
title: "Cypress",
description: "Professional water heater repair, drain cleaning, and more in Cypress.",
},
{
title: "Spring",
description: "Dedicated plumbing specialists keeping Spring homes running smoothly.",
},
{
title: "The Woodlands",
description: "Premium plumbing services for properties throughout The Woodlands.",
}
];
return (
<section data-webild-section="service-areas" id="service-areas" className="py-24 bg-background">
<div className="w-content-width mx-auto">
<div className="text-center max-w-3xl mx-auto mb-16">
<Tag text="Service Areas" className="mb-4" />
<TextAnimation
text="Neighborhoods & Suburbs We Serve"
variant="fade-blur"
tag="h2"
gradientText={false}
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
/>
<p className="text-lg text-muted-foreground">
First Aid Plumbing Specialist INC proudly provides top-rated plumbing services across the Greater Houston area. If you don't see your neighborhood listed, give us a call!
</p>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
{areas.map((area, index) => (
<ScrollReveal variant="fade" key={index} delay={index * 0.1}>
<div className="card p-6 h-full flex flex-col items-start">
<div className="w-12 h-12 rounded-full bg-primary-cta/10 flex items-center justify-center mb-4 text-primary-cta">
<MapPin className="w-6 h-6" />
</div>
<h3 className="text-xl font-semibold text-foreground mb-2">{area.title}</h3>
<p className="text-muted-foreground">{area.description}</p>
</div>
</ScrollReveal>
))}
</div>
</div>
</section>
);
}

View File

@@ -0,0 +1,36 @@
// 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 FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ServicesSection(): React.JSX.Element {
return (
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesImageBento
tag="Our Services"
title="Complete Plumbing Solutions"
description="Covering all essential residential and commercial plumbing needs with precision."
items={[
{
title: "Leak Detection", description: "Quick identification of pipe leaks.", imageSrc: "http://img.b2bpic.net/free-photo/plumber-repair-experienced-attentive-middleaged-man-examining-bottom-kitchen-sink_259150-58266.jpg"},
{
title: "Toilet Repair", description: "Complete service for all toilet issues.", imageSrc: "http://img.b2bpic.net/free-photo/male-plumber-working-fix-problems-client-s-house_23-2150990706.jpg"},
{
title: "Water Heaters", description: "Repair and installation for heaters.", imageSrc: "http://img.b2bpic.net/free-photo/worker-repairing-water-heater_23-2149334232.jpg"},
{
title: "Drain Cleaning", description: "High-pressure drain clearance.", imageSrc: "http://img.b2bpic.net/free-photo/woman-pouring-water-barbershop_23-2147737008.jpg"},
{
title: "Fixtures", description: "Installations of sinks and faucets.", imageSrc: "http://img.b2bpic.net/free-photo/woman-with-question-gesture-plumber-looking-broken-faucet_259150-58296.jpg"},
{
title: "Safety Inspection", description: "Detailed home plumbing inspection.", imageSrc: "http://img.b2bpic.net/free-photo/male-plumber-working-fix-problems-client-s-house_23-2150990703.jpg"},
{
title: "Emergency Help", description: "Always ready for urgent repairs.", imageSrc: "http://img.b2bpic.net/free-photo/seasoned-mechanic-using-soft-dusting-brush-sweep-away-built-up-layer-dirt-debris-from-hvac-system-coil-while-adept-repairman-refills-air-conditioner-cooling-system-refrigerant-tank_482257-63969.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,22 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "social" section.
import React from 'react';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function SocialSection(): React.JSX.Element {
return (
<div id="social" data-section="social">
<SectionErrorBoundary name="social">
<SocialProofMarquee
tag="Credentials"
title="Certified and Recognized"
description="Quality and safety standards in every job."
names={[
"Licensed Professional", "Bonded & Insured", "Houston Plumbing Assoc.", "24/7 Certified", "Safety Inspected", "Environmentally Safe", "Verified Expert"]}
/>
</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 "testimonials" section.
import React from 'react';
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialMarqueeOverlayCards
tag="Customer Stories"
title="What Our Clients Say"
description="Trusted by hundreds in Houston."
testimonials={[
{
name: "Sarah J.", role: "Homeowner", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/expressive-senior-female-posing-indoor_344912-358.jpg"},
{
name: "David R.", role: "Resident", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/horizontal-portrait-cheerful-woman-with-appealing-smile-having-pinkish-hair-bun-tattoo-wearing-casual-clothes_273609-307.jpg"},
{
name: "Emily B.", role: "Property Owner", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-young-carpenter_329181-15638.jpg"},
{
name: "Marcus W.", role: "Customer", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/positive-confident-girl-choosing-you_1262-17150.jpg"},
{
name: "Jessica L.", role: "Homeowner", company: "Houston", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-woman-looking-photographer_23-2148339179.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
);
}