Merge version_2_1781382460459 into main #1

Merged
bender merged 1 commits from version_2_1781382460459 into main 2026-06-13 20:29:28 +00:00
8 changed files with 396 additions and 221 deletions

View File

@@ -1,232 +1,33 @@
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import HeroTiltedCards from '@/components/sections/hero/HeroTiltedCards';
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 FeaturesStepsSection from './HomePage/sections/FeaturesSteps';
import ServicesSection from './HomePage/sections/Services';
import AboutSection from './HomePage/sections/About';
import TestimonialsSection from './HomePage/sections/Testimonials';
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">
<HeroTiltedCards
tag="Trusted Cleaning Experts"
title="Professional Deep Cleaning You Can Trust"
description="Flores Deep Cleaning delivers reliable residential and commercial cleaning services with exceptional attention to detail."
primaryButton={{
text: "Get a Free Quote",
href: "#contact",
}}
secondaryButton={{
text: "Book a Cleaning",
href: "#contact",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/side-view-female-janitor_23-2148453430.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/big-purple-eggplant-vegetable-wooden-board-high-quality-photo_114579-78499.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/person-taking-care-office-cleaning_23-2149374434.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/decoration-livingroom-interior_74190-5760.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/boxes-flowerpot-new-apartment_1098-21590.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="features-steps" data-section="features-steps">
<SectionErrorBoundary name="features-steps">
<FeaturesDetailedSteps
tag="Why Choose Us"
title="A Standard of Excellence"
description="We go beyond the surface to ensure your space is truly clean and healthy."
steps={[
{
tag: "01",
title: "Expert Team",
subtitle: "Trained Professionals",
description: "Our cleaners are experienced, vetted, and dedicated to delivering impeccable results.",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-adult-male-getting-ready-clean_23-2148563557.jpg",
},
{
tag: "02",
title: "Deep Clean",
subtitle: "Attention to Detail",
description: "We clean overlooked areas like baseboards, light switches, and inside appliances.",
imageSrc: "http://img.b2bpic.net/free-photo/cleaning-objects-flat-lay_23-2148118447.jpg",
},
{
tag: "03",
title: "Flexible",
subtitle: "Designed for You",
description: "We offer scheduling that fits your busy life, ensuring a clean home on your terms.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-talking-phone_23-2148883487.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<FeaturesStepsSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesImageBento
tag="Our Services"
title="Comprehensive Cleaning Solutions"
description="From daily upkeep to post-construction cleanup, we have the expertise you need."
items={[
{
title: "Deep Cleaning",
description: "A thorough sanitization of your home.",
imageSrc: "http://img.b2bpic.net/free-photo/close-upon-robot-vacuum-cleaner-indoors_23-2150829986.jpg",
},
{
title: "Recurring Cleaning",
description: "Consistent upkeep for your lifestyle.",
imageSrc: "http://img.b2bpic.net/free-photo/soft-pastel-hues-room-kids_23-2151690321.jpg",
},
{
title: "Move-In/Out",
description: "Perfect for real estate transitions.",
imageSrc: "http://img.b2bpic.net/free-photo/modern-kitchen-island-with-fluted-glass-cabinets-stylish-interior-with-builtin-appliances_169016-72717.jpg",
},
{
title: "Apartment Clean",
description: "Optimized for smaller living spaces.",
imageSrc: "http://img.b2bpic.net/free-photo/seamless-blue-glass-tiles-texture-background-window-kitchen-bathroom-concept_1339-666.jpg",
},
{
title: "Office & Commercial",
description: "Professional environment sanitization.",
imageSrc: "http://img.b2bpic.net/free-photo/empty-hairdresser-shop-with-chairs_23-2149220584.jpg",
},
{
title: "Kitchen Detail",
description: "Spotless hygiene for culinary spaces.",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-cleaning-tools_23-2150552216.jpg",
},
{
title: "Bathroom Sanitization",
description: "Deep cleaning for high-traffic zones.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-eco-cleaning-products-with-lemon-baking-soda_23-2148818423.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="About Flores Deep Cleaning"
title="Creating Healthier Spaces"
description="At Flores Deep Cleaning, we take pride in creating cleaner, healthier spaces for our clients. Our team is dedicated to delivering outstanding results and exceptional customer service on every visit."
imageSrc="http://img.b2bpic.net/free-photo/smiling-portrait-young-maid-holding-stack-towels-hotel-room_23-2148033256.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialMarqueeOverlayCards
tag="Customer Reviews"
title="What Our Clients Say"
description="Don't just take our word for it—read what our satisfied clients have to say."
testimonials={[
{
name: "Wael Ahmad",
role: "Local Guide",
company: "Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-housewife-with-dirty-clothes-face-holding-mop-washing-spray-holding-hand-head-looking-tired-happy-finish-work-tired-cute-woman-doing-house-cleaning_273609-7852.jpg",
},
{
name: "Julie",
role: "Homeowner",
company: "Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-handsome-man_23-2148238926.jpg",
},
{
name: "Fielden Swimm",
role: "Homeowner",
company: "Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/smiley-woman-kitchen-holding-ablution-cloth_23-2148587316.jpg",
},
{
name: "Sarah Miller",
role: "Business Owner",
company: "Office Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/fashionable-hipster-guy-dressed-stylish-black-hat-denim-shirt_273609-6809.jpg",
},
{
name: "Michael Reed",
role: "Resident",
company: "Apartment Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-business-woman-working_23-2150384845.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTwoColumn
tag="Common Questions"
title="Frequently Asked Questions"
description="Answers to the most common questions about our services."
items={[
{
question: "What areas do you serve?",
answer: "We serve Lexington, KY and surrounding neighborhoods.",
},
{
question: "Are you insured?",
answer: "Yes, we are fully licensed and insured for your peace of mind.",
},
{
question: "Do you provide supplies?",
answer: "Yes, our team brings all professional-grade cleaning supplies and equipment.",
},
{
question: "Can I request specific tasks?",
answer: "Absolutely! We customize every cleaning to meet your specific needs.",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Get Started"
text="Ready for a spotless space? Get a free quote today."
primaryButton={{
text: "Call (859) 684-2847",
href: "tel:8596842847",
}}
secondaryButton={{
text: "Book a Cleaning",
href: "#contact",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,21 @@
// 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 AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="About Flores Deep Cleaning"
title="Creating Healthier Spaces"
description="At Flores Deep Cleaning, we take pride in creating cleaner, healthier spaces for our clients. Our team is dedicated to delivering outstanding results and exceptional customer service on every visit."
imageSrc="http://img.b2bpic.net/free-photo/smiling-portrait-young-maid-holding-stack-towels-hotel-room_23-2148033256.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

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="Ready for a spotless space? Get a free quote today."
primaryButton={{
text: "Call (859) 684-2847",
href: "tel:8596842847",
}}
secondaryButton={{
text: "Book a Cleaning",
href: "#contact",
}}
/>
</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 "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="Common Questions"
title="Frequently Asked Questions"
description="Answers to the most common questions about our services."
items={[
{
question: "What areas do you serve?",
answer: "We serve Lexington, KY and surrounding neighborhoods.",
},
{
question: "Are you insured?",
answer: "Yes, we are fully licensed and insured for your peace of mind.",
},
{
question: "Do you provide supplies?",
answer: "Yes, our team brings all professional-grade cleaning supplies and equipment.",
},
{
question: "Can I request specific tasks?",
answer: "Absolutely! We customize every cleaning to meet your specific needs.",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,43 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "features-steps" section.
import React from 'react';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FeaturesStepsSection(): React.JSX.Element {
return (
<div id="features-steps" data-section="features-steps">
<SectionErrorBoundary name="features-steps">
<FeaturesDetailedSteps
tag="Why Choose Us"
title="A Standard of Excellence"
description="We go beyond the surface to ensure your space is truly clean and healthy."
steps={[
{
tag: "01",
title: "Expert Team",
subtitle: "Trained Professionals",
description: "Our cleaners are experienced, vetted, and dedicated to delivering impeccable results.",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-adult-male-getting-ready-clean_23-2148563557.jpg",
},
{
tag: "02",
title: "Deep Clean",
subtitle: "Attention to Detail",
description: "We clean overlooked areas like baseboards, light switches, and inside appliances.",
imageSrc: "http://img.b2bpic.net/free-photo/cleaning-objects-flat-lay_23-2148118447.jpg",
},
{
tag: "03",
title: "Flexible",
subtitle: "Designed for You",
description: "We offer scheduling that fits your busy life, ensuring a clean home on your terms.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-talking-phone_23-2148883487.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,131 @@
/* eslint-disable */
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
import Button from "@/components/ui/Button";
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
import { cls } from "@/lib/utils";
const primaryButton = {
text: "Get a Free Quote",
href: "#contact"
};
const secondaryButton = {
text: "Book a Cleaning",
href: "#contact"
};
const items = [
{
imageSrc: "http://img.b2bpic.net/free-photo/side-view-female-janitor_23-2148453430.jpg"
},
{
imageSrc: "http://img.b2bpic.net/free-photo/big-purple-eggplant-vegetable-wooden-board-high-quality-photo_114579-78499.jpg"
},
{
imageSrc: "http://img.b2bpic.net/free-photo/person-taking-care-office-cleaning_23-2149374434.jpg"
},
{
imageSrc: "http://img.b2bpic.net/free-photo/decoration-livingroom-interior_74190-5760.jpg"
},
{
imageSrc: "http://img.b2bpic.net/free-photo/boxes-flowerpot-new-apartment_1098-21590.jpg"
}
];
type MediaItem = { imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never };
interface HeroTiltedCardsProps {
tag: string;
title: string;
description: string;
primaryButton: { text: string; href: string };
secondaryButton: { text: string; href: string };
items: [MediaItem, MediaItem, MediaItem, MediaItem, MediaItem];
}
const HeroInline = () => {
const marqueeItems = [...items, ...items];
const galleryStyles = [
"-rotate-6 z-10 -translate-y-5",
"rotate-6 z-20 translate-y-5 -ml-15",
"-rotate-6 z-30 -translate-y-5 -ml-15",
"rotate-6 z-40 translate-y-5 -ml-15",
"-rotate-6 z-50 -translate-y-5 -ml-15",
];
return (
<section aria-label="Hero section" className="relative h-svh md:h-auto pt-25 pb-20 md:pt-30">
<HeroBackgroundSlot />
<div className="flex flex-col items-center gap-12 md:gap-15 w-full md:w-content-width mx-auto">
<div className="flex flex-col items-center gap-3 w-content-width mx-auto text-center">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>{"Trusted Cleaning Experts"}</p>
</div>
<TextAnimation
text={"Professional Deep Cleaning You Can Trust"}
variant="slide-up"
gradientText={true}
tag="h1"
className="md:max-w-8/10 text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center text-balance"
/>
<TextAnimation
text={"Flores Deep Cleaning delivers reliable residential and commercial cleaning services with exceptional attention to detail."}
variant="slide-up"
gradientText={false}
tag="p"
className="md:max-w-7/10 text-lg md:text-xl leading-snug text-balance"
/>
<div className="flex flex-wrap justify-center gap-4 mt-4 md:mt-6">
<a href={primaryButton.href} target="_blank" rel="noopener noreferrer" aria-label="Facebook" className="flex items-center justify-center w-14 h-14 rounded-full bg-primary-cta text-primary-cta-text hover:opacity-80 transition-opacity shadow-lg">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"/></svg>
</a>
<a href={secondaryButton.href} target="_blank" rel="noopener noreferrer" aria-label="Instagram" className="flex items-center justify-center w-14 h-14 rounded-full bg-primary-cta text-primary-cta-text hover:opacity-80 transition-opacity shadow-lg">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><rect width="20" height="20" x="2" y="2" rx="5" ry="5"/><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"/><line x1="17.5" x2="17.51" y1="6.5" y2="6.5"/></svg>
</a>
<a href="#" target="_blank" rel="noopener noreferrer" aria-label="TikTok" className="flex items-center justify-center w-14 h-14 rounded-full bg-primary-cta text-primary-cta-text hover:opacity-80 transition-opacity shadow-lg">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M9 12a4 4 0 1 0 4 4V4a5 5 0 0 0 5 5"/></svg>
</a>
</div>
</div>
<ScrollReveal variant="slide-up" delay={0.2} className="block md:hidden w-full overflow-hidden mask-padding-x">
<div className="flex w-max animate-marquee-horizontal">
{marqueeItems.map((item, index) => (
<div key={index} className="shrink-0 w-[50vw] mr-5 aspect-4/5 p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden">
<ImageOrVideo imageSrc={item.imageSrc} videoSrc={item.videoSrc} />
</div>
))}
</div>
</ScrollReveal>
<ScrollReveal variant="slide-up" delay={0.2} className="hidden md:flex justify-center items-center w-full">
<div className="flex items-center justify-center">
{items.map((item, index) => (
<div
key={index}
className={cls(
"relative w-[23%] aspect-4/5 p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden shadow-lg transition-transform duration-500 ease-out hover:scale-110",
galleryStyles[index]
)}
>
<ImageOrVideo imageSrc={item.imageSrc} videoSrc={item.videoSrc} />
</div>
))}
</div>
</ScrollReveal>
</div>
</section>
);
};
export default function HeroSection() {
return (
<div data-webild-section="hero" id="hero">
<HeroInline />
</div>
);
}

View File

@@ -0,0 +1,57 @@
// 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="Comprehensive Cleaning Solutions"
description="From daily upkeep to post-construction cleanup, we have the expertise you need."
items={[
{
title: "Deep Cleaning",
description: "A thorough sanitization of your home.",
imageSrc: "http://img.b2bpic.net/free-photo/close-upon-robot-vacuum-cleaner-indoors_23-2150829986.jpg",
},
{
title: "Recurring Cleaning",
description: "Consistent upkeep for your lifestyle.",
imageSrc: "http://img.b2bpic.net/free-photo/soft-pastel-hues-room-kids_23-2151690321.jpg",
},
{
title: "Move-In/Out",
description: "Perfect for real estate transitions.",
imageSrc: "http://img.b2bpic.net/free-photo/modern-kitchen-island-with-fluted-glass-cabinets-stylish-interior-with-builtin-appliances_169016-72717.jpg",
},
{
title: "Apartment Clean",
description: "Optimized for smaller living spaces.",
imageSrc: "http://img.b2bpic.net/free-photo/seamless-blue-glass-tiles-texture-background-window-kitchen-bathroom-concept_1339-666.jpg",
},
{
title: "Office & Commercial",
description: "Professional environment sanitization.",
imageSrc: "http://img.b2bpic.net/free-photo/empty-hairdresser-shop-with-chairs_23-2149220584.jpg",
},
{
title: "Kitchen Detail",
description: "Spotless hygiene for culinary spaces.",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-cleaning-tools_23-2150552216.jpg",
},
{
title: "Bathroom Sanitization",
description: "Deep cleaning for high-traffic zones.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-eco-cleaning-products-with-lemon-baking-soda_23-2148818423.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,57 @@
// 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 Reviews"
title="What Our Clients Say"
description="Don't just take our word for it—read what our satisfied clients have to say."
testimonials={[
{
name: "Wael Ahmad",
role: "Local Guide",
company: "Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-housewife-with-dirty-clothes-face-holding-mop-washing-spray-holding-hand-head-looking-tired-happy-finish-work-tired-cute-woman-doing-house-cleaning_273609-7852.jpg",
},
{
name: "Julie",
role: "Homeowner",
company: "Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-handsome-man_23-2148238926.jpg",
},
{
name: "Fielden Swimm",
role: "Homeowner",
company: "Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/smiley-woman-kitchen-holding-ablution-cloth_23-2148587316.jpg",
},
{
name: "Sarah Miller",
role: "Business Owner",
company: "Office Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/fashionable-hipster-guy-dressed-stylish-black-hat-denim-shirt_273609-6809.jpg",
},
{
name: "Michael Reed",
role: "Resident",
company: "Apartment Client",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-business-woman-working_23-2150384845.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}