Merge version_2_1782173917549 into main #1
@@ -8,12 +8,12 @@
|
||||
--background: #f5faff;
|
||||
--card: #ffffff;
|
||||
--foreground: #001122;
|
||||
--primary-cta: #15479c;
|
||||
--primary-cta: #ea580c;
|
||||
--primary-cta-text: #f5faff;
|
||||
--secondary-cta: #ffffff;
|
||||
--secondary-cta-text: #001122;
|
||||
--accent: #a8cce8;
|
||||
--background-accent: #7ba3cf;
|
||||
--accent: #fdba74;
|
||||
--background-accent: #f97316;
|
||||
|
||||
/* @layout/border-radius/rounded */
|
||||
--radius: 0.5rem;
|
||||
|
||||
@@ -1,310 +1,38 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import HeroSplitVerticalMarquee from '@/components/sections/hero/HeroSplitVerticalMarquee';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
|
||||
import { Award, Building2, CheckCircle, Layers, Paintbrush, Zap } 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 GallerySection from './HomePage/sections/Gallery';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import LocationSection from './HomePage/sections/Location';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplitVerticalMarquee
|
||||
tag="Transforming Spaces, Elevating Lives"
|
||||
title="Professional General Contracting in Florida"
|
||||
description="OA General Contracting specializes in high-quality remodeling, painting, flooring, and home improvements. We bring craftsmanship to every detail."
|
||||
primaryButton={{
|
||||
text: "Free Estimate",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Services",
|
||||
href: "#services",
|
||||
}}
|
||||
leftItems={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/elegant-matte-black-faucet-dark-kitchen-premium-interior-design-with-minimalist-furniture_169016-72709.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-kitchen-interior-design_23-2150976527.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/contemporary-kitchen_1048-11323.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-family-painting-apartment-wall-while-redecorating-with-roller-brush-apartment-redecoration-home-construction-while-renovating-improving-repair-decorating_482257-14144.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/low-angle-man-tiling-floor_23-2149344004.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-street-wear-going-down-steps_23-2147910872.jpg",
|
||||
},
|
||||
]}
|
||||
rightItems={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721539.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/japanese-house-entrance_23-2149445336.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-person-working-construction-field_23-2151349737.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-renovating-house-concept_53876-20670.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/modern-kitchen-island-with-fluted-glass-cabinets-stylish-interior-with-builtin-appliances_169016-72717.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tanner-with-gadget_1098-12745.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="About Us"
|
||||
title="Commitment to Quality Craftsmanship"
|
||||
description="With years of experience, OA General Contracting LLC is dedicated to enhancing the beauty and functionality of your home. We focus on cost-effective alternatives and precision workmanship to turn your vision into reality."
|
||||
items={[
|
||||
{
|
||||
icon: Building2,
|
||||
title: "Home Remodeling",
|
||||
description: "Kitchen and bathroom expert renovations.",
|
||||
},
|
||||
{
|
||||
icon: Paintbrush,
|
||||
title: "Expert Painting",
|
||||
description: "Flawless finishes for interior and exterior.",
|
||||
},
|
||||
{
|
||||
icon: Layers,
|
||||
title: "Flooring Solutions",
|
||||
description: "Professional flooring installations.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/top-view-steel-hammer-with-other-construction-elements-tools_23-2150576405.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesDetailedSteps
|
||||
tag="Our Expertise"
|
||||
title="Comprehensive Contracting Services"
|
||||
description="From small fixes to major transformations, our team provides reliable, top-tier services."
|
||||
steps={[
|
||||
{
|
||||
tag: "01",
|
||||
title: "Plumbing",
|
||||
subtitle: "Reliable Systems",
|
||||
description: "Expert installations, upgrades, and sink piping repairs.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-with-coffee-seaking-phone_23-2147769508.jpg",
|
||||
},
|
||||
{
|
||||
tag: "02",
|
||||
title: "Fencing",
|
||||
subtitle: "Secure & Stylish",
|
||||
description: "Quality fence installations that elevate your property.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-man-factory-worker-standing-industrial-production-hall_342744-87.jpg",
|
||||
},
|
||||
{
|
||||
tag: "03",
|
||||
title: "Pressure Washing",
|
||||
subtitle: "Surface Care",
|
||||
description: "Restoring the longevity of your exterior surfaces.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/builder-with-construction-tools-construction-site-looking-blueprint_169016-5269.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ServicesSection />
|
||||
|
||||
<div id="gallery" data-section="gallery">
|
||||
<SectionErrorBoundary name="gallery">
|
||||
<FeaturesImageBento
|
||||
tag="Our Work"
|
||||
title="Showcase of Craftsmanship"
|
||||
description="Browse our latest projects transforming spaces across Florida."
|
||||
items={[
|
||||
{
|
||||
title: "Kitchen Remodel",
|
||||
description: "Full kitchen renovation in Weston.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-sitting-front-dinning-table-having-juice-using-mobile-phone_23-2148195253.jpg",
|
||||
},
|
||||
{
|
||||
title: "Exterior Painting",
|
||||
description: "Premium exterior paint finish.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-painting-wall-home_23-2149098981.jpg",
|
||||
},
|
||||
{
|
||||
title: "Luxury Flooring",
|
||||
description: "Seamless tile flooring installation.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/wood-warm-texture-empty-background_1194-287534.jpg",
|
||||
},
|
||||
{
|
||||
title: "Pressure Washing",
|
||||
description: "Cleaning driveways and stairs.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-man-working-with-helmet_23-2149343698.jpg",
|
||||
},
|
||||
{
|
||||
title: "Plumbing Repair",
|
||||
description: "Precision sink and pipe installation.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/male-plumber-working-with-client-fix-kitchen-problems_23-2150990686.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fence Installation",
|
||||
description: "Beautiful garden white fencing.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/fashion-bearded-hipster-posing-fence-style-diversity_482257-36988.jpg",
|
||||
},
|
||||
{
|
||||
title: "Home Renovation",
|
||||
description: "General remodeling service project.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smart-attractive-handy-glasses-asian-male-craftman-interior-designer-focus-wood-working-site-constrution-home-interior-design-house-renovation-improvement-concept_609648-1009.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<GallerySection />
|
||||
<LocationSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="Our Impact"
|
||||
title="Quality by the Numbers"
|
||||
description="We pride ourselves on efficiency and customer-first results."
|
||||
metrics={[
|
||||
{
|
||||
icon: Award,
|
||||
title: "Professional Experience",
|
||||
value: "10+ Years",
|
||||
},
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "Satisfied Clients",
|
||||
value: "500+",
|
||||
},
|
||||
{
|
||||
icon: Zap,
|
||||
title: "Average Response Time",
|
||||
value: "<24h",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialQuoteCards
|
||||
tag="Testimonials"
|
||||
title="What Clients Say"
|
||||
description="Building trust through excellence in every remodel."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Oswaldo Ramos Arantes Neto",
|
||||
role: "Client",
|
||||
quote: "They did an excellent job on my kitchen in Weston and I recommend them 100%!",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/two-successful-male-architect-have-conversation-office_23-2147843005.jpg",
|
||||
},
|
||||
{
|
||||
name: "Maria Garcia",
|
||||
role: "Homeowner",
|
||||
quote: "Professional, quick, and the quality is unmatched. Very happy.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-smiling-couple-renovating-remodeling-their-new-apartment-man-is-painting-walls-with-roller-woman-is-connecting-with-laptop_496169-761.jpg",
|
||||
},
|
||||
{
|
||||
name: "John Smith",
|
||||
role: "Client",
|
||||
quote: "Transformed our home completely. Highly recommended contractor.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/scenery-designers-work_23-2149741777.jpg",
|
||||
},
|
||||
{
|
||||
name: "Alice Brown",
|
||||
role: "Homeowner",
|
||||
quote: "Great communication and fair pricing for our renovations.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-female-dentist-dentistry-concept-dental-treatment_169016-66975.jpg",
|
||||
},
|
||||
{
|
||||
name: "David Miller",
|
||||
role: "Client",
|
||||
quote: "Amazing attention to detail. Will work with them again.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-man-showing-female-colleague-tablet-screen-stairs_1262-20432.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Support"
|
||||
title="Common Questions"
|
||||
description="Everything you need to know about our contracting process."
|
||||
categories={[
|
||||
{
|
||||
name: "General",
|
||||
items: [
|
||||
{
|
||||
question: "What areas do you serve?",
|
||||
answer: "We serve a 60-mile radius around Summerville, SC, and also Weston, FL areas.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer free estimates?",
|
||||
answer: "Yes, we provide free, no-obligation estimates for all home improvement projects.",
|
||||
},
|
||||
{
|
||||
question: "What types of remodeling do you handle?",
|
||||
answer: "We specialize in kitchen, bathroom, and complete home makeovers.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Services",
|
||||
items: [
|
||||
{
|
||||
question: "Do you do plumbing?",
|
||||
answer: "Yes, we offer expert plumbing installations, repairs, and upgrades.",
|
||||
},
|
||||
{
|
||||
question: "Can you pressure wash driveways?",
|
||||
answer: "Absolutely, our pressure washing services restore exterior surfaces effectively.",
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Contact Us"
|
||||
text="Ready to transform your home? Reach out to OA General Contracting today for a free, no-obligation estimate."
|
||||
primaryButton={{
|
||||
text: "Call (754) 715-6001",
|
||||
href: "tel:7547156001",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Email Us",
|
||||
href: "mailto:oa@oageneralcontracting.com",
|
||||
}}
|
||||
/>
|
||||
</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, Building2, CheckCircle, Layers, Paintbrush, Zap } 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="About Us"
|
||||
title="Commitment to Quality Craftsmanship"
|
||||
description="With years of experience, OA General Contracting LLC is dedicated to enhancing the beauty and functionality of your home. We focus on cost-effective alternatives and precision workmanship to turn your vision into reality."
|
||||
items={[
|
||||
{
|
||||
icon: Building2,
|
||||
title: "Home Remodeling",
|
||||
description: "Kitchen and bathroom expert renovations.",
|
||||
},
|
||||
{
|
||||
icon: Paintbrush,
|
||||
title: "Expert Painting",
|
||||
description: "Flawless finishes for interior and exterior.",
|
||||
},
|
||||
{
|
||||
icon: Layers,
|
||||
title: "Flooring Solutions",
|
||||
description: "Professional flooring installations.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/top-view-steel-hammer-with-other-construction-elements-tools_23-2150576405.jpg"
|
||||
/>
|
||||
</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="Contact Us"
|
||||
text="Ready to transform your home? Reach out to OA General Contracting today for a free, no-obligation estimate."
|
||||
primaryButton={{
|
||||
text: "Call (754) 715-6001",
|
||||
href: "tel:7547156001",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Email Us",
|
||||
href: "mailto:oa@oageneralcontracting.com",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Faq.tsx
Normal file
52
src/pages/HomePage/sections/Faq.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 "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Support"
|
||||
title="Common Questions"
|
||||
description="Everything you need to know about our contracting process."
|
||||
categories={[
|
||||
{
|
||||
name: "General",
|
||||
items: [
|
||||
{
|
||||
question: "What areas do you serve?",
|
||||
answer: "We serve a 60-mile radius around Summerville, SC, and also Weston, FL areas.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer free estimates?",
|
||||
answer: "Yes, we provide free, no-obligation estimates for all home improvement projects.",
|
||||
},
|
||||
{
|
||||
question: "What types of remodeling do you handle?",
|
||||
answer: "We specialize in kitchen, bathroom, and complete home makeovers.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Services",
|
||||
items: [
|
||||
{
|
||||
question: "Do you do plumbing?",
|
||||
answer: "Yes, we offer expert plumbing installations, repairs, and upgrades.",
|
||||
},
|
||||
{
|
||||
question: "Can you pressure wash driveways?",
|
||||
answer: "Absolutely, our pressure washing services restore exterior surfaces effectively.",
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Gallery.tsx
Normal file
57
src/pages/HomePage/sections/Gallery.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 "gallery" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function GallerySection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="gallery" data-section="gallery">
|
||||
<SectionErrorBoundary name="gallery">
|
||||
<FeaturesImageBento
|
||||
tag="Our Work"
|
||||
title="Showcase of Craftsmanship"
|
||||
description="Browse our latest projects transforming spaces across Florida."
|
||||
items={[
|
||||
{
|
||||
title: "Kitchen Remodel",
|
||||
description: "Full kitchen renovation in Weston.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-sitting-front-dinning-table-having-juice-using-mobile-phone_23-2148195253.jpg",
|
||||
},
|
||||
{
|
||||
title: "Exterior Painting",
|
||||
description: "Premium exterior paint finish.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-painting-wall-home_23-2149098981.jpg",
|
||||
},
|
||||
{
|
||||
title: "Luxury Flooring",
|
||||
description: "Seamless tile flooring installation.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/wood-warm-texture-empty-background_1194-287534.jpg",
|
||||
},
|
||||
{
|
||||
title: "Pressure Washing",
|
||||
description: "Cleaning driveways and stairs.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-man-working-with-helmet_23-2149343698.jpg",
|
||||
},
|
||||
{
|
||||
title: "Plumbing Repair",
|
||||
description: "Precision sink and pipe installation.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/male-plumber-working-with-client-fix-kitchen-problems_23-2150990686.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fence Installation",
|
||||
description: "Beautiful garden white fencing.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/fashion-bearded-hipster-posing-fence-style-diversity_482257-36988.jpg",
|
||||
},
|
||||
{
|
||||
title: "Home Renovation",
|
||||
description: "General remodeling service project.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smart-attractive-handy-glasses-asian-male-craftman-interior-designer-focus-wood-working-site-constrution-home-interior-design-house-renovation-improvement-concept_609648-1009.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
136
src/pages/HomePage/sections/Hero.tsx
Normal file
136
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,136 @@
|
||||
/* 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";
|
||||
|
||||
const primaryButton = {
|
||||
text: "Free Estimate",
|
||||
href: "#contact"
|
||||
};
|
||||
const secondaryButton = {
|
||||
text: "Our Services",
|
||||
href: "#services"
|
||||
};
|
||||
const leftItems = [
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916306-ot0xaffo.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916308-6uc1r648.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916311-e0vskvd2.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916313-7eb8k1s3.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916314-7gr8bq0c.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916306-ot0xaffo.png"
|
||||
}
|
||||
];
|
||||
const rightItems = [
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916314-7gr8bq0c.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916313-7eb8k1s3.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916311-e0vskvd2.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916308-6uc1r648.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916306-ot0xaffo.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FVvm8wEysRPV9bC25IuulDoP5E/uploaded-1782173916314-7gr8bq0c.png"
|
||||
}
|
||||
];
|
||||
|
||||
type HeroSplitVerticalMarqueeProps = {
|
||||
tag: string;
|
||||
title: string;
|
||||
description: string;
|
||||
primaryButton: { text: string; href: string };
|
||||
secondaryButton: { text: string; href: string };
|
||||
leftItems: ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never })[];
|
||||
rightItems: ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never })[];
|
||||
};
|
||||
|
||||
const HeroInline = () => {
|
||||
const duplicatedLeft = [...leftItems, ...leftItems, ...leftItems, ...leftItems];
|
||||
const duplicatedRight = [...rightItems, ...rightItems, ...rightItems, ...rightItems];
|
||||
|
||||
return (
|
||||
<section aria-label="Hero section" className="relative flex items-center h-fit md:h-svh pt-25 pb-20 md:py-0">
|
||||
<HeroBackgroundSlot />
|
||||
<div className="flex flex-col md:flex-row items-center gap-12 md:gap-20 w-content-width mx-auto">
|
||||
<div className="w-full md:w-1/2">
|
||||
<div className="flex flex-col items-center md:items-start gap-3">
|
||||
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
|
||||
<p>{"Transforming Spaces, Elevating Lives"}</p>
|
||||
</div>
|
||||
|
||||
<TextAnimation
|
||||
text={"Professional General Contracting in Florida"}
|
||||
variant="fade"
|
||||
gradientText={true}
|
||||
tag="h1"
|
||||
className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center md:text-left text-balance"
|
||||
/>
|
||||
|
||||
<TextAnimation
|
||||
text={"OA General Contracting specializes in high-quality remodeling, painting, flooring, and home improvements. We bring craftsmanship to every detail."}
|
||||
variant="fade"
|
||||
gradientText={false}
|
||||
tag="p"
|
||||
className="md:max-w-8/10 text-lg md:text-xl leading-snug text-center md:text-left text-balance"
|
||||
/>
|
||||
|
||||
<div className="flex flex-wrap max-md:justify-center gap-3 mt-2 md:mt-3">
|
||||
<Button text={primaryButton.text} href={primaryButton.href} variant="primary"/>
|
||||
<Button text={secondaryButton.text} href={secondaryButton.href} variant="secondary"animationDelay={0.1} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="w-full md:w-1/2 h-100 md:h-[75vh] flex gap-2 xl:gap-3 2xl:gap-4 overflow-hidden">
|
||||
<div className="flex-1 overflow-hidden mask-fade-y-medium">
|
||||
<div className="flex flex-col gap-2 xl:gap-3 2xl:gap-4 animate-marquee-vertical">
|
||||
{duplicatedLeft.map((item, index) => (
|
||||
<div key={index} className="shrink-0 aspect-square p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden">
|
||||
<ImageOrVideo imageSrc={item.imageSrc} videoSrc={item.videoSrc} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex-1 overflow-hidden mask-fade-y-medium">
|
||||
<div className="flex flex-col gap-2 xl:gap-3 2xl:gap-4 animate-marquee-vertical-reverse">
|
||||
{duplicatedRight.map((item, index) => (
|
||||
<div key={index} className="shrink-0 aspect-square p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden">
|
||||
<ImageOrVideo imageSrc={item.imageSrc} videoSrc={item.videoSrc} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default function HeroSection() {
|
||||
return (
|
||||
<div data-webild-section="hero" id="hero">
|
||||
<HeroInline />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
69
src/pages/HomePage/sections/Location.tsx
Normal file
69
src/pages/HomePage/sections/Location.tsx
Normal file
@@ -0,0 +1,69 @@
|
||||
import React from 'react';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
|
||||
export default function LocationSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="location" data-webild-section="location">
|
||||
<SectionErrorBoundary name="location">
|
||||
<section className="relative w-full py-24 bg-background">
|
||||
<div className="w-content-width mx-auto">
|
||||
<div className="text-center mb-16">
|
||||
<TextAnimation
|
||||
text="Location"
|
||||
variant="slide-up"
|
||||
tag="h2"
|
||||
gradientText={false}
|
||||
className="text-4xl md:text-5xl font-bold text-primary-cta mb-4"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-0 rounded-lg overflow-hidden shadow-lg">
|
||||
<div className="bg-foreground text-background p-12 flex flex-col justify-center">
|
||||
<ScrollReveal variant="fade">
|
||||
<p className="text-lg mb-8 text-background/90">
|
||||
Contact OA General Contracting LLC for all your home improvement needs in Summerville, SC, and surrounding areas reaching a 60-mile radius.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-primary-cta mb-4">Areas we serve</h3>
|
||||
<div className="grid grid-cols-2 gap-x-4 gap-y-2 text-background/80">
|
||||
<span>Seabrook</span>
|
||||
<span>Kingstre</span>
|
||||
<span>Tomotley</span>
|
||||
<span>Pine Needles</span>
|
||||
<span>Cameron</span>
|
||||
<span>Edisto</span>
|
||||
<span>Varnville</span>
|
||||
<span>Wilson</span>
|
||||
<span>Sampit</span>
|
||||
<span>Dale</span>
|
||||
<span>Belser Crossroads</span>
|
||||
<span>Blakely</span>
|
||||
<span>Sheldon</span>
|
||||
<span>Salters</span>
|
||||
<span>Ehrhardt</span>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
|
||||
<div className="h-[400px] lg:h-auto relative">
|
||||
<iframe
|
||||
src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d14333.91423403247!2d-80.3934599!3d26.083232!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x88d9a6c7c4c4c4c5%3A0x4c4c4c4c4c4c4c4c!2s167%20Bayridge%20Ln%2C%20Weston%2C%20FL%2033326!5e1!3m2!1sen!2sus!4v1716480000000!5m2!1sen!2sus"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style={{ border: 0 }}
|
||||
allowFullScreen={false}
|
||||
loading="lazy"
|
||||
referrerPolicy="no-referrer-when-downgrade"
|
||||
className="absolute inset-0"
|
||||
title="OA General Contracting Location Map"
|
||||
></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Metrics.tsx
Normal file
38
src/pages/HomePage/sections/Metrics.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 "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import { Award, Building2, CheckCircle, Layers, Paintbrush, Zap } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="Our Impact"
|
||||
title="Quality by the Numbers"
|
||||
description="We pride ourselves on efficiency and customer-first results."
|
||||
metrics={[
|
||||
{
|
||||
icon: Award,
|
||||
title: "Professional Experience",
|
||||
value: "10+ Years",
|
||||
},
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "Satisfied Clients",
|
||||
value: "500+",
|
||||
},
|
||||
{
|
||||
icon: Zap,
|
||||
title: "Average Response Time",
|
||||
value: "<24h",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
43
src/pages/HomePage/sections/Services.tsx
Normal file
43
src/pages/HomePage/sections/Services.tsx
Normal file
@@ -0,0 +1,43 @@
|
||||
// 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 FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ServicesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesDetailedSteps
|
||||
tag="Our Expertise"
|
||||
title="Comprehensive Contracting Services"
|
||||
description="From small fixes to major transformations, our team provides reliable, top-tier services."
|
||||
steps={[
|
||||
{
|
||||
tag: "01",
|
||||
title: "Plumbing",
|
||||
subtitle: "Reliable Systems",
|
||||
description: "Expert installations, upgrades, and sink piping repairs.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-with-coffee-seaking-phone_23-2147769508.jpg",
|
||||
},
|
||||
{
|
||||
tag: "02",
|
||||
title: "Fencing",
|
||||
subtitle: "Secure & Stylish",
|
||||
description: "Quality fence installations that elevate your property.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-man-factory-worker-standing-industrial-production-hall_342744-87.jpg",
|
||||
},
|
||||
{
|
||||
tag: "03",
|
||||
title: "Pressure Washing",
|
||||
subtitle: "Surface Care",
|
||||
description: "Restoring the longevity of your exterior surfaces.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/builder-with-construction-tools-construction-site-looking-blueprint_169016-5269.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</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 TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialQuoteCards
|
||||
tag="Testimonials"
|
||||
title="What Clients Say"
|
||||
description="Building trust through excellence in every remodel."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Oswaldo Ramos Arantes Neto",
|
||||
role: "Client",
|
||||
quote: "They did an excellent job on my kitchen in Weston and I recommend them 100%!",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/two-successful-male-architect-have-conversation-office_23-2147843005.jpg",
|
||||
},
|
||||
{
|
||||
name: "Maria Garcia",
|
||||
role: "Homeowner",
|
||||
quote: "Professional, quick, and the quality is unmatched. Very happy.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-smiling-couple-renovating-remodeling-their-new-apartment-man-is-painting-walls-with-roller-woman-is-connecting-with-laptop_496169-761.jpg",
|
||||
},
|
||||
{
|
||||
name: "John Smith",
|
||||
role: "Client",
|
||||
quote: "Transformed our home completely. Highly recommended contractor.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/scenery-designers-work_23-2149741777.jpg",
|
||||
},
|
||||
{
|
||||
name: "Alice Brown",
|
||||
role: "Homeowner",
|
||||
quote: "Great communication and fair pricing for our renovations.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-female-dentist-dentistry-concept-dental-treatment_169016-66975.jpg",
|
||||
},
|
||||
{
|
||||
name: "David Miller",
|
||||
role: "Client",
|
||||
quote: "Amazing attention to detail. Will work with them again.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-man-showing-female-colleague-tablet-screen-stairs_1262-20432.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user