Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cf88db674c | |||
| 012cbee2ab | |||
| 23e14db1db | |||
| cf045f2fe3 | |||
| 4f81d84966 | |||
| 4d96ffda9f | |||
| f6f4a060cc | |||
| 1e2b792f1b | |||
| 6fb7e95ae6 | |||
| 43be323bc1 | |||
| 505d29e43d | |||
| b8aae73ccd | |||
| c5bcaeb4d6 | |||
| 1d9de79804 | |||
| c6acc030b4 | |||
| 43b744834f | |||
| d53df558af | |||
| d83cd58912 | |||
| 51409cfa5f | |||
| f6382e718d | |||
| 07f949a180 | |||
| 79536575ea | |||
| 3f86d6b8ae | |||
| 851a0d43c7 | |||
| 52f5a27684 | |||
| e74b4c6011 | |||
| 07bf03da0f | |||
| 62654db3c3 | |||
| e634498ff1 | |||
| f2644003d7 | |||
| 5eb0efde97 | |||
| 49f980aac0 |
@@ -4,7 +4,6 @@ import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ReactLenis from "lenis/react";
|
||||
import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered';
|
||||
import ProductCardTwo from '@/components/sections/product/ProductCardTwo';
|
||||
import TestimonialCardSixteen from '@/components/sections/testimonial/TestimonialCardSixteen';
|
||||
import FooterBase from '@/components/sections/footer/FooterBase';
|
||||
|
||||
export default function GalleryPage() {
|
||||
@@ -30,7 +29,8 @@ export default function GalleryPage() {
|
||||
{ name: "Gallery", id: "/gallery" },
|
||||
{ name: "Contact", id: "/contact" },
|
||||
]}
|
||||
button={{ text: "Get a Free Quote", href: "/contact" }}
|
||||
button={{
|
||||
text: "Get a Free Quote", href: "/contact" }}
|
||||
logoSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780963238289-ovhlz3j6.png"
|
||||
logoAlt="FloorCraft Logo"
|
||||
brandName="FloorCraft"
|
||||
@@ -48,36 +48,15 @@ export default function GalleryPage() {
|
||||
{ id: "project-1", brand: "Hardwood", name: "Modern Kitchen Refinish", price: "", rating: 5, reviewCount: "25", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780963238290-d9zo6f2r.png", imageAlt: "Modern kitchen with newly refinished hardwood floors" },
|
||||
{ id: "project-2", brand: "Custom", name: "Geometric Entryway Design", price: "", rating: 5, reviewCount: "18", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780963238290-vzc55io2.png", imageAlt: "Intricate geometric hardwood floor design in entryway" },
|
||||
{ id: "project-3", brand: "Dark Oak", name: "Elegant Living Room Install", price: "", rating: 5, reviewCount: "32", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780966652304-xfnb27na.png", imageAlt: "Worker installing dark oak hardwood floors in living room" },
|
||||
{ id: "project-4", brand: "Natural Oak", name: "Bright Office Space", price: "", rating: 5, reviewCount: "15", imageSrc: "http://img.b2bpic.net/free-photo/modern-styled-small-entryway_23-2150713043.jpg", imageAlt: "Bright office space with newly installed natural oak flooring" },
|
||||
{ id: "project-5", brand: "Mahogany", name: "Classic Dining Area", price: "", rating: 5, reviewCount: "20", imageSrc: "http://img.b2bpic.net/free-photo/composition-with-flashlight-useful-travel-items_23-2147604698.jpg", imageAlt: "Classic dining area with rich mahogany hardwood floors" },
|
||||
{ id: "project-6", brand: "Maple", name: "Spacious Bedroom", price: "", rating: 5, reviewCount: "10", imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-healthy-woman-bathrobe-indoors_1153-6373.jpg", imageAlt: "Spacious bedroom with light maple hardwood flooring" }
|
||||
{ id: "project-4", brand: "Natural Oak", name: "Bright Office Space", price: "", rating: 5, reviewCount: "15", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780967930309-ylogas5d.png", imageAlt: "Bright office space with newly installed natural oak flooring" },
|
||||
{ id: "project-5", brand: "Mahogany", name: "Classic Dining Area", price: "", rating: 5, reviewCount: "20", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780968009290-vn12hcty.png", imageAlt: "Classic dining area with rich mahogany hardwood floors" },
|
||||
{ id: "project-6", brand: "Maple", name: "Spacious Bedroom", price: "", rating: 5, reviewCount: "10", imageSrc: "https://img.b2bpic.net/free-photo/close-up-wooden-surface_23-2147731715.jpg?id=1526425", imageAlt: "Spacious bedroom with light maple hardwood flooring" }
|
||||
]}
|
||||
title="Our Gallery: Crafting Beautiful Floors"
|
||||
description="Explore a selection of our finest flooring projects. Each image tells a story of dedication, precision, and the lasting beauty FloorCraft brings to every home."
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="gallery-testimonials" data-section="gallery-testimonials">
|
||||
<TestimonialCardSixteen
|
||||
textboxLayout="default"
|
||||
useInvertedBackground={true}
|
||||
testimonials={[
|
||||
{ id: "g-1", name: "Olivia Wilson", role: "Home Remodeler", company: "Alpharetta, GA", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/close-up-woman-man-choosing-color_23-2148903521.jpg", imageAlt: "Olivia Wilson" },
|
||||
{ id: "g-2", name: "Liam Brown", role: "Residential Client", company: "Roswell, GA", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/stylish-woman-wearing-yellow-bandana_273609-13338.jpg", imageAlt: "Liam Brown" },
|
||||
{ id: "g-3", name: "Ava Garcia", role: "Custom Home Builder", company: "Atlanta, GA", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/front-view-happy-man-posing_23-2148563434.jpg", imageAlt: "Ava Garcia" },
|
||||
{ id: "g-4", name: "Noah Miller", role: "Property Investor", company: "Sandy Springs, GA", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/expressive-young-girl-posing-studio_176474-68234.jpg", imageAlt: "Noah Miller" },
|
||||
{ id: "g-5", name: "Sophia Davis", role: "Homeowner", company: "Johns Creek, GA", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/happy-relaxed-mature-business-man-standing-office-cafe-leaning-counter-holding-jacket-shoulder-smiling-camera_74855-10028.jpg", imageAlt: "Sophia Davis" }
|
||||
]}
|
||||
kpiItems={[
|
||||
{ value: "Flawless", label: "Finishes" },
|
||||
{ value: "Artistry", label: "in Every Plank" },
|
||||
{ value: "Happy", label: "Homes" }
|
||||
]}
|
||||
title="Hear From Homeowners We've Transformed"
|
||||
description="See why families trust FloorCraft for their most cherished spaces. Our gallery showcases not just floors, but homes brought to life."
|
||||
animationType="depth-3d"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="footer" data-section="footer">
|
||||
<FooterBase
|
||||
|
||||
@@ -4,7 +4,6 @@ import { Inter } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import "@/lib/gsap-setup";
|
||||
import { ServiceWrapper } from "@/components/ServiceWrapper";
|
||||
import Tag from "@/tag/Tag";
|
||||
import { getVisualEditScript } from "@/utils/visual-edit-script";
|
||||
import { Mulish } from "next/font/google";
|
||||
|
||||
@@ -58,7 +57,7 @@ export default function RootLayout({
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<ServiceWrapper>
|
||||
<body className={`${mulish.variable} ${inter.variable} antialiased`}>
|
||||
<Tag />
|
||||
|
||||
{children}
|
||||
<script
|
||||
dangerouslySetInnerHTML={{
|
||||
|
||||
@@ -12,6 +12,9 @@ import TestimonialCardSixteen from '@/components/sections/testimonial/Testimonia
|
||||
import { Award, Briefcase, Calendar, Cog, Home, Hammer, MessageCircle, Paintbrush, Sparkles, Star, Brush, ClipboardCheck } from "lucide-react";
|
||||
|
||||
export default function LandingPage() {
|
||||
// Placeholder for a translation function. In a real app, this would be imported from an i18n library.
|
||||
const t = (key: string) => key;
|
||||
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="directional-hover"
|
||||
@@ -75,17 +78,17 @@ export default function LandingPage() {
|
||||
mediaAnimation="slide-up"
|
||||
avatars={[
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/portrait-smiling-businesswoman-office_329181-19228.jpg", alt: "Satisfied client"},
|
||||
src: "https://img.b2bpic.net/free-photo/rustic-weathered-wood-surface-with-long-boards-lined-up_24972-248.jpg?id=3913052", alt: "Satisfied client"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/confident-smart-girl-got-everything-control-portrait-optimistic-goodlooking-girl-with-fair-hair-tanned-skin-winking-showing-okay-perfect-gesture-standing-blue-wall_1258-308436.jpg", alt: "Happy homeowner"},
|
||||
src: "https://img.b2bpic.net/free-photo/herringbone-stairs-flooring-wooden-chevron-modern-finish_169016-68991.jpg?id=420756080", alt: "Happy homeowner"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/beautiful-young-female-with-hair-bun-having-joyful-look-smiling-cheerfully-happy-with-some-positive-news_273609-9042.jpg", alt: "Project supervisor"},
|
||||
src: "https://img.b2bpic.net/free-photo/warm-wooden-texture_23-2151946271.jpg?id=413147449", alt: "Project supervisor"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/medium-shot-model-expressing-emotion_23-2151912686.jpg", alt: "Client testimonial"},
|
||||
src: "https://img.b2bpic.net/free-photo/rustic-reclaimed-wood-planks-texture_84443-73858.jpg?id=426436371", alt: "Client testimonial"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/human-facial-expressions-portrait-serious-young-unshaven-male-with-curly-hair-keeping-chin-his-hands-with-pensive-look-thinking-something-posing-indoors_343059-1822.jpg", alt: "Trusted customer"},
|
||||
src: "https://img.b2bpic.net/free-vector/small-wooden-blocks-texture_1100-47.jpg?id=851179", alt: "Trusted customer"},
|
||||
]}
|
||||
avatarText="Join Our Growing Family of Satisfied Customers!"
|
||||
avatarText=""
|
||||
marqueeItems={[
|
||||
{
|
||||
type: "text", text: "Hardwood Installation"},
|
||||
@@ -185,33 +188,17 @@ export default function LandingPage() {
|
||||
textboxLayout="default"
|
||||
useInvertedBackground={true}
|
||||
animationType="depth-3d"
|
||||
testimonials={[
|
||||
{
|
||||
id: "1", name: "Sarah Johnson", role: "Homeowner", company: "Atlanta, GA", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-attractive-stylish-senior-caucasian-female-pensioner-with-pixie-short-hairstyle-spending-day-home-standing-living-room-wearing-elegant-blue-dress-smiling-happily_343059-2673.jpg", imageAlt: "Sarah Johnson"},
|
||||
{
|
||||
id: "2", name: "Michael Chen", role: "Residential Developer", company: "Macon, GA", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-man-with-bright-smile_23-2148563438.jpg", imageAlt: "Michael Chen"},
|
||||
{
|
||||
id: "3", name: "Emily Rodriguez", role: "Interior Designer", company: "Alpharetta, GA", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/glad-brunette-young-woman-smiles-happily-keeps-thumbs-up-shows-approval-sign-satisfied-with-service-good-feedback-says-its-excellent-dressed-casual-pink-t-shirt-isolated-white-background_273609-61011.jpg", imageAlt: "Emily Rodriguez"},
|
||||
{
|
||||
id: "4", name: "David Kim", role: "First-Time Homeowner", company: "Savannah, GA", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-pretty-curly-haired-lady-showing-thumb-up-park_1262-20821.jpg", imageAlt: "David Kim"},
|
||||
{
|
||||
id: "5", name: "Jessica Lee", role: "Property Manager", company: "Roswell, GA", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-beauty-businesswoman-leaning-against-brick-wall_613910-773.jpg", imageAlt: "Jessica Lee"},
|
||||
]}
|
||||
testimonials={[]}
|
||||
kpiItems={[
|
||||
{
|
||||
value: "5.0", label: "Average Rating"},
|
||||
value: "5.0", label: t('home_testimonials.kpi_average_rating')},
|
||||
{
|
||||
value: "98%", label: "Client Retention"},
|
||||
value: "98%", label: t('home_testimonials.kpi_client_retention')},
|
||||
{
|
||||
value: "100%", label: "Satisfaction"},
|
||||
value: "100%", label: t('home_testimonials.kpi_satisfaction')},
|
||||
]}
|
||||
title="What Our Family of Customers Says"
|
||||
description="Hearing from our satisfied clients is the greatest reward. Their trust in our craftsmanship and personal approach is the foundation of our business."
|
||||
title={t('home_testimonials.title')}
|
||||
description={t('home_testimonials.description')}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -220,9 +207,14 @@ export default function LandingPage() {
|
||||
textboxLayout="default"
|
||||
useInvertedBackground={false}
|
||||
names={[
|
||||
"WoodMark Supplies", "Elite Builders", "Design Innovations", "GreenWood Co.", "Luxury Living Homes", "Community Craftsmen", "Certified Flooring Pros"]}
|
||||
title="Our Trusted Partners & Featured Brands"
|
||||
description="We collaborate with leading suppliers and home builders to ensure every FloorCraft project meets the highest standards of quality and aesthetics."
|
||||
t('social_proof.client_a'),
|
||||
t('social_proof.client_b'),
|
||||
t('social_proof.client_c'),
|
||||
t('social_proof.client_d'),
|
||||
t('social_proof.client_e'),
|
||||
]}
|
||||
title={t('social_proof.title')}
|
||||
description={t('social_proof.description')}
|
||||
speed={40}
|
||||
/>
|
||||
</div>
|
||||
@@ -231,46 +223,46 @@ export default function LandingPage() {
|
||||
<FooterBase
|
||||
columns={[
|
||||
{
|
||||
title: "Navigation", items: [
|
||||
title: t('footer.navigation_title'), items: [
|
||||
{
|
||||
label: "Home", href: "/"},
|
||||
label: t('footer.home_label'), href: "/"},
|
||||
{
|
||||
label: "Services", href: "/services"},
|
||||
label: t('footer.services_label'), href: "/services"},
|
||||
{
|
||||
label: "Gallery", href: "/gallery"},
|
||||
label: t('footer.gallery_label'), href: "/gallery"},
|
||||
{
|
||||
label: "Contact", href: "/contact"},
|
||||
label: t('footer.contact_label'), href: "/contact"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Services", items: [
|
||||
title: t('footer.services_column_title'), items: [
|
||||
{
|
||||
label: "Hardwood Installation", href: "/services#hardwood-installation"},
|
||||
label: t('footer.service_hardwood_installation'), href: "/services#hardwood-installation"},
|
||||
{
|
||||
label: "Floor Sanding", href: "/services#floor-sanding"},
|
||||
label: t('footer.service_floor_sanding'), href: "/services#floor-sanding"},
|
||||
{
|
||||
label: "Free Estimates", href: "/services#free-estimates"},
|
||||
label: t('footer.service_free_estimates'), href: "/services#free-estimates"},
|
||||
{
|
||||
label: "Custom Designs", href: "/services#custom-designs"},
|
||||
label: t('footer.service_custom_designs'), href: "/services#custom-designs"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "About Us", items: [
|
||||
title: t('footer.about_us_title'), items: [
|
||||
{
|
||||
label: "Our Story", href: "/#about"},
|
||||
label: t('footer.about_our_story'), href: "/#about"},
|
||||
{
|
||||
label: "Testimonials", href: "/#home-testimonials"},
|
||||
label: t('footer.about_testimonials'), href: "/#home-testimonials"},
|
||||
{
|
||||
label: "Service Areas", href: "/services#service-areas"},
|
||||
label: t('footer.about_service_areas'), href: "/services#service-areas"},
|
||||
{
|
||||
label: "FAQs", href: "/contact#faq"},
|
||||
label: t('footer.about_faqs'), href: "/contact#faq"},
|
||||
],
|
||||
},
|
||||
]}
|
||||
logoSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780963238289-ovhlz3j6.png"
|
||||
logoAlt="FloorCraft Logo"
|
||||
logoText="FloorCraft"
|
||||
copyrightText="© 2024 FloorCraft. All rights reserved."
|
||||
logoText={t('footer.logo_text')}
|
||||
copyrightText={t('footer.copyright_text')}
|
||||
/>
|
||||
</div>
|
||||
</ReactLenis>
|
||||
|
||||
@@ -52,7 +52,7 @@ export default function LandingPage() {
|
||||
features={[
|
||||
{
|
||||
title: "Hardwood Installation", description: "From selection to installation, we guide you through choosing the perfect hardwood, ensuring a beautiful and lasting addition to your home.", media: {
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/bangkok-thailand-august-12-2016-beautiful-luxury-living-room_1203-2344.jpg", imageAlt: "Hardwood floor installation"},
|
||||
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780967789061-j0iopjpz.png", imageAlt: "Hardwood floor installation"},
|
||||
items: [
|
||||
{
|
||||
icon: CheckCircle,
|
||||
@@ -68,7 +68,7 @@ export default function LandingPage() {
|
||||
},
|
||||
{
|
||||
title: "Floor Sanding & Refinishing", description: "Breathe new life into old floors. Our meticulous sanding and refinishing services restore their original luster and protect them for years to come.", media: {
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-housewife-with-yellow-gloves-cleaning-floor_140725-12662.jpg", imageAlt: "Floor sanding and refinishing"},
|
||||
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780967809562-h19uz2n7.png", imageAlt: "Floor sanding and refinishing"},
|
||||
items: [
|
||||
{
|
||||
icon: CheckCircle,
|
||||
@@ -84,7 +84,7 @@ export default function LandingPage() {
|
||||
},
|
||||
{
|
||||
title: "Custom Flooring Designs", description: "Elevate your space with unique patterns, borders, and inlay designs. We craft bespoke flooring solutions that reflect your personal style and vision.", media: {
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/creative-fengshui-practice-outdoors-arrangement_23-2149135744.jpg", imageAlt: "Custom patterned hardwood floor"},
|
||||
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3EsInlEOoSiMI8mFEzeygc6zaoo/uploaded-1780967849188-dqddwbsc.png", imageAlt: "Custom patterned hardwood floor"},
|
||||
items: [
|
||||
{
|
||||
icon: CheckCircle,
|
||||
|
||||
13
src/i18n.ts
Normal file
13
src/i18n.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
// @ts-expect-error next-intl server config type mismatch
|
||||
import { getRequestConfig } from 'next-intl/server';
|
||||
import { notFound } from 'next/navigation';
|
||||
|
||||
export const locales = ['en', 'es'];
|
||||
|
||||
export default getRequestConfig(async ({ locale }) => {
|
||||
if (!locales.includes(locale as any)) notFound();
|
||||
|
||||
return {
|
||||
messages: (await import(`../messages/${locale}.json`)).default,
|
||||
};
|
||||
});
|
||||
18
src/middleware.ts
Normal file
18
src/middleware.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
// @ts-expect-error next-intl middleware type incompatibility
|
||||
import createMiddleware from 'next-intl/middleware';
|
||||
import { locales } from './i18n';
|
||||
|
||||
export default createMiddleware({
|
||||
locales,
|
||||
defaultLocale: 'en',
|
||||
localePrefix: 'as-needed',
|
||||
});
|
||||
|
||||
export const config = {
|
||||
matcher: [
|
||||
'/',
|
||||
'/(es|en)/:path*',
|
||||
// Enable a redirect to a matching locale at the root
|
||||
// '/((?!_next|_vercel|.*\..*).*)',
|
||||
],
|
||||
};
|
||||
Reference in New Issue
Block a user