Merge version_1 into main #2

Merged
bender merged 2 commits from version_1 into main 2026-03-11 23:09:15 +00:00
2 changed files with 39 additions and 51 deletions

View File

@@ -32,7 +32,7 @@ export default function LandingPage() {
brandName="ServicePro"
navItems={[
{ name: "Services", id: "services" },
{ name: "Why Us", id: "about" },
{ name: "Why Us", id: "trust" },
{ name: "Testimonials", id: "testimonials" },
{ name: "Pricing", id: "pricing" },
{ name: "Contact", id: "contact" }
@@ -47,10 +47,11 @@ export default function LandingPage() {
<HeroBillboardTestimonial
title="Reliable Local Service You Can Trust"
description="Fast, professional service for homes and businesses in your area. Licensed, insured, and locally owned. Available 24/7 for emergencies."
background={{ variant: "glowing-orb" }}
tag="Same-Day Service Available"
tagIcon={Zap}
tagAnimation="slide-up"
imageSrc="http://img.b2bpic.net/free-photo/smiling-executives-having-meeting-around-table_1098-1893.jpg?_wi=1"
imageSrc="http://img.b2bpic.net/free-photo/smiling-executives-having-meeting-around-table_1098-1893.jpg"
imageAlt="Professional service team ready to help"
mediaAnimation="none"
useInvertedBackground={false}
@@ -73,14 +74,14 @@ export default function LandingPage() {
/>
</div>
<div id="about" data-section="about">
<div id="trust" data-section="trust">
<MediaAbout
title="Why Local Families Trust Us"
description="Serving the community with integrity since 1998. We're licensed, insured, and dedicated to your complete satisfaction. Our team of experienced professionals is here to handle all your service needs with respect and excellence."
tag="20+ Years of Excellence"
tagIcon={Award}
tagAnimation="slide-up"
imageSrc="http://img.b2bpic.net/free-photo/smiling-executives-having-meeting-around-table_1098-1893.jpg?_wi=2"
imageSrc="http://img.b2bpic.net/free-photo/smiling-executives-having-meeting-around-table_1098-1893.jpg"
imageAlt="Trusted local service professionals"
useInvertedBackground={true}
buttons={[{ text: "Learn More", href: "#services" }]}
@@ -112,10 +113,10 @@ export default function LandingPage() {
<ProductCardThree
products={[
{
id: "1", name: "Plumbing & Water Service", price: "Starting at $149", imageSrc: "http://img.b2bpic.net/free-photo/high-angle-woman-working-as-plumber_23-2150746386.jpg?_wi=1", imageAlt: "Professional plumbing service"
id: "1", name: "Plumbing & Water Service", price: "Starting at $149", imageSrc: "http://img.b2bpic.net/free-photo/high-angle-woman-working-as-plumber_23-2150746386.jpg", imageAlt: "Professional plumbing service"
},
{
id: "2", name: "Electrical & Wiring", price: "Starting at $159", imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-repairs-switchboard-with-screwdriver-switchboard-repair_169016-71484.jpg?_wi=1", imageAlt: "Licensed electrical work"
id: "2", name: "Electrical & Wiring", price: "Starting at $159", imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-repairs-switchboard-with-screwdriver-switchboard-repair_169016-71484.jpg", imageAlt: "Licensed electrical work"
},
{
id: "3", name: "HVAC & Climate Control", price: "Starting at $189", imageSrc: "http://img.b2bpic.net/free-photo/mechanic-calibrating-pressure-device_482257-92757.jpg", imageAlt: "Professional HVAC service"
@@ -124,10 +125,10 @@ export default function LandingPage() {
id: "4", name: "Home Cleaning & Maintenance", price: "Starting at $129", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-men-cleaning-office_23-2149345515.jpg", imageAlt: "Professional cleaning service"
},
{
id: "5", name: "Emergency Repairs", price: "24/7 Available", imageSrc: "http://img.b2bpic.net/free-photo/smiling-executives-having-meeting-around-table_1098-1893.jpg?_wi=3", imageAlt: "Emergency service response"
id: "5", name: "Emergency Repairs", price: "24/7 Available", imageSrc: "http://img.b2bpic.net/free-photo/smiling-executives-having-meeting-around-table_1098-1893.jpg", imageAlt: "Emergency service response"
},
{
id: "6", name: "Preventive Maintenance", price: "Custom Plans", imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-repairs-switchboard-with-screwdriver-switchboard-repair_169016-71484.jpg?_wi=2", imageAlt: "Maintenance packages"
id: "6", name: "Preventive Maintenance", price: "Custom Plans", imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-repairs-switchboard-with-screwdriver-switchboard-repair_169016-71484.jpg", imageAlt: "Maintenance packages"
}
]}
title="Our Core Services"
@@ -184,19 +185,19 @@ export default function LandingPage() {
<PricingCardNine
plans={[
{
id: "basic", title: "Standard Service Call", price: "$149", period: "+ parts & materials", imageSrc: "http://img.b2bpic.net/free-photo/high-angle-woman-working-as-plumber_23-2150746386.jpg?_wi=2", imageAlt: "Standard service call", features: [
id: "basic", title: "Standard Service Call", price: "$149", period: "+ parts & materials", imageSrc: "http://img.b2bpic.net/free-photo/high-angle-woman-working-as-plumber_23-2150746386.jpg", imageAlt: "Standard service call", features: [
"Professional diagnosis and consultation", "Same-day service available", "No trip charge if we fix it", "Full warranty on repairs"
],
button: { text: "Get a Quote", href: "#contact" }
},
{
id: "pro", title: "Priority Service", price: "$89", period: "/month", imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-repairs-switchboard-with-screwdriver-switchboard-repair_169016-71484.jpg?_wi=3", imageAlt: "Priority service plan", features: [
id: "pro", title: "Priority Service", price: "$89", period: "/month", imageSrc: "http://img.b2bpic.net/free-photo/woman-electrician-repairs-switchboard-with-screwdriver-switchboard-repair_169016-71484.jpg", imageAlt: "Priority service plan", features: [
"Monthly maintenance checks", "Priority emergency response", "Discounted rates on repairs", "24/7 direct phone line"
],
button: { text: "Start Today", href: "#contact" }
},
{
id: "enterprise", title: "Commercial Package", price: "Custom", period: "tailored to your needs", imageSrc: "http://img.b2bpic.net/free-photo/smiling-executives-having-meeting-around-table_1098-1893.jpg?_wi=4", imageAlt: "Commercial service package", features: [
id: "enterprise", title: "Commercial Package", price: "Custom", period: "tailored to your needs", imageSrc: "http://img.b2bpic.net/free-photo/smiling-executives-having-meeting-around-table_1098-1893.jpg", imageAlt: "Commercial service package", features: [
"Dedicated account manager", "Scheduled preventive maintenance", "Emergency service priority", "Volume discounts available"
],
button: { text: "Contact Us", href: "#contact" }
@@ -251,7 +252,7 @@ export default function LandingPage() {
{
title: "Quick Links", items: [
{ label: "Services", href: "#services" },
{ label: "About Us", href: "#about" },
{ label: "About Us", href: "#trust" },
{ label: "Testimonials", href: "#testimonials" },
{ label: "Pricing", href: "#pricing" }
]

View File

@@ -1,51 +1,38 @@
"use client";
import React, { SVGAttributes } from 'react';
import { memo } from "react";
import useSvgTextLogo from "./useSvgTextLogo";
import { cls } from "@/lib/utils";
interface SvgTextLogoProps {
logoText: string;
adjustHeightFactor?: number;
verticalAlign?: "top" | "center";
className?: string;
interface SvgTextLogoProps extends SVGAttributes<SVGSVGElement> {
text?: string;
fontSize?: number;
fill?: string;
dominantBaseline?: 'auto' | 'text-bottom' | 'middle' | 'central' | 'text-top' | 'mathematical' | 'hanging';
}
const SvgTextLogo = memo<SvgTextLogoProps>(function SvgTextLogo({
logoText,
adjustHeightFactor,
verticalAlign = "top",
className = "",
}) {
const { svgRef, textRef, viewBox, aspectRatio } = useSvgTextLogo(logoText, false, adjustHeightFactor);
const SvgTextLogo: React.FC<SvgTextLogoProps> = ({
text = 'Logo',
fontSize = 24,
fill = 'currentColor',
dominantBaseline = 'middle',
...props
}) => {
return (
<svg
ref={svgRef}
viewBox={viewBox}
className={cls("w-full", className)}
style={{ aspectRatio: aspectRatio }}
preserveAspectRatio="none"
role="img"
aria-label={`${logoText} logo`}
viewBox="0 0 200 50"
width="200"
height="50"
{...props}
>
<text
ref={textRef}
x="0"
y={verticalAlign === "center" ? "50%" : "0"}
className="font-bold fill-current"
style={{
fontSize: "20px",
letterSpacing: "-0.02em",
dominantBaseline: verticalAlign === "center" ? "middle" : "text-before-edge"
}}
x="50%"
y="50%"
fontSize={fontSize}
fill={fill}
textAnchor="middle"
dominantBaseline={dominantBaseline}
>
{logoText}
{text}
</text>
</svg>
);
});
};
SvgTextLogo.displayName = "SvgTextLogo";
export default SvgTextLogo;
export default SvgTextLogo;