Merge version_2 into main #1
@@ -7,6 +7,7 @@ import { ServiceWrapper } from "@/components/ServiceWrapper";
|
||||
import Tag from "@/tag/Tag";
|
||||
import { getVisualEditScript } from "@/utils/visual-edit-script";
|
||||
import { DM_Sans } from "next/font/google";
|
||||
import { Poppins } from "next/font/google";
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +22,9 @@ export const metadata: Metadata = {
|
||||
},
|
||||
};
|
||||
|
||||
const dmSans = DM_Sans({ variable: "--font-dm-sans", subsets: ["latin"] });
|
||||
|
||||
const poppins = Poppins({ variable: "--font-poppins", subsets: ["latin"], weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"] });
|
||||
const inter = Inter({ variable: "--font-inter", subsets: ["latin"] });
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
@@ -31,7 +34,7 @@ export default function RootLayout({
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<ServiceWrapper>
|
||||
<body className={`${dmSans.variable} antialiased`}>
|
||||
<body className={`${poppins.variable} ${inter.variable} antialiased`}>
|
||||
<Tag />
|
||||
{children}
|
||||
<script
|
||||
|
||||
311
src/app/page.tsx
311
src/app/page.tsx
@@ -32,21 +32,13 @@ export default function LandingPage() {
|
||||
<NavbarStyleCentered
|
||||
navItems={[
|
||||
{
|
||||
name: "Home",
|
||||
id: "hero",
|
||||
},
|
||||
name: "Home", id: "hero"},
|
||||
{
|
||||
name: "Services",
|
||||
id: "services",
|
||||
},
|
||||
name: "Services", id: "services"},
|
||||
{
|
||||
name: "About",
|
||||
id: "about",
|
||||
},
|
||||
name: "About", id: "about"},
|
||||
{
|
||||
name: "Contact",
|
||||
id: "contact",
|
||||
},
|
||||
name: "Contact", id: "contact"},
|
||||
]}
|
||||
brandName="Action Ace Plumbing"
|
||||
/>
|
||||
@@ -56,101 +48,56 @@ export default function LandingPage() {
|
||||
<HeroBillboardTestimonial
|
||||
useInvertedBackground={false}
|
||||
background={{
|
||||
variant: "radial-gradient",
|
||||
}}
|
||||
variant: "radial-gradient"}}
|
||||
title="Emergency Plumbing in Edmonton — Honest, Fast, No Upselling"
|
||||
description="From leaks to sump pumps, we fix it right the first time — and often help you solve it over the phone before we even arrive."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.",
|
||||
handle: "@local",
|
||||
testimonial: "He easily could have charged me for a visit, but walked me through fixing it myself.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-as-plumber_23-2150746294.jpg",
|
||||
},
|
||||
name: "Sarah J.", handle: "@local", testimonial: "He easily could have charged me for a visit, but walked me through fixing it myself.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-as-plumber_23-2150746294.jpg"},
|
||||
{
|
||||
name: "Mike R.",
|
||||
handle: "@local",
|
||||
testimonial: "Other plumbers couldn’t figure it out — Greg solved it fast.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-man-home-office_329181-20664.jpg",
|
||||
},
|
||||
name: "Mike R.", handle: "@local", testimonial: "Other plumbers couldn’t figure it out — Greg solved it fast.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-man-home-office_329181-20664.jpg"},
|
||||
{
|
||||
name: "Linda K.",
|
||||
handle: "@local",
|
||||
testimonial: "On time, clean, and super fair pricing.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/female-plumber-working-fix-problems-client-s-house_23-2150990738.jpg",
|
||||
},
|
||||
name: "Linda K.", handle: "@local", testimonial: "On time, clean, and super fair pricing.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/female-plumber-working-fix-problems-client-s-house_23-2150990738.jpg"},
|
||||
{
|
||||
name: "David M.",
|
||||
handle: "@local",
|
||||
testimonial: "Absolute lifesaver for our sump pump emergency.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/male-plumber-working-with-client-fix-kitchen-problems_23-2150990692.jpg",
|
||||
},
|
||||
name: "David M.", handle: "@local", testimonial: "Absolute lifesaver for our sump pump emergency.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/male-plumber-working-with-client-fix-kitchen-problems_23-2150990692.jpg"},
|
||||
{
|
||||
name: "Chris B.",
|
||||
handle: "@local",
|
||||
testimonial: "Honest as they come. Highly recommend.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-as-plumber_23-2150746289.jpg",
|
||||
},
|
||||
name: "Chris B.", handle: "@local", testimonial: "Honest as they come. Highly recommend.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-as-plumber_23-2150746289.jpg"},
|
||||
]}
|
||||
buttons={[
|
||||
{
|
||||
text: "Call Now (24/7)",
|
||||
href: "tel:5555555555",
|
||||
},
|
||||
text: "Call Now (24/7)", href: "tel:5555555555"},
|
||||
{
|
||||
text: "Text a Photo",
|
||||
href: "sms:5555555555",
|
||||
},
|
||||
text: "Text a Photo", href: "sms:5555555555"},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/man-looking-detail-sitting-floor_259150-58258.jpg"
|
||||
avatars={[
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721575.jpg",
|
||||
alt: "Customer 1",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721575.jpg", alt: "Customer 1"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721552.jpg",
|
||||
alt: "Customer 2",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/plumbing-professional-doing-his-job_23-2150721552.jpg", alt: "Customer 2"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/service-maintenance-worker-repairing_23-2149176721.jpg",
|
||||
alt: "Customer 3",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/service-maintenance-worker-repairing_23-2149176721.jpg", alt: "Customer 3"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/male-plumber-working-fix-problems-client-s-house_23-2150990730.jpg",
|
||||
alt: "Customer 4",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/male-plumber-working-fix-problems-client-s-house_23-2150990730.jpg", alt: "Customer 4"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/portrait-smiling-carefree-brunette-woman-sitting-couch-living-room-online-shopping_1258-201984.jpg",
|
||||
alt: "Customer 5",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/portrait-smiling-carefree-brunette-woman-sitting-couch-living-room-online-shopping_1258-201984.jpg", alt: "Customer 5"},
|
||||
]}
|
||||
marqueeItems={[
|
||||
{
|
||||
type: "text",
|
||||
text: "24/7 Emergency Support",
|
||||
},
|
||||
type: "text", text: "24/7 Emergency Support"},
|
||||
{
|
||||
type: "text",
|
||||
text: "Licensed & Insured",
|
||||
},
|
||||
type: "text", text: "Licensed & Insured"},
|
||||
{
|
||||
type: "text",
|
||||
text: "Edmonton Owned",
|
||||
},
|
||||
type: "text", text: "Edmonton Owned"},
|
||||
{
|
||||
type: "text",
|
||||
text: "Transparent Pricing",
|
||||
},
|
||||
type: "text", text: "Transparent Pricing"},
|
||||
{
|
||||
type: "text",
|
||||
text: "Same-Day Service",
|
||||
},
|
||||
type: "text", text: "Same-Day Service"},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
@@ -162,64 +109,28 @@ export default function LandingPage() {
|
||||
useInvertedBackground={true}
|
||||
features={[
|
||||
{
|
||||
id: "f1",
|
||||
label: "Faucets",
|
||||
title: "Leaky Faucets & Pipes",
|
||||
items: [
|
||||
"Repair of all brands",
|
||||
"Pipe leak sealing",
|
||||
"Drip prevention",
|
||||
],
|
||||
id: "f1", label: "Faucets", title: "Leaky Faucets & Pipes", items: [
|
||||
"Repair of all brands", "Pipe leak sealing", "Drip prevention"],
|
||||
},
|
||||
{
|
||||
id: "f2",
|
||||
label: "Toilets",
|
||||
title: "Toilet Repairs",
|
||||
items: [
|
||||
"Replacement",
|
||||
"Flushing issues",
|
||||
"Clog clearing",
|
||||
],
|
||||
id: "f2", label: "Toilets", title: "Toilet Repairs", items: [
|
||||
"Replacement", "Flushing issues", "Clog clearing"],
|
||||
},
|
||||
{
|
||||
id: "f3",
|
||||
label: "Sump",
|
||||
title: "Sump Pump Repair",
|
||||
items: [
|
||||
"Emergency flood prevention",
|
||||
"Diagnostics",
|
||||
"Replacement units",
|
||||
],
|
||||
id: "f3", label: "Sump", title: "Sump Pump Repair", items: [
|
||||
"Emergency flood prevention", "Diagnostics", "Replacement units"],
|
||||
},
|
||||
{
|
||||
id: "f4",
|
||||
label: "Drain",
|
||||
title: "Drain & Main Line",
|
||||
items: [
|
||||
"Main line clearance",
|
||||
"Drain diagnostics",
|
||||
"Blockage removal",
|
||||
],
|
||||
id: "f4", label: "Drain", title: "Drain & Main Line", items: [
|
||||
"Main line clearance", "Drain diagnostics", "Blockage removal"],
|
||||
},
|
||||
{
|
||||
id: "f5",
|
||||
label: "Kitchen",
|
||||
title: "Kitchen & Bath",
|
||||
items: [
|
||||
"Shower valves",
|
||||
"Tub repairs",
|
||||
"Kitchen fixtures",
|
||||
],
|
||||
id: "f5", label: "Kitchen", title: "Kitchen & Bath", items: [
|
||||
"Shower valves", "Tub repairs", "Kitchen fixtures"],
|
||||
},
|
||||
{
|
||||
id: "f6",
|
||||
label: "Emergency",
|
||||
title: "Emergency Shutoff",
|
||||
items: [
|
||||
"24/7 support",
|
||||
"Water shutoff fixes",
|
||||
"Pressure problems",
|
||||
],
|
||||
id: "f6", label: "Emergency", title: "Emergency Shutoff", items: [
|
||||
"24/7 support", "Water shutoff fixes", "Pressure problems"],
|
||||
},
|
||||
]}
|
||||
title="What We Fix"
|
||||
@@ -234,17 +145,11 @@ export default function LandingPage() {
|
||||
description="Action Ace Plumbing is built on one principle: Do what’s right for the homeowner. We prioritize helping you solve issues over the phone before we ever arrive."
|
||||
metrics={[
|
||||
{
|
||||
value: "52+",
|
||||
title: "5-Star Reviews",
|
||||
},
|
||||
value: "52+", title: "5-Star Reviews"},
|
||||
{
|
||||
value: "24/7",
|
||||
title: "Emergency Support",
|
||||
},
|
||||
value: "24/7", title: "Emergency Support"},
|
||||
{
|
||||
value: "100%",
|
||||
title: "Honest Advice",
|
||||
},
|
||||
value: "100%", title: "Honest Advice"},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/electrician-is-mounting-electric-sockets-white-wall-indoors_169016-17480.jpg"
|
||||
mediaAnimation="slide-up"
|
||||
@@ -260,25 +165,15 @@ export default function LandingPage() {
|
||||
author="Verified Customer, Edmonton"
|
||||
avatars={[
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/smiling-young-woman-pouring-coffee-cup-hold-by-his-boyfriend-kitchen_23-2148120463.jpg",
|
||||
alt: "Customer 1",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/smiling-young-woman-pouring-coffee-cup-hold-by-his-boyfriend-kitchen_23-2148120463.jpg", alt: "Customer 1"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/woman-calling-plumber-solve-kitchen-problems_23-2150990674.jpg",
|
||||
alt: "Customer 2",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/woman-calling-plumber-solve-kitchen-problems_23-2150990674.jpg", alt: "Customer 2"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/pleased-young-male-builder-wearing-uniform-safety-helmet-showing-handshakes-gesture-purple_141793-74804.jpg",
|
||||
alt: "Customer 3",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/pleased-young-male-builder-wearing-uniform-safety-helmet-showing-handshakes-gesture-purple_141793-74804.jpg", alt: "Customer 3"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/side-view-man-working-as-plumber_23-2150746308.jpg",
|
||||
alt: "Customer 4",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/side-view-man-working-as-plumber_23-2150746308.jpg", alt: "Customer 4"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/happy-gay-couple-having-fun-kitchen_23-2147744704.jpg",
|
||||
alt: "Customer 5",
|
||||
},
|
||||
src: "http://img.b2bpic.net/free-photo/happy-gay-couple-having-fun-kitchen_23-2147744704.jpg", alt: "Customer 5"},
|
||||
]}
|
||||
ratingAnimation="blur-reveal"
|
||||
avatarsAnimation="slide-up"
|
||||
@@ -291,30 +186,15 @@ export default function LandingPage() {
|
||||
useInvertedBackground={false}
|
||||
faqs={[
|
||||
{
|
||||
id: "faq1",
|
||||
title: "🚨 Emergency Plumbing",
|
||||
content: "Fast response, phone-first troubleshooting, same-day site visits for critical failures.",
|
||||
},
|
||||
id: "faq1", title: "🚨 Emergency Plumbing", content: "Fast response, phone-first troubleshooting, same-day site visits for critical failures."},
|
||||
{
|
||||
id: "faq2",
|
||||
title: "🚽 Toilet & Bathroom",
|
||||
content: "Comprehensive service for leaks, replacements, flushing issues, and clogs.",
|
||||
},
|
||||
id: "faq2", title: "🚽 Toilet & Bathroom", content: "Comprehensive service for leaks, replacements, flushing issues, and clogs."},
|
||||
{
|
||||
id: "faq3",
|
||||
title: "🌊 Sump Pump Services",
|
||||
content: "Diagnostics, repair, and replacement to keep your basement dry.",
|
||||
},
|
||||
id: "faq3", title: "🌊 Sump Pump Services", content: "Diagnostics, repair, and replacement to keep your basement dry."},
|
||||
{
|
||||
id: "faq4",
|
||||
title: "🚰 Leak Detection",
|
||||
content: "We identify hidden leaks and pressure problems before they cause structural damage.",
|
||||
},
|
||||
id: "faq4", title: "🚰 Leak Detection", content: "We identify hidden leaks and pressure problems before they cause structural damage."},
|
||||
{
|
||||
id: "faq5",
|
||||
title: "🧰 General Plumbing",
|
||||
content: "From faucet swaps to small household fixes, we treat every job with total honesty.",
|
||||
},
|
||||
id: "faq5", title: "🧰 General Plumbing", content: "From faucet swaps to small household fixes, we treat every job with total honesty."},
|
||||
]}
|
||||
title="Service Details"
|
||||
description="Clear answers to your plumbing maintenance and repair questions."
|
||||
@@ -329,26 +209,11 @@ export default function LandingPage() {
|
||||
useInvertedBackground={true}
|
||||
metrics={[
|
||||
{
|
||||
id: "m1",
|
||||
value: "Phone-First",
|
||||
title: "Phone-First Help",
|
||||
description: "We often help you fix it BEFORE charging you.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-shows-paper-with-stay-home-phrase-sofa_74190-10319.jpg",
|
||||
},
|
||||
id: "m1", value: "Phone-First", title: "Phone-First Help", description: "We often help you fix it BEFORE charging you.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-shows-paper-with-stay-home-phrase-sofa_74190-10319.jpg"},
|
||||
{
|
||||
id: "m2",
|
||||
value: "Transparent",
|
||||
title: "Clear Explanation",
|
||||
description: "We explain everything clearly so you're never in the dark.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-smiley-woman-construction_23-2149366626.jpg",
|
||||
},
|
||||
id: "m2", value: "Transparent", title: "Clear Explanation", description: "We explain everything clearly so you're never in the dark.", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-smiley-woman-construction_23-2149366626.jpg"},
|
||||
{
|
||||
id: "m3",
|
||||
value: "Honest",
|
||||
title: "No Pressure",
|
||||
description: "We don't push unnecessary repairs. Ever.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/female-plumber-working-fix-problems-client-s-house_23-2150990731.jpg",
|
||||
},
|
||||
id: "m3", value: "Honest", title: "No Pressure", description: "We don't push unnecessary repairs. Ever.", imageSrc: "http://img.b2bpic.net/free-photo/female-plumber-working-fix-problems-client-s-house_23-2150990731.jpg"},
|
||||
]}
|
||||
title="Why Action Ace Is Different"
|
||||
description="We prioritize our customers over upsells."
|
||||
@@ -360,14 +225,7 @@ export default function LandingPage() {
|
||||
textboxLayout="default"
|
||||
useInvertedBackground={false}
|
||||
names={[
|
||||
"Edmonton Central",
|
||||
"St. Albert",
|
||||
"Sherwood Park",
|
||||
"Spruce Grove",
|
||||
"Leduc",
|
||||
"Fort Saskatchewan",
|
||||
"Beaumont",
|
||||
]}
|
||||
"Edmonton Central", "St. Albert", "Sherwood Park", "Spruce Grove", "Leduc", "Fort Saskatchewan", "Beaumont"]}
|
||||
title="Serving Edmonton & Area"
|
||||
description="Reliable plumbing care across the Edmonton metro region."
|
||||
/>
|
||||
@@ -380,20 +238,12 @@ export default function LandingPage() {
|
||||
description="Call us before it gets worse. Many issues can be diagnosed instantly over the phone."
|
||||
inputs={[
|
||||
{
|
||||
name: "name",
|
||||
type: "text",
|
||||
placeholder: "Your Name",
|
||||
},
|
||||
name: "name", type: "text", placeholder: "Your Name"},
|
||||
{
|
||||
name: "phone",
|
||||
type: "tel",
|
||||
placeholder: "Your Phone Number",
|
||||
},
|
||||
name: "phone", type: "tel", placeholder: "Your Phone Number"},
|
||||
]}
|
||||
textarea={{
|
||||
name: "message",
|
||||
placeholder: "Describe your issue (Upload a photo if possible)",
|
||||
}}
|
||||
name: "message", placeholder: "Describe your issue (Upload a photo if possible)"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/digital-tablet-with-layout-worker-clothes-top-view_169016-24423.jpg"
|
||||
buttonText="Get Help Now"
|
||||
/>
|
||||
@@ -403,50 +253,31 @@ export default function LandingPage() {
|
||||
<FooterBase
|
||||
columns={[
|
||||
{
|
||||
title: "Services",
|
||||
items: [
|
||||
title: "Services", items: [
|
||||
{
|
||||
label: "Emergency Plumbing",
|
||||
href: "#",
|
||||
},
|
||||
label: "Emergency Plumbing", href: "#"},
|
||||
{
|
||||
label: "Drain Cleaning",
|
||||
href: "#",
|
||||
},
|
||||
label: "Drain Cleaning", href: "#"},
|
||||
{
|
||||
label: "Sump Pump Repair",
|
||||
href: "#",
|
||||
},
|
||||
label: "Sump Pump Repair", href: "#"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Company",
|
||||
items: [
|
||||
title: "Company", items: [
|
||||
{
|
||||
label: "About Us",
|
||||
href: "#",
|
||||
},
|
||||
label: "About Us", href: "#"},
|
||||
{
|
||||
label: "Reviews",
|
||||
href: "#",
|
||||
},
|
||||
label: "Reviews", href: "#"},
|
||||
{
|
||||
label: "Service Area",
|
||||
href: "#",
|
||||
},
|
||||
label: "Service Area", href: "#"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Help",
|
||||
items: [
|
||||
title: "Help", items: [
|
||||
{
|
||||
label: "Privacy Policy",
|
||||
href: "#",
|
||||
},
|
||||
label: "Privacy Policy", href: "#"},
|
||||
{
|
||||
label: "Contact",
|
||||
href: "#contact",
|
||||
},
|
||||
label: "Contact", href: "#contact"},
|
||||
],
|
||||
},
|
||||
]}
|
||||
@@ -456,4 +287,4 @@ export default function LandingPage() {
|
||||
</ReactLenis>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ html {
|
||||
body {
|
||||
background-color: var(--background);
|
||||
color: var(--foreground);
|
||||
font-family: var(--font-dm-sans), sans-serif;
|
||||
font-family: var(--font-inter), sans-serif;
|
||||
position: relative;
|
||||
min-height: 100vh;
|
||||
overscroll-behavior: none;
|
||||
@@ -24,5 +24,5 @@ h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: var(--font-dm-sans), sans-serif;
|
||||
font-family: var(--font-poppins), sans-serif;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user