Compare commits
13 Commits
version_2_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 4406b0a313 | |||
|
|
c85d974b0a | ||
| cc031c5096 | |||
|
|
2a93134d0f | ||
| 2706bae182 | |||
|
|
d6f38d5ee7 | ||
| 37d6f88d90 | |||
|
|
745cf65837 | ||
|
|
228bf55afe | ||
|
|
22a6beff28 | ||
| d42bcf5e0c | |||
|
|
587a1519bc | ||
| 3ba70fde9a |
@@ -1,5 +1,5 @@
|
||||
import FooterMinimal from '@/components/sections/footer/FooterMinimal';
|
||||
import NavbarDropdown from '@/components/ui/NavbarDropdown';
|
||||
import NavbarFloating from '@/components/ui/NavbarFloating';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
import SiteBackgroundSlot from "@/components/ui/SiteBackgroundSlot";
|
||||
import { Outlet } from 'react-router-dom';
|
||||
@@ -41,7 +41,7 @@ export default function Layout() {
|
||||
<StyleProvider buttonVariant="elastic" siteBackground="floatingGradient" heroBackground="gradientBars">
|
||||
<SiteBackgroundSlot />
|
||||
<SectionErrorBoundary name="navbar">
|
||||
<NavbarDropdown
|
||||
<NavbarFloating
|
||||
ctaButton={{
|
||||
text: "Get a Quote",
|
||||
href: "#contact",
|
||||
|
||||
@@ -3,6 +3,7 @@ import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import ImageOrVideo from "@/components/ui/ImageOrVideo";
|
||||
import AvatarGroup from "@/components/ui/AvatarGroup";
|
||||
import { Star } from "lucide-react";
|
||||
|
||||
type HeroCenteredLogosProps = {
|
||||
avatars: { src: string }[];
|
||||
@@ -42,11 +43,11 @@ const HeroCenteredLogos = ({
|
||||
<div className="flex items-center gap-2">
|
||||
<AvatarGroup avatars={avatars} label={avatarText} size="lg" />
|
||||
<div className="flex items-center gap-1 text-yellow-400">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>
|
||||
<Star size={16} fill="currentColor" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" className="lucide lucide-star" />
|
||||
<Star size={16} fill="currentColor" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" className="lucide lucide-star" />
|
||||
<Star size={16} fill="currentColor" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" className="lucide lucide-star" />
|
||||
<Star size={16} fill="currentColor" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" className="lucide lucide-star" />
|
||||
<Star size={16} fill="currentColor" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" className="lucide lucide-star" />
|
||||
<span className="text-sm text-foreground/70 ml-1">5.0 (120 Reviews)</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -68,8 +69,29 @@ const HeroCenteredLogos = ({
|
||||
/>
|
||||
|
||||
<div className="flex flex-wrap justify-center gap-3 mt-2">
|
||||
<Button text={primaryButton.text} href={primaryButton.href} variant="primary" />
|
||||
<Button text={secondaryButton.text} href={secondaryButton.href} variant="secondary" animationDelay={0.1} />
|
||||
<Button
|
||||
text={primaryButton.text}
|
||||
href={primaryButton.href}
|
||||
variant="primary"
|
||||
className="relative overflow-hidden shadow-lg shadow-primary/50 hover:shadow-xl hover:shadow-primary transition-all duration-300 ease-in-out z-10 group"
|
||||
>
|
||||
<span className="relative z-10 text-white group-hover:text-white">
|
||||
{primaryButton.text}
|
||||
</span>
|
||||
<span className="absolute inset-0 bg-gradient-to-br from-primary/80 to-primary/20 transition-transform duration-500 ease-out group-hover:scale-110 group-active:scale-90" />
|
||||
</Button>
|
||||
<Button
|
||||
text={secondaryButton.text}
|
||||
href={secondaryButton.href}
|
||||
variant="secondary"
|
||||
animationDelay={0.1}
|
||||
className="relative overflow-hidden shadow-lg shadow-background/50 hover:shadow-xl hover:shadow-background transition-all duration-300 ease-in-out z-10 group"
|
||||
>
|
||||
<span className="relative z-10 text-foreground group-hover:text-foreground">
|
||||
{secondaryButton.text}
|
||||
</span>
|
||||
<span className="absolute inset-0 bg-gradient-to-br from-background/80 to-background/20 transition-transform duration-500 ease-out group-hover:scale-110 group-active:scale-90" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,12 +2,13 @@ import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||
import FeaturesBento from '@/components/sections/features/FeaturesBento';
|
||||
import HeroCenteredLogos from '@/components/sections/hero/HeroCenteredLogos';
|
||||
import HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
|
||||
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
|
||||
import PricingCenteredCards from '@/components/sections/pricing/PricingCenteredCards';
|
||||
import ProductRatingCards from '@/components/sections/product/ProductRatingCards';
|
||||
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
|
||||
import { Clock, Settings, Wrench, Bolt } from "lucide-react";
|
||||
import HeroCenteredLogos from "@/components/sections/hero/HeroCenteredLogos";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HomePage() {
|
||||
@@ -15,31 +16,48 @@ export default function HomePage() {
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroCenteredLogos
|
||||
avatars={[
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/portrait-female-mechanic-fixing-car-wheel_1170-1385.jpg"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/building-construction-worker-site_23-2149124275.jpg"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/builder-man-wearing-construction-uniform-security-helmet-keeps-fingers-cheeks-tries-make-himself-smile-isolated-pink-wall_141793-14024.jpg"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/young-caucasian-woman-smiling-confident-looking-side-street_839833-24417.jpg"},
|
||||
{
|
||||
src: "http://img.b2bpic.net/free-photo/young-loader-holding-house-model-uniform-front-view_176474-21361.jpg"},
|
||||
]}
|
||||
avatarText="Trusted by 10,000+ happy customers"
|
||||
title="Your Comfort, Our Priority. Expert HVAC Solutions."
|
||||
<HeroSplitMediaGrid
|
||||
tag="Your Comfort, Our Priority"
|
||||
title="Expert HVAC Solutions."
|
||||
description="Providing top-tier heating, ventilation, and air conditioning services for homes and businesses. Experience reliable comfort all year round."
|
||||
primaryButton={{
|
||||
text: "Get a Free Estimate", href: "#contact"}}
|
||||
text: "Get a Free Estimate",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Explore Services", href: "#services"}}
|
||||
logos={[
|
||||
"https://storage.googleapis.com/webild/default/no-image.jpg?id=zqxuft", "http://img.b2bpic.net/free-vector/organic-natural-eco-home-symbol-background-design-vector_1017-47327.jpg", "https://storage.googleapis.com/webild/default/no-image.jpg?id=iupqbi", "http://img.b2bpic.net/free-vector/eco-friendly-alternative-energy-icon_53876-43321.jpg", "http://img.b2bpic.net/free-vector/flat-design-eco-friendly-labels_23-2149202691.jpg", "http://img.b2bpic.net/free-vector/collection-badges-international-earth-day_23-2147780069.jpg", "http://img.b2bpic.net/free-photo/medium-shot-man-holding-heater_23-2149339531.jpg"]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/electrician-is-mounting-electric-sockets-white-wall-indoors_169016-17482.jpg"
|
||||
text: "Explore Services",
|
||||
href: "#services",
|
||||
}}
|
||||
items={[
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/portrait-female-mechanic-fixing-car-wheel_1170-1385.jpg" },
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/building-construction-worker-site_23-2149124275.jpg" },
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
<SectionErrorBoundary name="trust-ribbon">
|
||||
<HeroCenteredLogos
|
||||
avatars={[
|
||||
{ name: "Client 1", imageSrc: "https://api.dicebear.com/7.x/lorelei/svg?seed=1" },
|
||||
{ name: "Client 2", imageSrc: "https://api.dicebear.com/7.x/lorelei/svg?seed=2" },
|
||||
{ name: "Client 3", imageSrc: "https://api.dicebear.com/7.x/lorelei/svg?seed=3" },
|
||||
{ name: "Client 4", imageSrc: "https://api.dicebear.com/7.x/lorelei/svg?seed=4" },
|
||||
{ name: "Client 5", imageSrc: "https://api.dicebear.com/7.x/lorelei/svg?seed=5" },
|
||||
]}
|
||||
avatarText="Trusted by 100+ clients"
|
||||
title=""
|
||||
description=""
|
||||
primaryButton={{ text: "", href: "" }}
|
||||
secondaryButton={{ text: "", href: "" }}
|
||||
logos={[
|
||||
"Company A",
|
||||
"Company B",
|
||||
"Company C",
|
||||
"Company D",
|
||||
"Company E",
|
||||
]}
|
||||
hideMedia={true}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="about" data-section="about">
|
||||
|
||||
Reference in New Issue
Block a user