Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e0076c6b13 | |||
| 3eed2431ef | |||
| 3fe25ae0df | |||
| 1d9349c15d | |||
| e92f8bfe99 | |||
| 51e34f4b29 | |||
| 812ca9ef84 | |||
| 55ed7a7d9f | |||
| 605f8bdf62 | |||
| 87bec05b7e | |||
| 43c9bc334a | |||
| 13e2614fdb | |||
| 4a6a6f1a7f | |||
| fbe218e325 | |||
| 52b726e20a | |||
| 3124ddf4bf | |||
| a3a623d06a | |||
| 21bec54d83 | |||
| 9dbcf34068 | |||
| d43a1af899 | |||
| 203283c134 | |||
| fa437999a3 | |||
| 18959feb6a | |||
| 4a97a8eaf9 | |||
| 43bee4235f | |||
| e14e26ec5b | |||
| 70055d040a | |||
| 53692691ca | |||
| 4c56d54f72 | |||
| 3ed757eeb7 | |||
| 6ecb80f5f1 | |||
| a91830f1d8 | |||
| 86f3a04a34 | |||
| 4493b29637 | |||
| 7b760bc1de | |||
| dc074890c8 | |||
| 84791df8f1 | |||
| e08c865688 | |||
| 6ddaa22e34 |
@@ -1,24 +1,13 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Manrope } from "next/font/google";
|
||||
import { Inter } from "next/font/google";
|
||||
import { Open_Sans } from "next/font/google";
|
||||
import "./styles/variables.css";
|
||||
import { Raleway } from "next/font/google";
|
||||
import "./globals.css";
|
||||
|
||||
const raleway = Raleway({ subsets: ["latin"] });
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Taishan Construction | Premium Hardscape & Building Services Toronto", description: "Premium interlock driveways, patios, landscaping & construction services across the GTA. Free 3D design, expert installation, luxury results."
|
||||
title: "Taishan Construction - Premium Hardscape & Construction Services Toronto", description: "Premium landscaping and construction services across the GTA. Free 3D design, professional installation, material showroom."
|
||||
};
|
||||
|
||||
const inter = Inter({
|
||||
variable: "--font-inter",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
const openSans = Open_Sans({
|
||||
variable: "--font-open-sans",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: {
|
||||
@@ -26,9 +15,7 @@ export default function RootLayout({
|
||||
}) {
|
||||
return (
|
||||
<html lang="en">
|
||||
<body className={`${inter.variable} ${openSans.variable} antialiased`}>
|
||||
{children}
|
||||
|
||||
<body className={raleway.className}>{children}
|
||||
<script
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `
|
||||
|
||||
112
src/app/page.tsx
112
src/app/page.tsx
@@ -12,6 +12,7 @@ import ContactFaq from '@/components/sections/contact/ContactFaq';
|
||||
import FooterBaseReveal from '@/components/sections/footer/FooterBaseReveal';
|
||||
import { Building2, Eye, CheckCircle2, Palette, Users, MessageCircle, Sparkles, ArrowRightLeft, Cog, Footprints, Home, Zap, Shield, Hammer, Trees, Droplet, Frame, Lightbulb, Crown, Phone } from 'lucide-react';
|
||||
import React, { useState } from 'react';
|
||||
import Link from 'next/link';
|
||||
|
||||
interface BeforeAfterImagePair {
|
||||
beforeSrc: string;
|
||||
@@ -207,79 +208,42 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<div className="px-6 lg:px-12 py-16 lg:py-24">
|
||||
<div className="max-w-7xl mx-auto">
|
||||
<div className="mb-12">
|
||||
<p className="text-sm font-semibold uppercase tracking-wider text-primary-cta mb-2">Complete Solutions</p>
|
||||
<h2 className="text-4xl lg:text-5xl font-bold mb-4">Our Services</h2>
|
||||
<p className="text-lg text-foreground/80">Premium construction and landscaping services for Toronto and the Greater Toronto Area. Each project is crafted with precision and built to last.</p>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-12">
|
||||
{[
|
||||
{
|
||||
id: "interlock", icon: Cog,
|
||||
title: "Interlock Driveways", description: "Professional interlock paving with premium materials and expert installation"
|
||||
},
|
||||
{
|
||||
id: "patios", icon: Palette,
|
||||
title: "Backyard Patios", description: "Custom patio designs transforming outdoor living spaces into luxury retreats"
|
||||
},
|
||||
{
|
||||
id: "walkways", icon: Footprints,
|
||||
title: "Walkways", description: "Decorative and functional pathways connecting your property with style"
|
||||
},
|
||||
{
|
||||
id: "retaining", icon: Building2,
|
||||
title: "Retaining Walls", description: "Structural and aesthetic walls for landscaping and property management"
|
||||
},
|
||||
{
|
||||
id: "porches", icon: Home,
|
||||
title: "Natural Stone Porches", description: "Premium stone entry features creating impressive curb appeal"
|
||||
},
|
||||
{
|
||||
id: "lighting", icon: Zap,
|
||||
title: "Landscape Lighting", description: "Professional outdoor lighting systems enhancing ambiance and security"
|
||||
}
|
||||
].map((service) => (
|
||||
<div
|
||||
key={service.id}
|
||||
className="relative group"
|
||||
onMouseEnter={() => setServicesHoveredCard(service.id)}
|
||||
onMouseLeave={() => setServicesHoveredCard(null)}
|
||||
>
|
||||
<div className="p-6 rounded-lg border border-accent/20 bg-card hover:border-primary-cta/40 transition-all duration-300">
|
||||
<service.icon className="w-8 h-8 text-primary-cta mb-4" />
|
||||
<h3 className="text-xl font-semibold mb-2">{service.title}</h3>
|
||||
<p className="text-foreground/70 text-sm">{service.description}</p>
|
||||
</div>
|
||||
{servicesHoveredCard === service.id && (
|
||||
<div className="absolute inset-0 rounded-lg bg-black/50 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none">
|
||||
<div className="text-center text-white p-4">
|
||||
<p className="font-semibold">See examples of this service</p>
|
||||
<p className="text-sm text-white/80">in our project gallery</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div className="bg-card rounded-lg p-8 border border-accent/20">
|
||||
<h3 className="text-2xl font-bold mb-6">Interlock Driveway Showcase</h3>
|
||||
<p className="text-foreground/80 mb-8">Hover over the slider to see our photorealistic 3D renderings compared to actual completed projects:</p>
|
||||
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
||||
{beforeAfterPairs.map((pair, index) => (
|
||||
<BeforeAfterCard
|
||||
key={index}
|
||||
pair={pair}
|
||||
isHovered={galleryHoveredCard === `service-${index}`}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<FeatureHoverPattern
|
||||
title="Our Services"
|
||||
description="Premium construction and landscaping services for Toronto and the Greater Toronto Area. Each project is crafted with precision and built to last."
|
||||
tag="Complete Solutions"
|
||||
tagAnimation="slide-up"
|
||||
features={[
|
||||
{
|
||||
icon: Cog,
|
||||
title: "Interlock Driveways", description: "Professional interlock paving with premium materials and expert installation"
|
||||
},
|
||||
{
|
||||
icon: Palette,
|
||||
title: "Backyard Patios", description: "Custom patio designs transforming outdoor living spaces into luxury retreats"
|
||||
},
|
||||
{
|
||||
icon: Footprints,
|
||||
title: "Walkways", description: "Decorative and functional pathways connecting your property with style"
|
||||
},
|
||||
{
|
||||
icon: Building2,
|
||||
title: "Retaining Walls", description: "Structural and aesthetic walls for landscaping and property management"
|
||||
},
|
||||
{
|
||||
icon: Home,
|
||||
title: "Natural Stone Porches", description: "Premium stone entry features creating impressive curb appeal"
|
||||
},
|
||||
{
|
||||
icon: Zap,
|
||||
title: "Landscape Lighting", description: "Professional outdoor lighting systems enhancing ambiance and security"
|
||||
}
|
||||
]}
|
||||
animationType="slide-up"
|
||||
textboxLayout="default"
|
||||
useInvertedBackground={false}
|
||||
buttonAnimation="slide-up"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="gallery" data-section="gallery">
|
||||
@@ -447,7 +411,7 @@ export default function LandingPage() {
|
||||
<div id="contact" data-section="contact">
|
||||
<ContactFaq
|
||||
ctaTitle="Ready to Transform Your Property?"
|
||||
ctaDescription="Book a consultation and receive a free 3D preview of your project."
|
||||
ctaDescription="Start your project with a free consultation and photorealistic 3D rendering."
|
||||
ctaButton={{
|
||||
text: "Get Free 3D Design", href: "mailto:info@taishanconstruction.com?subject=Free%203D%20Design%20Consultation"
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user