diff --git a/app/(root)/(routes)/(home)/components/button-row.tsx b/app/(root)/(routes)/(home)/components/button-row.tsx index 3167c1a..d4b12b7 100644 --- a/app/(root)/(routes)/(home)/components/button-row.tsx +++ b/app/(root)/(routes)/(home)/components/button-row.tsx @@ -1,46 +1,5 @@ -"use client"; - -import Link from "next/link"; -import { motion } from "framer-motion"; -import React from "react"; - -const ButtonRow = () => { - const buttonVariants = { - hidden: { opacity: 0, y: 20 }, - visible: { opacity: 1, y: 0, transition: { duration: 0.5, ease: "easeOut" } }, - hover: { scale: 1.1, transition: { duration: 0.2, ease: "easeInOut" } }, - tap: { scale: 0.95 }, - }; - - return ( -
- {[ - "/services/exterior-cleaning", - "/services/commercial-services", - "/services/holiday-lighting", - ].map((href, index) => ( - - - {href - .replace("/services/", "") - .replace(/-/g, " ") - .replace(/\b\w/g, (c) => c.toUpperCase())} - - - ))} -
- ); -}; - -export default ButtonRow; +// This component has been removed as per the improvement plan +// Navigation is now handled by the main header component +export default function ButtonRow() { + return null; +} \ No newline at end of file diff --git a/app/(root)/(routes)/(home)/components/social-proof.tsx b/app/(root)/(routes)/(home)/components/social-proof.tsx index 27c8bb4..d6adaff 100644 --- a/app/(root)/(routes)/(home)/components/social-proof.tsx +++ b/app/(root)/(routes)/(home)/components/social-proof.tsx @@ -4,7 +4,6 @@ import { motion } from "framer-motion"; import Script from "next/script"; import React from "react"; import { useRouter } from "next/navigation"; -import { Button } from "@mui/material"; const SocialProof = () => { const router = useRouter(); @@ -12,7 +11,7 @@ const SocialProof = () => { return ( // TODO: UPGRADE TO BASIC PLAN FOR ELFSIGHT TO TAKE OFF ELFSIGHT BRANDING { data-elfsight-app-lazy > - + ); }; diff --git a/app/(root)/(routes)/(home)/page.tsx b/app/(root)/(routes)/(home)/page.tsx index 6ac36a8..f7890ec 100644 --- a/app/(root)/(routes)/(home)/page.tsx +++ b/app/(root)/(routes)/(home)/page.tsx @@ -1,78 +1,42 @@ -import React from "react"; - +import type { Metadata } from "next"; +import HeroSection from "@/components/home/hero-section"; +import TrustBar from "@/components/home/trust-bar"; +import ServicesOverview from "@/components/home/services-overview"; +import HowItWorks from "@/components/home/how-it-works"; +import BeforeAfterShowcase from "@/components/home/before-after-showcase"; +import FeaturesGrid from "@/components/home/features-grid"; +import CTASection from "@/components/home/cta-section"; import SocialProof from "./components/social-proof"; -import ProductRow from "../../../../components/products/product-row"; -import { Metadata } from "next"; -import ContactFormOverlay from "../../../../components/forms/overlay"; -import SplashPic from "@/public/assets/imgs/action-2.jpg"; -import Splash from "../../../../components/splash"; -import ButtonRow from "./components/button-row"; export const metadata: Metadata = { - title: "Brite Exterior Cleaning Services | Clean Your Property with Experts", + title: "Brite Exterior Cleaning Services | Transform Your Property", description: - "Brite offers professional exterior cleaning services to make your home or business shine. Explore our services and get a free estimate today.", + "Premium exterior cleaning services for homes and businesses. Professional pressure washing, window cleaning, and holiday lighting in Charlotte, NC. Get your free estimate today!", openGraph: { - title: "Brite Exterior Cleaning Services", + title: "Brite Exterior Cleaning Services | Transform Your Property", description: - "Brite offers professional exterior cleaning services to make your home or business shine.", + "Premium exterior cleaning services for homes and businesses. Professional, reliable, and worry-free maintenance solutions.", url: "https://briteclt.com", }, twitter: { card: "summary_large_image", - title: "Brite Exterior Cleaning Services", + title: "Brite Exterior Cleaning Services | Transform Your Property", description: - "Brite offers professional exterior cleaning services to make your home or business shine.", + "Premium exterior cleaning services for homes and businesses. Professional, reliable, and worry-free maintenance solutions.", }, }; export default async function HomePage() { return ( -
- -
- -
-
- {/* Logo */} - {/*
- brite-logo -
*/} -
- -
- {/* Logo */} - {/*
- brite-logo -
*/} -
-
-
- -
- - - - {/* */} -
+
+ + + + + + + + +
); -} +} \ No newline at end of file diff --git a/app/(root)/(routes)/blog/[slug]/page.tsx b/app/(root)/(routes)/blog/[slug]/page.tsx index e31f9fd..73d6615 100644 --- a/app/(root)/(routes)/blog/[slug]/page.tsx +++ b/app/(root)/(routes)/blog/[slug]/page.tsx @@ -69,7 +69,7 @@ export default async function BlogPageBySlug({ params }: { params: Promise<{ slu : "Unknown Date"; return ( -
+

{blog.title}

diff --git a/app/(root)/(routes)/blog/components/blog-card.tsx b/app/(root)/(routes)/blog/components/blog-card.tsx index 06037b6..35e99af 100644 --- a/app/(root)/(routes)/blog/components/blog-card.tsx +++ b/app/(root)/(routes)/blog/components/blog-card.tsx @@ -1,9 +1,9 @@ -import { Blog } from "@/sanity.types"; +import type { Blog } from "@/sanity.types"; import { imageUrl } from "@/sanity/lib/image-url"; import Image from "next/image"; import Link from "next/link"; import React from "react"; -import UserDefaultImage from "@/public/assets/icons/user (1).png"; // Make sure to import the default image +import { FaCalendarAlt, FaClock } from "react-icons/fa"; interface IBlogCardProps { blog: Blog; @@ -12,10 +12,6 @@ interface IBlogCardProps { const BlogCard = (props: IBlogCardProps) => { const { blog } = props; - // Handle author image and name with fallback options - // const authorImageUrl = blog.author!._ref ? imageUrl(blog.author!._ref).url() : UserDefaultImage; // Use default image if no image exists - // const authorName = blog.author!._ref || "Unknown Author"; - // Format the published date const publishedDate = new Intl.DateTimeFormat("en-US", { year: "numeric", @@ -25,44 +21,57 @@ const BlogCard = (props: IBlogCardProps) => { // Truncate the excerpt for a cleaner look const truncatedExcerpt = - blog.excerpt!.length > 100 ? `${blog.excerpt!.slice(0, 100)}...` : blog.excerpt; + blog.excerpt && blog.excerpt.length > 120 + ? `${blog.excerpt.slice(0, 120)}...` + : blog.excerpt; return ( - -
+ +
{/* Blog image */} - {blog.title -
+
+ {blog.title +
+
+ +
{/* Blog title */} -

{blog.title}

- {/* Author and published date */} -
- {/* {authorName} */} - - {/*

{authorName}

*/} -

{publishedDate}

-
+

+ {blog.title} +

+ + {/* Published date */} +
+
+ + {publishedDate} +
+ {/* Truncated excerpt */} -

{truncatedExcerpt}

+

+ {truncatedExcerpt} +

+ {/* Read more link */} -

Read More →

+
+ + Read More + + +
-
+
); }; -export default BlogCard; +export default BlogCard; \ No newline at end of file diff --git a/app/(root)/(routes)/blog/page.tsx b/app/(root)/(routes)/blog/page.tsx index 230aec2..795beea 100644 --- a/app/(root)/(routes)/blog/page.tsx +++ b/app/(root)/(routes)/blog/page.tsx @@ -1,6 +1,6 @@ import { getAllBlogs } from "@/sanity/lib/blogs/getAllBlogs"; import BlogCard from "./components/blog-card"; -import { Metadata } from "next"; +import type { Metadata } from "next"; export const metadata: Metadata = { title: "Brite Exterior Cleaning Blog | Tips, News, and Updates", @@ -28,17 +28,34 @@ export default async function BlogPage() { } if (blogs.length < 1) { - return
No blogs posted.
; + return ( +
+
+

No blog posts available yet.

+

Check back soon for expert tips and insights!

+
+
+ ); } return ( -
-

Latest Blog Posts

-
- {blogs.map((blog: any) => ( - - ))} +
+ {/* Hero Section */} +
+

Our Blog

+

+ Expert tips, industry insights, and the latest news from Brite Exterior Cleaning +

+
+ + {/* Blog Grid */} +
+
+ {blogs.map((blog: any) => ( + + ))} +
); -} +} \ No newline at end of file diff --git a/app/(root)/(routes)/faqs/components/container.tsx b/app/(root)/(routes)/faqs/components/container.tsx index 23520d9..5e4eecd 100644 --- a/app/(root)/(routes)/faqs/components/container.tsx +++ b/app/(root)/(routes)/faqs/components/container.tsx @@ -8,9 +8,14 @@ interface IFAQContainerProps { const FAQContainer = (props: IFAQContainerProps) => { return ( -
-
{props.title}
- {props.children} +
+
+
+

{props.title}

+
+
+ {props.children} +
); }; diff --git a/app/(root)/(routes)/faqs/components/item.tsx b/app/(root)/(routes)/faqs/components/item.tsx index c9b3883..79e3484 100644 --- a/app/(root)/(routes)/faqs/components/item.tsx +++ b/app/(root)/(routes)/faqs/components/item.tsx @@ -7,9 +7,9 @@ interface IFAQItemProps { const FAQItem = (props: IFAQItemProps) => { return ( -
-
{props.question}
-

{props.answer}

+
+
{props.question}
+

{props.answer}

); }; diff --git a/app/(root)/(routes)/faqs/components/sidebar-nav.tsx b/app/(root)/(routes)/faqs/components/sidebar-nav.tsx index d37dc9d..597e0bc 100644 --- a/app/(root)/(routes)/faqs/components/sidebar-nav.tsx +++ b/app/(root)/(routes)/faqs/components/sidebar-nav.tsx @@ -59,42 +59,41 @@ const FAQSidebarNav = (props: IFAQSidebarNavProps) => { return (