Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4256155ab7 | |||
| 244717c96d | |||
| d1381d3c86 | |||
| d4b782117f | |||
| 06ff13970e | |||
| 5dd4abbb83 | |||
| 618f7b32d5 | |||
| de1a452fff | |||
| 6015a7e5b9 | |||
| 81df609fac |
104
src/app/api/contact/route.ts
Normal file
104
src/app/api/contact/route.ts
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
|
|
||||||
|
export async function POST(request: NextRequest) {
|
||||||
|
try {
|
||||||
|
const { name, email, phone, message } = await request.json();
|
||||||
|
|
||||||
|
// Validate required fields
|
||||||
|
if (!name || !email || !message) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: 'Missing required fields' },
|
||||||
|
{ status: 400 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Email validation
|
||||||
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||||
|
if (!emailRegex.test(email)) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: 'Invalid email address' },
|
||||||
|
{ status: 400 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format the email content
|
||||||
|
const emailContent = `
|
||||||
|
New Contact Form Submission from Earl Boys Services Website
|
||||||
|
|
||||||
|
Name: ${name}
|
||||||
|
Email: ${email}
|
||||||
|
Phone: ${phone || 'Not provided'}
|
||||||
|
|
||||||
|
Message:
|
||||||
|
${message}
|
||||||
|
|
||||||
|
---
|
||||||
|
This message was sent from your website contact form.
|
||||||
|
`;
|
||||||
|
|
||||||
|
// Send email notification (you'll need to configure your email service)
|
||||||
|
// This is a placeholder for your email sending logic
|
||||||
|
// You can use services like Nodemailer, SendGrid, AWS SES, etc.
|
||||||
|
|
||||||
|
// Example with a generic webhook or internal email service:
|
||||||
|
const emailResponse = await sendEmailNotification({
|
||||||
|
to: 'info@earlboysservices.com',
|
||||||
|
subject: `New Contact Form Submission from ${name}`,
|
||||||
|
text: emailContent,
|
||||||
|
replyTo: email,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!emailResponse.success) {
|
||||||
|
console.error('Email sending failed:', emailResponse.error);
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: 'Failed to send message' },
|
||||||
|
{ status: 500 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return success response
|
||||||
|
return NextResponse.json(
|
||||||
|
{ message: 'Contact form submitted successfully' },
|
||||||
|
{ status: 200 }
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Contact form error:', error);
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: 'Internal server error' },
|
||||||
|
{ status: 500 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Email notification function - implement based on your email service
|
||||||
|
async function sendEmailNotification({
|
||||||
|
to,
|
||||||
|
subject,
|
||||||
|
text,
|
||||||
|
replyTo,
|
||||||
|
}: {
|
||||||
|
to: string;
|
||||||
|
subject: string;
|
||||||
|
text: string;
|
||||||
|
replyTo: string;
|
||||||
|
}): Promise<{ success: boolean; error?: string }> {
|
||||||
|
try {
|
||||||
|
// Placeholder for email service integration
|
||||||
|
// Configure your email service here (SendGrid, AWS SES, Nodemailer, etc.)
|
||||||
|
|
||||||
|
// Example: Using fetch to call an external email service
|
||||||
|
// const response = await fetch('YOUR_EMAIL_SERVICE_ENDPOINT', {
|
||||||
|
// method: 'POST',
|
||||||
|
// headers: { 'Content-Type': 'application/json' },
|
||||||
|
// body: JSON.stringify({ to, subject, text, replyTo }),
|
||||||
|
// });
|
||||||
|
|
||||||
|
// For now, return success (implement actual email service)
|
||||||
|
console.log(`Email notification: ${subject} to ${to}`);
|
||||||
|
|
||||||
|
return { success: true };
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Email notification error:', error);
|
||||||
|
return { success: false, error: String(error) };
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||||
import NavbarStyleCentered from "@/components/navbar/NavbarStyleCentered/NavbarStyleCentered";
|
import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple";
|
||||||
import HeroBillboardCarousel from "@/components/sections/hero/HeroBillboardCarousel";
|
import HeroBillboardCarousel from "@/components/sections/hero/HeroBillboardCarousel";
|
||||||
import FeatureCardTwentyFive from "@/components/sections/feature/FeatureCardTwentyFive";
|
import FeatureCardTwentyFive from "@/components/sections/feature/FeatureCardTwentyFive";
|
||||||
import TestimonialCardThirteen from "@/components/sections/testimonial/TestimonialCardThirteen";
|
import TestimonialCardThirteen from "@/components/sections/testimonial/TestimonialCardThirteen";
|
||||||
@@ -14,8 +14,7 @@ export default function ContactPage() {
|
|||||||
{ name: "Home", id: "/" },
|
{ name: "Home", id: "/" },
|
||||||
{ name: "Services", id: "services" },
|
{ name: "Services", id: "services" },
|
||||||
{ name: "About", id: "about" },
|
{ name: "About", id: "about" },
|
||||||
{ name: "Portfolio", id: "portfolio" },
|
{ name: "Contact", id: "/contact" },
|
||||||
{ name: "Contact", id: "contact" },
|
|
||||||
];
|
];
|
||||||
|
|
||||||
const contactButton = {
|
const contactButton = {
|
||||||
@@ -36,9 +35,8 @@ export default function ContactPage() {
|
|||||||
headingFontWeight="bold"
|
headingFontWeight="bold"
|
||||||
>
|
>
|
||||||
<div id="nav" data-section="nav">
|
<div id="nav" data-section="nav">
|
||||||
<NavbarStyleCentered
|
<NavbarStyleApple
|
||||||
navItems={navItems}
|
navItems={navItems}
|
||||||
button={contactButton}
|
|
||||||
brandName="Earl Boys Services"
|
brandName="Earl Boys Services"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -53,22 +51,22 @@ export default function ContactPage() {
|
|||||||
background={{ variant: "sparkles-gradient" }}
|
background={{ variant: "sparkles-gradient" }}
|
||||||
mediaItems={[
|
mediaItems={[
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/young-cute-family-repairs-room_1157-24897.jpg", imageAlt: "Professional home services team"
|
imageSrc: "http://img.b2bpic.net/free-photo/young-cute-family-repairs-room_1157-24897.jpg?_wi=2", imageAlt: "Professional home services team"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721573.jpg", imageAlt: "Expert plumbing services"
|
imageSrc: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721573.jpg?_wi=3", imageAlt: "Expert plumbing services"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-painting-wall-home_23-2149098981.jpg", imageAlt: "Professional painting services"
|
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-painting-wall-home_23-2149098981.jpg?_wi=3", imageAlt: "Professional painting services"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-checks-switchboard-tablet-night-shift-smart-service_169016-70936.jpg", imageAlt: "Licensed electrical work"
|
imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-checks-switchboard-tablet-night-shift-smart-service_169016-70936.jpg?_wi=3", imageAlt: "Licensed electrical work"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/mechanics-checking-planning-workshop_329181-11868.jpg", imageAlt: "General maintenance services"
|
imageSrc: "http://img.b2bpic.net/free-photo/mechanics-checking-planning-workshop_329181-11868.jpg?_wi=2", imageAlt: "General maintenance services"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/circular-saw-carpenter-using-circular-saw-wood_169016-17039.jpg", imageAlt: "Professional flooring installation"
|
imageSrc: "http://img.b2bpic.net/free-photo/circular-saw-carpenter-using-circular-saw-wood_169016-17039.jpg?_wi=2", imageAlt: "Professional flooring installation"
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
buttons={[
|
buttons={[
|
||||||
@@ -233,4 +231,4 @@ export default function ContactPage() {
|
|||||||
</div>
|
</div>
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
366
src/app/page.tsx
366
src/app/page.tsx
@@ -1,34 +1,22 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||||
import NavbarStyleCentered from "@/components/navbar/NavbarStyleCentered/NavbarStyleCentered";
|
import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple";
|
||||||
import HeroBillboardCarousel from "@/components/sections/hero/HeroBillboardCarousel";
|
import HeroBillboardRotatedCarousel from "@/components/sections/hero/HeroBillboardRotatedCarousel";
|
||||||
import FeatureCardTwentyFive from "@/components/sections/feature/FeatureCardTwentyFive";
|
import FeatureCardTen from "@/components/sections/feature/FeatureCardTen";
|
||||||
import TestimonialCardTwelve from "@/components/sections/testimonial/TestimonialCardTwelve";
|
import TestimonialCardTwelve from "@/components/sections/testimonial/TestimonialCardTwelve";
|
||||||
import MetricCardOne from "@/components/sections/metrics/MetricCardOne";
|
import FaqDouble from "@/components/sections/faq/FaqDouble";
|
||||||
import FaqSplitText from "@/components/sections/faq/FaqSplitText";
|
import FooterBaseReveal from "@/components/sections/footer/FooterBaseReveal";
|
||||||
import FooterCard from "@/components/sections/footer/FooterCard";
|
import { Sparkles, CheckCircle, TrendingUp, Users, Shield, Zap, Globe } from "lucide-react";
|
||||||
import Link from "next/link";
|
|
||||||
import {
|
export default function Home() {
|
||||||
Hammer,
|
const navItems = [
|
||||||
Wrench,
|
{ name: "Home", id: "/" },
|
||||||
Droplet,
|
{ name: "Services", id: "services" },
|
||||||
Paintbrush,
|
{ name: "About", id: "about" },
|
||||||
Zap,
|
{ name: "Contact", id: "/contact" },
|
||||||
MonitorPlay,
|
];
|
||||||
Armchair,
|
|
||||||
Layers,
|
|
||||||
Clock,
|
|
||||||
Users,
|
|
||||||
CheckCircle,
|
|
||||||
TrendingUp,
|
|
||||||
Star,
|
|
||||||
Facebook,
|
|
||||||
Instagram,
|
|
||||||
Phone,
|
|
||||||
} from "lucide-react";
|
|
||||||
|
|
||||||
export default function HomePage() {
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider
|
<ThemeProvider
|
||||||
defaultButtonVariant="hover-magnetic"
|
defaultButtonVariant="hover-magnetic"
|
||||||
@@ -36,184 +24,93 @@ export default function HomePage() {
|
|||||||
borderRadius="rounded"
|
borderRadius="rounded"
|
||||||
contentWidth="smallMedium"
|
contentWidth="smallMedium"
|
||||||
sizing="mediumLargeSizeLargeTitles"
|
sizing="mediumLargeSizeLargeTitles"
|
||||||
background="noise"
|
background="circleGradient"
|
||||||
cardStyle="solid"
|
cardStyle="solid"
|
||||||
primaryButtonStyle="primary-glow"
|
primaryButtonStyle="primary-glow"
|
||||||
secondaryButtonStyle="glass"
|
secondaryButtonStyle="glass"
|
||||||
headingFontWeight="bold"
|
headingFontWeight="bold"
|
||||||
>
|
>
|
||||||
<div id="nav" data-section="nav">
|
<div id="nav" data-section="nav">
|
||||||
<NavbarStyleCentered
|
<NavbarStyleApple navItems={navItems} brandName="Earl Boys Services" />
|
||||||
brandName="Earl Boys Services"
|
|
||||||
navItems={[
|
|
||||||
{ name: "Home", id: "home" },
|
|
||||||
{ name: "Services", id: "services" },
|
|
||||||
{ name: "About", id: "about" },
|
|
||||||
{ name: "Portfolio", id: "portfolio" },
|
|
||||||
{ name: "Contact", id: "contact" },
|
|
||||||
]}
|
|
||||||
button={{
|
|
||||||
text: "Call Now",
|
|
||||||
href: "tel:804-938-0669",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="hero" data-section="hero">
|
<div id="hero" data-section="hero">
|
||||||
<HeroBillboardCarousel
|
<HeroBillboardRotatedCarousel
|
||||||
title="Professional Home Services in Richmond, VA"
|
title="Transform Your Home with Professional Services"
|
||||||
description="Expert solutions for all your home improvement, repair, and maintenance needs. 10+ services to transform your home. Call 804-938-0669"
|
description="Expert home services in Richmond, VA. From plumbing and electrical work to painting and flooring, we deliver quality craftsmanship every time."
|
||||||
tag="Earl Boys Services"
|
tag="Earl Boys Services"
|
||||||
tagIcon={Hammer}
|
tagIcon={Sparkles}
|
||||||
tagAnimation="slide-up"
|
tagAnimation="slide-up"
|
||||||
background={{ variant: "plain" }}
|
background={{ variant: "sparkles-gradient" }}
|
||||||
mediaItems={[
|
carouselItems={[
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/young-cute-family-repairs-room_1157-24897.jpg?_wi=1",
|
id: "1", imageSrc: "http://img.b2bpic.net/free-photo/young-cute-family-repairs-room_1157-24897.jpg?_wi=1", imageAlt: "Professional home services team"},
|
||||||
imageAlt: "Professional home services team",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721573.jpg?_wi=1",
|
id: "2", imageSrc: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721573.jpg?_wi=1", imageAlt: "Expert plumbing services"},
|
||||||
imageAlt: "Expert plumbing services",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-painting-wall-home_23-2149098981.jpg?_wi=1",
|
id: "3", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-painting-wall-home_23-2149098981.jpg?_wi=1", imageAlt: "Professional painting services"},
|
||||||
imageAlt: "Professional painting services",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-checks-switchboard-tablet-night-shift-smart-service_169016-70936.jpg?_wi=1",
|
id: "4", imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-checks-switchboard-tablet-night-shift-smart-service_169016-70936.jpg?_wi=1", imageAlt: "Licensed electrical work"},
|
||||||
imageAlt: "Licensed electrical work",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/mechanics-checking-planning-workshop_329181-11868.jpg?_wi=1",
|
id: "5", imageSrc: "http://img.b2bpic.net/free-photo/mechanics-checking-planning-workshop_329181-11868.jpg?_wi=1", imageAlt: "General maintenance services"},
|
||||||
imageAlt: "General maintenance services",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/circular-saw-carpenter-using-circular-saw-wood_169016-17039.jpg?_wi=1",
|
id: "6", imageSrc: "http://img.b2bpic.net/free-photo/circular-saw-carpenter-using-circular-saw-wood_169016-17039.jpg?_wi=1", imageAlt: "Professional flooring installation"},
|
||||||
imageAlt: "Professional flooring installation",
|
|
||||||
},
|
|
||||||
]}
|
]}
|
||||||
buttons={[
|
buttons={[
|
||||||
{
|
{
|
||||||
text: "Call Now: 804-938-0669",
|
text: "Get Free Estimate", href: "/contact"},
|
||||||
href: "tel:804-938-0669",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
text: "Book a Service",
|
text: "Call: 804-938-0669", href: "tel:804-938-0669"},
|
||||||
href: "contact",
|
|
||||||
},
|
|
||||||
]}
|
]}
|
||||||
buttonAnimation="slide-up"
|
buttonAnimation="slide-up"
|
||||||
ariaLabel="Hero section for Earl Boys Services"
|
ariaLabel="Hero section showcasing home services"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="services-home" data-section="services-home">
|
<div id="services" data-section="services">
|
||||||
<FeatureCardTwentyFive
|
<FeatureCardTen
|
||||||
|
title="Our Services"
|
||||||
|
description="Comprehensive home services designed to meet all your residential needs with professional expertise and quality craftsmanship."
|
||||||
|
tag="What We Offer"
|
||||||
|
tagIcon={Sparkles}
|
||||||
features={[
|
features={[
|
||||||
{
|
{
|
||||||
title: "Plumbing Services",
|
id: "1", title: "Plumbing Services", description: "From routine maintenance to complex repairs, our licensed plumbers handle all your plumbing needs with precision and care.", media: {
|
||||||
description: "Expert plumbing repairs, installations, and maintenance for all your home water systems.",
|
imageSrc: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721573.jpg?_wi=2", imageAlt: "Professional plumbing work"},
|
||||||
icon: Droplet,
|
items: [
|
||||||
mediaItems: [
|
{ icon: CheckCircle, text: "Leak detection & repair" },
|
||||||
{
|
{ icon: CheckCircle, text: "Pipe installation" },
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721573.jpg?_wi=2",
|
{ icon: CheckCircle, text: "Drain cleaning" },
|
||||||
imageAlt: "Professional plumbing work",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-man-receiving-box_23-2149103401.jpg?_wi=1",
|
|
||||||
imageAlt: "Plumbing project completed",
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
|
reverse: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Painting Services",
|
id: "2", title: "Electrical Services", description: "Safe, reliable electrical work for all your home needs. Licensed electricians providing installations, repairs, and upgrades.", media: {
|
||||||
description: "Interior and exterior painting with premium finishes for residential and commercial spaces.",
|
imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-checks-switchboard-tablet-night-shift-smart-service_169016-70936.jpg?_wi=2", imageAlt: "Professional electrical work"},
|
||||||
icon: Paintbrush,
|
items: [
|
||||||
mediaItems: [
|
{ icon: CheckCircle, text: "Circuit installation" },
|
||||||
{
|
{ icon: CheckCircle, text: "Outlet & switch repairs" },
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-painting-wall-home_23-2149098981.jpg?_wi=2",
|
{ icon: CheckCircle, text: "Safety inspections" },
|
||||||
imageAlt: "Professional painting service",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-woman-man-choosing-color_23-2148903521.jpg?_wi=1",
|
|
||||||
imageAlt: "Painting transformation",
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
|
reverse: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Electrical Work",
|
id: "3", title: "Painting & Finishing", description: "Transform your space with professional painting services. Interior and exterior work with attention to detail and quality finishes.", media: {
|
||||||
description: "Licensed electrical services including installations, repairs, and safety inspections.",
|
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-painting-wall-home_23-2149098981.jpg?_wi=2", imageAlt: "Professional painting services"},
|
||||||
icon: Zap,
|
items: [
|
||||||
mediaItems: [
|
{ icon: CheckCircle, text: "Interior painting" },
|
||||||
{
|
{ icon: CheckCircle, text: "Exterior painting" },
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-checks-switchboard-tablet-night-shift-smart-service_169016-70936.jpg?_wi=2",
|
{ icon: CheckCircle, text: "Surface preparation" },
|
||||||
imageAlt: "Professional electrical work",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/young-couple-moving-new-home_23-2149242082.jpg?_wi=1",
|
|
||||||
imageAlt: "Electrical project completed",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Wall Mounting",
|
|
||||||
description: "Professional TV mounting, shelving installation, and wall customization services.",
|
|
||||||
icon: MonitorPlay,
|
|
||||||
mediaItems: [
|
|
||||||
{
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-builder-men-with-smartphones_23-2148751993.jpg?_wi=1",
|
|
||||||
imageAlt: "Professional wall mounting",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-man-receiving-box_23-2149103401.jpg?_wi=2",
|
|
||||||
imageAlt: "Wall mounting installation",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Furniture Assembly",
|
|
||||||
description: "Quick and efficient furniture assembly for residential and commercial installations.",
|
|
||||||
icon: Armchair,
|
|
||||||
mediaItems: [
|
|
||||||
{
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-man-hitting-nail-by-hammer_329181-3740.jpg?_wi=1",
|
|
||||||
imageAlt: "Professional furniture assembly",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-woman-man-choosing-color_23-2148903521.jpg?_wi=2",
|
|
||||||
imageAlt: "Furniture installation completed",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Flooring Installation",
|
|
||||||
description: "Expert flooring installation for hardwood, tile, laminate, and other materials.",
|
|
||||||
icon: Layers,
|
|
||||||
mediaItems: [
|
|
||||||
{
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/circular-saw-carpenter-using-circular-saw-wood_169016-17039.jpg?_wi=2",
|
|
||||||
imageAlt: "Professional flooring installation",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/young-couple-moving-new-home_23-2149242082.jpg?_wi=2",
|
|
||||||
imageAlt: "Flooring project transformation",
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
|
reverse: false,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
animationType="slide-up"
|
animationType="slide-up"
|
||||||
title="Our Expert Services"
|
|
||||||
description="Comprehensive home services tailored to your needs. From plumbing to painting, we handle it all with professional excellence."
|
|
||||||
tag="10 Services"
|
|
||||||
tagIcon={Wrench}
|
|
||||||
textboxLayout="default"
|
textboxLayout="default"
|
||||||
useInvertedBackground={false}
|
useInvertedBackground={false}
|
||||||
buttons={[
|
buttons={[
|
||||||
{
|
{
|
||||||
text: "View All Services",
|
text: "Schedule Service", href: "/contact"},
|
||||||
href: "/services",
|
|
||||||
},
|
|
||||||
]}
|
]}
|
||||||
buttonAnimation="slide-up"
|
buttonAnimation="slide-up"
|
||||||
/>
|
/>
|
||||||
@@ -223,147 +120,62 @@ export default function HomePage() {
|
|||||||
<TestimonialCardTwelve
|
<TestimonialCardTwelve
|
||||||
testimonials={[
|
testimonials={[
|
||||||
{
|
{
|
||||||
id: "1",
|
id: "1", name: "John Mitchell", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AOwz6pWy3usOcBMo4WS6AXnICI/uploaded-1773139927112-860778c6.png?_wi=1", imageAlt: "John Mitchell"},
|
||||||
name: "Sarah Johnson",
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiley-businessman-close-up_23-2148746290.jpg",
|
|
||||||
imageAlt: "Sarah Johnson testimonial",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "2",
|
id: "2", name: "Sarah Thompson", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AOwz6pWy3usOcBMo4WS6AXnICI/uploaded-1773139927112-860778c6.png?_wi=2", imageAlt: "Sarah Thompson"},
|
||||||
name: "Michael Chen",
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/happy-man-with-thumbs-up_1187-3144.jpg",
|
|
||||||
imageAlt: "Michael Chen testimonial",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "3",
|
id: "3", name: "Michael Chen", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AOwz6pWy3usOcBMo4WS6AXnICI/uploaded-1773139927112-860778c6.png?_wi=3", imageAlt: "Michael Chen"},
|
||||||
name: "Emily Rodriguez",
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/headshot-euphoric-successful-businesswoman_273609-13789.jpg",
|
|
||||||
imageAlt: "Emily Rodriguez testimonial",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "4",
|
id: "4", name: "Jennifer Rodriguez", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AOwz6pWy3usOcBMo4WS6AXnICI/uploaded-1773139927112-860778c6.png?_wi=4", imageAlt: "Jennifer Rodriguez"},
|
||||||
name: "David Williams",
|
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/young-man-holding-house-model-t-shirt-jacket-cap-looking-amazed-front-view_176474-57861.jpg",
|
|
||||||
imageAlt: "David Williams testimonial",
|
|
||||||
},
|
|
||||||
]}
|
]}
|
||||||
cardTitle="Over 2,000+ satisfied customers trust Earl Boys Services for their home improvement needs"
|
cardTitle="Over 1,000 satisfied customers trust Earl Boys Services"
|
||||||
cardTag="Customer Reviews"
|
cardTag="See what they say"
|
||||||
cardTagIcon={Star}
|
|
||||||
cardAnimation="slide-up"
|
|
||||||
useInvertedBackground={false}
|
useInvertedBackground={false}
|
||||||
/>
|
cardAnimation="slide-up"
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="metrics" data-section="metrics">
|
|
||||||
<MetricCardOne
|
|
||||||
metrics={[
|
|
||||||
{
|
|
||||||
id: "1",
|
|
||||||
value: "15",
|
|
||||||
title: "Years",
|
|
||||||
description: "In business serving Richmond VA",
|
|
||||||
icon: Clock,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "2",
|
|
||||||
value: "2000",
|
|
||||||
title: "Customers",
|
|
||||||
description: "Satisfied homeowners and businesses",
|
|
||||||
icon: Users,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "3",
|
|
||||||
value: "98",
|
|
||||||
title: "Percent",
|
|
||||||
description: "Customer satisfaction rating",
|
|
||||||
icon: CheckCircle,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "4",
|
|
||||||
value: "10",
|
|
||||||
title: "Services",
|
|
||||||
description: "Complete home service solutions",
|
|
||||||
icon: Wrench,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
animationType="slide-up"
|
|
||||||
gridVariant="uniform-all-items-equal"
|
|
||||||
title="By The Numbers"
|
|
||||||
description="Earl Boys Services is Richmond's trusted home services leader with proven results."
|
|
||||||
tag="Our Success"
|
|
||||||
tagIcon={TrendingUp}
|
|
||||||
textboxLayout="default"
|
|
||||||
useInvertedBackground={true}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="faq" data-section="faq">
|
<div id="faq" data-section="faq">
|
||||||
<FaqSplitText
|
<FaqDouble
|
||||||
faqs={[
|
faqs={[
|
||||||
{
|
{
|
||||||
id: "1",
|
id: "1", title: "What areas do you serve?", content: "We proudly serve Richmond, VA and all surrounding areas. Our service team covers residential and commercial properties throughout the region."},
|
||||||
title: "What areas of Richmond do you serve?",
|
|
||||||
content: "We proudly serve all of Richmond, VA and surrounding areas. Our service team covers residential and commercial properties throughout the region.",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "2",
|
id: "2", title: "How quickly can you respond to my request?", content: "We typically respond to service requests within 24 hours. For emergency issues, call us immediately at 804-938-0669."},
|
||||||
title: "How quickly can you respond to service requests?",
|
|
||||||
content: "We typically respond to service requests within 24 hours. For urgent issues, call us at 804-938-0669 for immediate assistance.",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "3",
|
id: "3", title: "Do you charge for consultations?", content: "No! We provide free, no-obligation estimates for all services. Contact us to schedule your consultation."},
|
||||||
title: "Do you offer warranty on your work?",
|
|
||||||
content: "Yes! We stand behind our workmanship with comprehensive warranties on all services. Details vary by service type.",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "4",
|
id: "4", title: "Are you licensed and insured?", content: "Absolutely. Earl Boys Services is fully licensed, insured, and bonded. We maintain all required certifications."},
|
||||||
title: "Are you licensed and insured?",
|
|
||||||
content: "Absolutely. Earl Boys Services is fully licensed, insured, and bonded. We maintain all required certifications for electrical, plumbing, and other specialized services.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "5",
|
|
||||||
title: "What payment methods do you accept?",
|
|
||||||
content: "We accept cash, check, credit cards, and digital payments. We also offer financing options for larger projects.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "6",
|
|
||||||
title: "Do you provide free estimates?",
|
|
||||||
content: "Yes! We provide free, no-obligation estimates for all services. Contact us to schedule your consultation.",
|
|
||||||
},
|
|
||||||
]}
|
]}
|
||||||
sideTitle="Frequently Asked Questions"
|
title="Frequently Asked Questions"
|
||||||
sideDescription="Find answers to common questions about our home services, pricing, and availability."
|
description="Find answers to common questions about our services and how we can help your home."
|
||||||
textPosition="left"
|
textboxLayout="default"
|
||||||
faqsAnimation="slide-up"
|
|
||||||
useInvertedBackground={false}
|
useInvertedBackground={false}
|
||||||
animationType="smooth"
|
faqsAnimation="slide-up"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="footer" data-section="footer">
|
<div id="footer" data-section="footer">
|
||||||
<FooterCard
|
<FooterBaseReveal
|
||||||
logoText="Earl Boys Services"
|
columns={[
|
||||||
copyrightText="© 2025 Earl Boys Services LLC. All rights reserved. Licensed & Insured."
|
|
||||||
socialLinks={[
|
|
||||||
{
|
{
|
||||||
icon: Facebook,
|
title: "Services", items: [
|
||||||
href: "https://facebook.com",
|
{ label: "Plumbing", href: "services" },
|
||||||
ariaLabel: "Facebook",
|
{ label: "Electrical", href: "services" },
|
||||||
|
{ label: "Painting", href: "services" },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: Instagram,
|
title: "Company", items: [
|
||||||
href: "https://instagram.com",
|
{ label: "About", href: "about" },
|
||||||
ariaLabel: "Instagram",
|
{ label: "Contact", href: "/contact" },
|
||||||
},
|
{ label: "Home", href: "/" },
|
||||||
{
|
],
|
||||||
icon: Phone,
|
|
||||||
href: "tel:804-938-0669",
|
|
||||||
ariaLabel: "Call us",
|
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
|
copyrightText="© 2025 Earl Boys Services LLC. All rights reserved. Licensed & Insured."
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,11 @@
|
|||||||
|
|
||||||
--background: #ffffff;
|
--background: #ffffff;
|
||||||
--card: #f9f9f9;
|
--card: #f9f9f9;
|
||||||
--foreground: #120006e6;
|
--foreground: #000612e6;
|
||||||
--primary-cta: #e63946;
|
--primary-cta: #15479c;
|
||||||
--primary-cta-text: #ffffff;
|
--primary-cta-text: #ffffff;
|
||||||
--secondary-cta: #f9f9f9;
|
--secondary-cta: #f9f9f9;
|
||||||
--secondary-cta-text: #120006e6;
|
--secondary-cta-text: #000612e6;
|
||||||
--accent: #e2e2e2;
|
--accent: #e2e2e2;
|
||||||
--background-accent: #c4c4c4;
|
--background-accent: #c4c4c4;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user