Merge version_3 into main #4

Merged
bender merged 2 commits from version_3 into main 2026-03-08 05:22:41 +00:00
2 changed files with 32 additions and 87 deletions

View File

@@ -2,12 +2,10 @@ import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
const inter = Inter({
variable: "--font-inter", subsets: ["latin"],
});
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
title: "MG Junk Removal | Professional Service, Transparent Pricing", description: "Fast, reliable junk removal with upfront pricing and zero damage guarantee. Same-day quotes and professional crews."};
title: "MG Junk Removal", description: "Professional junk removal services with transparent pricing and damage-free guarantee."};
export default function RootLayout({
children,
@@ -15,25 +13,8 @@ export default function RootLayout({
children: React.ReactNode;
}) {
return (
<html lang="en" suppressHydrationWarning>
<head>
<script
dangerouslySetInnerHTML={{
__html: `
try {
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
} catch (e) {}
`,
}}
/>
</head>
<body className={`${inter.variable} antialiased`} suppressHydrationWarning>
{children}
<html lang="en">
<body className={inter.className}>{children}
<script
dangerouslySetInnerHTML={{
__html: `

View File

@@ -10,55 +10,8 @@ import TestimonialCardFifteen from "@/components/sections/testimonial/Testimonia
import ContactSplit from "@/components/sections/contact/ContactSplit";
import FooterMedia from "@/components/sections/footer/FooterMedia";
import { Truck, CheckCircle, Shield, Award, Clock, Star, Phone } from "lucide-react";
import { useState } from "react";
export default function LandingPage() {
const [formData, setFormData] = useState({ email: "", name: "" });
const [submissionStatus, setSubmissionStatus] = useState<"idle" | "loading" | "success" | "error">("idle");
const [confirmationCode, setConfirmationCode] = useState<string | null>(null);
const generateConfirmationCode = (): string => {
return Math.floor(100000 + Math.random() * 900000).toString();
};
const handleQuoteSubmit = async (email: string) => {
setFormData(prev => ({ ...prev, email }));
setSubmissionStatus("loading");
try {
const code = generateConfirmationCode();
setConfirmationCode(code);
// Extract first name from email if not already set
const firstName = formData.name || email.split("@")[0].split(".")[0];
const response = await fetch("https://formspree.io/f/xjkbygyp", {
method: "POST", headers: {
"Accept": "application/json", "Content-Type": "application/json"},
body: JSON.stringify({
email: email,
name: firstName,
message: `Quote Request from ${firstName}. Confirmation Code: ${code}`,
_subject: `MG Junk Removal Quote Request - ${code}`,
}),
});
if (response.ok) {
setSubmissionStatus("success");
// Reset form after 3 seconds
setTimeout(() => {
setFormData({ email: "", name: "" });
setSubmissionStatus("idle");
}, 3000);
} else {
setSubmissionStatus("error");
}
} catch (error) {
console.error("Form submission error:", error);
setSubmissionStatus("error");
}
};
return (
<ThemeProvider
defaultButtonVariant="bounce-effect"
@@ -105,13 +58,16 @@ export default function LandingPage() {
testimonials={[
{
name: "James Mitchell", handle: "Homeowner, Detroit MI", testimonial: "Fastest quote I've ever gotten. They showed up on time, worked efficiently, and left zero damage.", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/closeup-handsome-young-office-worker-glasses-suit-smiling-camera-looking-happy-white_1258-173667.jpg"},
imageSrc: "http://img.b2bpic.net/free-photo/closeup-handsome-young-office-worker-glasses-suit-smiling-camera-looking-happy-white_1258-173667.jpg"
},
{
name: "Sarah Chen", handle: "Property Manager, Chicago IL", testimonial: "Professional team. Bilingual support. Firm pricing. Exactly what we needed for our commercial properties.", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-attractive-businesswoman_93675-133773.jpg"},
imageSrc: "http://img.b2bpic.net/free-photo/young-attractive-businesswoman_93675-133773.jpg"
},
{
name: "Marcus Johnson", handle: "Contractor, Atlanta GA", testimonial: "Same-day availability for construction debris. Reliable, fast, and reasonably priced.", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/solar-panels-industry-technician-high-tech-factory-inspection-quality-control-production_482257-132256.jpg"},
imageSrc: "http://img.b2bpic.net/free-photo/solar-panels-industry-technician-high-tech-factory-inspection-quality-control-production_482257-132256.jpg"
},
]}
testimonialRotationInterval={5000}
/>
@@ -126,11 +82,14 @@ export default function LandingPage() {
tagAnimation="slide-up"
features={[
{
id: "01", title: "Schedule", description: "Book online or call. Same-day or next-day availability. No long wait times.", imageSrc: "http://img.b2bpic.net/free-vector/medical-booking-application_23-2148558680.jpg", imageAlt: "Easy scheduling interface"},
id: "01", title: "Schedule", description: "Book online or call. Same-day or next-day availability. No long wait times.", imageSrc: "http://img.b2bpic.net/free-vector/medical-booking-application_23-2148558680.jpg", imageAlt: "Easy scheduling interface"
},
{
id: "02", title: "Upfront Quote", description: "15-minute phone assessment. Firm pricing. No hidden fees or surprises.", imageSrc: "http://img.b2bpic.net/free-vector/hand-drawn-bankruptcy-concept_23-2148493435.jpg", imageAlt: "Transparent pricing consultation"},
id: "02", title: "Upfront Quote", description: "15-minute phone assessment. Firm pricing. No hidden fees or surprises.", imageSrc: "http://img.b2bpic.net/free-vector/hand-drawn-bankruptcy-concept_23-2148493435.jpg", imageAlt: "Transparent pricing consultation"
},
{
id: "03", title: "Professional Haul", description: "Expert crew. Careful loading. Full cleanup. Damage-free guarantee.", imageSrc: "http://img.b2bpic.net/free-photo/african-american-activist-volunteering-tidy-forest-ecosystem_482257-93953.jpg", imageAlt: "Professional junk removal team at work"},
id: "03", title: "Professional Haul", description: "Expert crew. Careful loading. Full cleanup. Damage-free guarantee.", imageSrc: "http://img.b2bpic.net/free-photo/african-american-activist-volunteering-tidy-forest-ecosystem_482257-93953.jpg", imageAlt: "Professional junk removal team at work"
},
]}
gridVariant="three-columns-all-equal-width"
animationType="slide-up"
@@ -190,17 +149,23 @@ export default function LandingPage() {
author="Robert Williams, Homeowner"
avatars={[
{
src: "http://img.b2bpic.net/free-photo/handsome-business-man-wearing-suit-looking-camera-smiling-broadly-with-happy-face-standing-white-background_141793-54115.jpg", alt: "Customer testimonial avatar 1"},
src: "http://img.b2bpic.net/free-photo/handsome-business-man-wearing-suit-looking-camera-smiling-broadly-with-happy-face-standing-white-background_141793-54115.jpg", alt: "Customer testimonial avatar 1"
},
{
src: "http://img.b2bpic.net/free-photo/portrait-young-attractive-woman-elegant-hotel-cafeteria_657883-403.jpg", alt: "Customer testimonial avatar 2"},
src: "http://img.b2bpic.net/free-photo/portrait-young-attractive-woman-elegant-hotel-cafeteria_657883-403.jpg", alt: "Customer testimonial avatar 2"
},
{
src: "http://img.b2bpic.net/free-photo/close-up-portrait-young-bearded-man-white-shirt-jacket-posing-camera-with-broad-smile-isolated-gray_171337-629.jpg", alt: "Customer testimonial avatar 3"},
src: "http://img.b2bpic.net/free-photo/close-up-portrait-young-bearded-man-white-shirt-jacket-posing-camera-with-broad-smile-isolated-gray_171337-629.jpg", alt: "Customer testimonial avatar 3"
},
{
src: "http://img.b2bpic.net/free-vector/man-avatar-collection_24908-60247.jpg", alt: "Customer testimonial avatar 4"},
src: "http://img.b2bpic.net/free-vector/man-avatar-collection_24908-60247.jpg", alt: "Customer testimonial avatar 4"
},
{
src: "http://img.b2bpic.net/free-photo/young-beautiful-stylish-woman-with-natural-curly-hairstyle-smiling-positive-emotion-happy-isolated-white-background-summer-fashion-trend-hipster-style-looking-camera-green-vest_285396-2925.jpg", alt: "Customer testimonial avatar 5"},
src: "http://img.b2bpic.net/free-photo/young-beautiful-stylish-woman-with-natural-curly-hairstyle-smiling-positive-emotion-happy-isolated-white-background-summer-fashion-trend-hipster-style-looking-camera-green-vest_285396-2925.jpg", alt: "Customer testimonial avatar 5"
},
{
src: "http://img.b2bpic.net/free-photo/smart-looking-teacher_53876-23045.jpg", alt: "Customer testimonial avatar 6"},
src: "http://img.b2bpic.net/free-photo/smart-looking-teacher_53876-23045.jpg", alt: "Customer testimonial avatar 6"
},
]}
ratingAnimation="slide-up"
avatarsAnimation="slide-up"
@@ -211,8 +176,8 @@ export default function LandingPage() {
<div id="contact" data-section="contact">
<ContactSplit
tag="Get Started"
title={confirmationCode ? `Welcome! Your Code: ${confirmationCode}` : "Your Quote Awaits"}
description={confirmationCode ? `Thanks for reaching out! We've sent a confirmation email to ${formData.email}. Our team will contact you within 15 minutes.` : "Fill out our quick assessment form or call us directly. Response guaranteed within 15 minutes during business hours."}
title="Your Quote Awaits"
description="Fill out our quick assessment form or call us directly. Response guaranteed within 15 minutes during business hours."
tagIcon={Phone}
tagAnimation="slide-up"
background={{ variant: "sparkles-gradient" }}
@@ -221,10 +186,9 @@ export default function LandingPage() {
imageAlt="MG Junk Removal team ready to help"
mediaAnimation="opacity"
mediaPosition="right"
inputPlaceholder={submissionStatus === "success" ? "Quote request submitted!" : "your@email.com"}
buttonText={submissionStatus === "loading" ? "Sending..." : "Get Quote"}
inputPlaceholder="Enter your email for quote"
buttonText="Get Quote"
termsText="We respect your privacy. Unsubscribe at any time. By submitting, you agree to our Terms and Conditions."
onSubmit={handleQuoteSubmit}
/>
</div>