Merge version_1 into main #2
@@ -12,8 +12,7 @@ import { CheckCircle, Award, Zap, Users, TrendingUp, Phone } from "lucide-react"
|
||||
export default function AboutPage() {
|
||||
const footerColumns = [
|
||||
{
|
||||
title: "Services",
|
||||
items: [
|
||||
title: "Services", items: [
|
||||
{ label: "Brake Repair", href: "/services" },
|
||||
{ label: "Engine Diagnostics", href: "/services" },
|
||||
{ label: "Oil Changes", href: "/services" },
|
||||
@@ -21,8 +20,7 @@ export default function AboutPage() {
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Company",
|
||||
items: [
|
||||
title: "Company", items: [
|
||||
{ label: "About Us", href: "/about" },
|
||||
{ label: "Our Team", href: "/about" },
|
||||
{ label: "Testimonials", href: "/#testimonials" },
|
||||
@@ -30,16 +28,14 @@ export default function AboutPage() {
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Legal",
|
||||
items: [
|
||||
title: "Legal", items: [
|
||||
{ label: "Privacy Policy", href: "#" },
|
||||
{ label: "Terms of Service", href: "#" },
|
||||
{ label: "Warranty Info", href: "#" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Connect",
|
||||
items: [
|
||||
title: "Connect", items: [
|
||||
{ label: "Facebook", href: "https://facebook.com" },
|
||||
{ label: "Instagram", href: "https://instagram.com" },
|
||||
{ label: "Google Reviews", href: "https://google.com" },
|
||||
@@ -81,27 +77,22 @@ export default function AboutPage() {
|
||||
tag="Our Story"
|
||||
textboxLayout="default"
|
||||
useInvertedBackground={false}
|
||||
mediaAnimation="none"
|
||||
bulletPoints={[
|
||||
{
|
||||
title: "Honest Diagnostics",
|
||||
description:
|
||||
"We provide transparent assessments without upselling unnecessary services. Your trust is our foundation.",
|
||||
icon: CheckCircle,
|
||||
title: "Honest Diagnostics", description:
|
||||
"We provide transparent assessments without upselling unnecessary services. Your trust is our foundation.", icon: CheckCircle,
|
||||
},
|
||||
{
|
||||
title: "Experienced Mechanics",
|
||||
description:
|
||||
"Our certified technicians bring years of expertise to every repair, ensuring quality workmanship.",
|
||||
icon: Award,
|
||||
title: "Experienced Mechanics", description:
|
||||
"Our certified technicians bring years of expertise to every repair, ensuring quality workmanship.", icon: Award,
|
||||
},
|
||||
{
|
||||
title: "Fast Turnaround",
|
||||
description:
|
||||
"We respect your time. Most repairs are completed the same day or next business day.",
|
||||
icon: Zap,
|
||||
title: "Fast Turnaround", description:
|
||||
"We respect your time. Most repairs are completed the same day or next business day.", icon: Zap,
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/male-female-mechanics-working-shop-car_23-2150170017.jpg?_wi=3"
|
||||
imageSrc="http://img.b2bpic.net/free-photo/male-female-mechanics-working-shop-car_23-2150170017.jpg"
|
||||
imageAlt="Joe Complete Auto Repair garage interior"
|
||||
imagePosition="right"
|
||||
buttons={[{ text: "View Services", href: "/services" }]}
|
||||
@@ -119,25 +110,13 @@ export default function AboutPage() {
|
||||
gridVariant="uniform-all-items-equal"
|
||||
metrics={[
|
||||
{
|
||||
id: "1",
|
||||
value: "500+",
|
||||
title: "Happy Customers",
|
||||
description: "Trusted by local vehicle owners for quality repairs",
|
||||
icon: Users,
|
||||
id: "1", value: "500+", title: "Happy Customers", description: "Trusted by local vehicle owners for quality repairs", icon: Users,
|
||||
},
|
||||
{
|
||||
id: "2",
|
||||
value: "15+",
|
||||
title: "Years Experience",
|
||||
description: "Decades of combined automotive expertise",
|
||||
icon: Award,
|
||||
id: "2", value: "15+", title: "Years Experience", description: "Decades of combined automotive expertise", icon: Award,
|
||||
},
|
||||
{
|
||||
id: "3",
|
||||
value: "98%",
|
||||
title: "Satisfaction Rate",
|
||||
description: "Commitment to excellence and customer care",
|
||||
icon: TrendingUp,
|
||||
id: "3", value: "98%", title: "Satisfaction Rate", description: "Commitment to excellence and customer care", icon: TrendingUp,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
145
src/app/page.tsx
145
src/app/page.tsx
@@ -23,8 +23,7 @@ export default function HomePage() {
|
||||
|
||||
const footerColumns = [
|
||||
{
|
||||
title: "Services",
|
||||
items: [
|
||||
title: "Services", items: [
|
||||
{ label: "Brake Repair", href: "/services" },
|
||||
{ label: "Engine Diagnostics", href: "/services" },
|
||||
{ label: "Oil Changes", href: "/services" },
|
||||
@@ -32,8 +31,7 @@ export default function HomePage() {
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Company",
|
||||
items: [
|
||||
title: "Company", items: [
|
||||
{ label: "About Us", href: "/about" },
|
||||
{ label: "Our Team", href: "/about" },
|
||||
{ label: "Testimonials", href: "#testimonials" },
|
||||
@@ -41,16 +39,14 @@ export default function HomePage() {
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Legal",
|
||||
items: [
|
||||
title: "Legal", items: [
|
||||
{ label: "Privacy Policy", href: "#" },
|
||||
{ label: "Terms of Service", href: "#" },
|
||||
{ label: "Warranty Info", href: "#" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Connect",
|
||||
items: [
|
||||
title: "Connect", items: [
|
||||
{ label: "Facebook", href: "https://facebook.com" },
|
||||
{ label: "Instagram", href: "https://instagram.com" },
|
||||
{ label: "Google Reviews", href: "https://google.com" },
|
||||
@@ -96,9 +92,7 @@ export default function HomePage() {
|
||||
slides={[
|
||||
{
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/male-female-mechanics-working-shop-car_23-2150170017.jpg?_wi=1",
|
||||
imageAlt: "Modern auto repair garage with diagnostic equipment",
|
||||
},
|
||||
"http://img.b2bpic.net/free-photo/male-female-mechanics-working-shop-car_23-2150170017.jpg", imageAlt: "Modern auto repair garage with diagnostic equipment"},
|
||||
]}
|
||||
autoplayDelay={5000}
|
||||
showDimOverlay={true}
|
||||
@@ -112,27 +106,22 @@ export default function HomePage() {
|
||||
tag="Our Story"
|
||||
textboxLayout="default"
|
||||
useInvertedBackground={false}
|
||||
mediaAnimation="none"
|
||||
bulletPoints={[
|
||||
{
|
||||
title: "Honest Diagnostics",
|
||||
description:
|
||||
"We provide transparent assessments without upselling unnecessary services. Your trust is our foundation.",
|
||||
icon: CheckCircle,
|
||||
title: "Honest Diagnostics", description:
|
||||
"We provide transparent assessments without upselling unnecessary services. Your trust is our foundation.", icon: CheckCircle,
|
||||
},
|
||||
{
|
||||
title: "Experienced Mechanics",
|
||||
description:
|
||||
"Our certified technicians bring years of expertise to every repair, ensuring quality workmanship.",
|
||||
icon: Award,
|
||||
title: "Experienced Mechanics", description:
|
||||
"Our certified technicians bring years of expertise to every repair, ensuring quality workmanship.", icon: Award,
|
||||
},
|
||||
{
|
||||
title: "Fast Turnaround",
|
||||
description:
|
||||
"We respect your time. Most repairs are completed the same day or next business day.",
|
||||
icon: Zap,
|
||||
title: "Fast Turnaround", description:
|
||||
"We respect your time. Most repairs are completed the same day or next business day.", icon: Zap,
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/male-female-mechanics-working-shop-car_23-2150170017.jpg?_wi=2"
|
||||
imageSrc="http://img.b2bpic.net/free-photo/male-female-mechanics-working-shop-car_23-2150170017.jpg"
|
||||
imageAlt="Joe Complete Auto Repair garage interior"
|
||||
imagePosition="right"
|
||||
buttons={[{ text: "View Services", href: "/services" }]}
|
||||
@@ -150,58 +139,34 @@ export default function HomePage() {
|
||||
features={[
|
||||
{
|
||||
id: 1,
|
||||
title: "Brake Repair",
|
||||
description:
|
||||
"Professional brake pad replacement, rotor resurfacing, and complete brake system inspections to ensure your safety on every drive.",
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/low-angle-woman-working-service_23-2150171272.jpg?_wi=1",
|
||||
imageAlt: "Brake repair service",
|
||||
},
|
||||
title: "Brake Repair", description:
|
||||
"Professional brake pad replacement, rotor resurfacing, and complete brake system inspections to ensure your safety on every drive.", imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/low-angle-woman-working-service_23-2150171272.jpg", imageAlt: "Brake repair service"},
|
||||
{
|
||||
id: 2,
|
||||
title: "Engine Diagnostics",
|
||||
description:
|
||||
"Advanced computer diagnostic scanning to identify engine issues quickly and accurately, saving you time and money.",
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/muscular-car-service-worker-repairing-vehicle_146671-19610.jpg?_wi=1",
|
||||
imageAlt: "Engine diagnostic equipment",
|
||||
},
|
||||
title: "Engine Diagnostics", description:
|
||||
"Advanced computer diagnostic scanning to identify engine issues quickly and accurately, saving you time and money.", imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/muscular-car-service-worker-repairing-vehicle_146671-19610.jpg", imageAlt: "Engine diagnostic equipment"},
|
||||
{
|
||||
id: 3,
|
||||
title: "Oil Changes",
|
||||
description:
|
||||
"Regular oil changes with quality filters keep your engine healthy. We use OEM and premium synthetic options.",
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/mechanic-using-laptop_1170-1148.jpg?_wi=1",
|
||||
imageAlt: "Oil change service",
|
||||
},
|
||||
title: "Oil Changes", description:
|
||||
"Regular oil changes with quality filters keep your engine healthy. We use OEM and premium synthetic options.", imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/mechanic-using-laptop_1170-1148.jpg", imageAlt: "Oil change service"},
|
||||
{
|
||||
id: 4,
|
||||
title: "Tire Services",
|
||||
description:
|
||||
"Tire rotation, balancing, alignment, and replacement. We stock quality tires for all vehicle types.",
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/closeup-photoshoot-process-tyre-balancing-dark-auto-service_613910-17076.jpg?_wi=1",
|
||||
imageAlt: "Tire services and maintenance",
|
||||
},
|
||||
title: "Tire Services", description:
|
||||
"Tire rotation, balancing, alignment, and replacement. We stock quality tires for all vehicle types.", imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/closeup-photoshoot-process-tyre-balancing-dark-auto-service_613910-17076.jpg", imageAlt: "Tire services and maintenance"},
|
||||
{
|
||||
id: 5,
|
||||
title: "Suspension Repair",
|
||||
description:
|
||||
"Shock absorber replacement, strut services, and suspension alignment for a smooth, safe ride.",
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/male-female-mechanics-working-shop-car_23-2150170027.jpg?_wi=1",
|
||||
imageAlt: "Suspension system repair",
|
||||
},
|
||||
title: "Suspension Repair", description:
|
||||
"Shock absorber replacement, strut services, and suspension alignment for a smooth, safe ride.", imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/male-female-mechanics-working-shop-car_23-2150170027.jpg", imageAlt: "Suspension system repair"},
|
||||
{
|
||||
id: 6,
|
||||
title: "General Maintenance",
|
||||
description:
|
||||
"Preventive maintenance including fluid checks, belt inspections, and scheduled services to extend your vehicle's lifespan.",
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/mechanic-repairing-engine-part_1170-1695.jpg?_wi=1",
|
||||
imageAlt: "General auto maintenance",
|
||||
},
|
||||
title: "General Maintenance", description:
|
||||
"Preventive maintenance including fluid checks, belt inspections, and scheduled services to extend your vehicle's lifespan.", imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/mechanic-repairing-engine-part_1170-1695.jpg", imageAlt: "General auto maintenance"},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
@@ -217,25 +182,13 @@ export default function HomePage() {
|
||||
gridVariant="uniform-all-items-equal"
|
||||
metrics={[
|
||||
{
|
||||
id: "1",
|
||||
value: "500+",
|
||||
title: "Happy Customers",
|
||||
description: "Trusted by local vehicle owners for quality repairs",
|
||||
icon: Users,
|
||||
id: "1", value: "500+", title: "Happy Customers", description: "Trusted by local vehicle owners for quality repairs", icon: Users,
|
||||
},
|
||||
{
|
||||
id: "2",
|
||||
value: "15+",
|
||||
title: "Years Experience",
|
||||
description: "Decades of combined automotive expertise",
|
||||
icon: Award,
|
||||
id: "2", value: "15+", title: "Years Experience", description: "Decades of combined automotive expertise", icon: Award,
|
||||
},
|
||||
{
|
||||
id: "3",
|
||||
value: "98%",
|
||||
title: "Satisfaction Rate",
|
||||
description: "Commitment to excellence and customer care",
|
||||
icon: TrendingUp,
|
||||
id: "3", value: "98%", title: "Satisfaction Rate", description: "Commitment to excellence and customer care", icon: TrendingUp,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -251,35 +204,17 @@ export default function HomePage() {
|
||||
animationType="slide-up"
|
||||
testimonials={[
|
||||
{
|
||||
id: "1",
|
||||
name: "Maria Gonzalez",
|
||||
role: "Local Business Owner",
|
||||
company: "El Segundo",
|
||||
rating: 5,
|
||||
id: "1", name: "Maria Gonzalez", role: "Local Business Owner", company: "El Segundo", rating: 5,
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/portrait-waitress-standing-with-disposable-coffee-cup_107420-12313.jpg?_wi=1",
|
||||
imageAlt: "happy customer portrait professional headshot",
|
||||
},
|
||||
"http://img.b2bpic.net/free-photo/portrait-waitress-standing-with-disposable-coffee-cup_107420-12313.jpg", imageAlt: "happy customer portrait professional headshot"},
|
||||
{
|
||||
id: "2",
|
||||
name: "David Chen",
|
||||
role: "Fleet Manager",
|
||||
company: "Transportation Services",
|
||||
rating: 5,
|
||||
id: "2", name: "David Chen", role: "Fleet Manager", company: "Transportation Services", rating: 5,
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/smiling-business-woman-looking-up-copy-space_1262-3088.jpg?_wi=1",
|
||||
imageAlt: "professional woman headshot portrait confident",
|
||||
},
|
||||
"http://img.b2bpic.net/free-photo/smiling-business-woman-looking-up-copy-space_1262-3088.jpg", imageAlt: "professional woman headshot portrait confident"},
|
||||
{
|
||||
id: "3",
|
||||
name: "Jessica Miller",
|
||||
role: "Real Estate Agent",
|
||||
company: "El Segundo",
|
||||
rating: 5,
|
||||
id: "3", name: "Jessica Miller", role: "Real Estate Agent", company: "El Segundo", rating: 5,
|
||||
imageSrc:
|
||||
"http://img.b2bpic.net/free-photo/cheerful-young-man-posing-isolated-grey_171337-10579.jpg?_wi=1",
|
||||
imageAlt: "male professional headshot portrait",
|
||||
},
|
||||
"http://img.b2bpic.net/free-photo/cheerful-young-man-posing-isolated-grey_171337-10579.jpg", imageAlt: "male professional headshot portrait"},
|
||||
]}
|
||||
kpiItems={[
|
||||
{ value: "98%", label: "Customer Satisfaction" },
|
||||
|
||||
@@ -1,51 +1,64 @@
|
||||
"use client";
|
||||
|
||||
import { memo } from "react";
|
||||
import useSvgTextLogo from "./useSvgTextLogo";
|
||||
import { cls } from "@/lib/utils";
|
||||
import React, { useMemo } from 'react';
|
||||
|
||||
interface SvgTextLogoProps {
|
||||
logoText: string;
|
||||
adjustHeightFactor?: number;
|
||||
verticalAlign?: "top" | "center";
|
||||
text: string;
|
||||
className?: string;
|
||||
textClassName?: string;
|
||||
fontSize?: number;
|
||||
fontWeight?: number | string;
|
||||
letterSpacing?: number;
|
||||
dominantBaseline?: 'auto' | 'text-bottom' | 'alphabetic' | 'ideographic' | 'middle' | 'central' | 'mathematical' | 'hanging';
|
||||
textAnchor?: 'start' | 'middle' | 'end';
|
||||
fill?: string;
|
||||
fillOpacity?: number;
|
||||
textDecoration?: string;
|
||||
fontFamily?: string;
|
||||
}
|
||||
|
||||
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,
|
||||
className = '',
|
||||
textClassName = '',
|
||||
fontSize = 48,
|
||||
fontWeight = 700,
|
||||
letterSpacing = 2,
|
||||
dominantBaseline = 'middle',
|
||||
textAnchor = 'middle',
|
||||
fill = 'currentColor',
|
||||
fillOpacity = 1,
|
||||
textDecoration = 'none',
|
||||
fontFamily = 'inherit',
|
||||
}) => {
|
||||
const viewBox = useMemo(() => {
|
||||
const estimatedWidth = text.length * fontSize * 0.6 + letterSpacing * (text.length - 1);
|
||||
return `0 0 ${Math.ceil(estimatedWidth)} ${Math.ceil(fontSize * 1.5)}`;
|
||||
}, [text, fontSize, letterSpacing]);
|
||||
|
||||
return (
|
||||
<svg
|
||||
ref={svgRef}
|
||||
viewBox={viewBox}
|
||||
className={cls("w-full", className)}
|
||||
style={{ aspectRatio: aspectRatio }}
|
||||
preserveAspectRatio="none"
|
||||
role="img"
|
||||
aria-label={`${logoText} logo`}
|
||||
className={className}
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<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}
|
||||
fontWeight={fontWeight}
|
||||
letterSpacing={letterSpacing}
|
||||
dominantBaseline={dominantBaseline}
|
||||
textAnchor={textAnchor}
|
||||
fill={fill}
|
||||
fillOpacity={fillOpacity}
|
||||
textDecoration={textDecoration}
|
||||
fontFamily={fontFamily}
|
||||
className={textClassName}
|
||||
>
|
||||
{logoText}
|
||||
{text}
|
||||
</text>
|
||||
</svg>
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
SvgTextLogo.displayName = "SvgTextLogo";
|
||||
|
||||
export default SvgTextLogo;
|
||||
export default SvgTextLogo;
|
||||
Reference in New Issue
Block a user