13 Commits

Author SHA1 Message Date
4406b0a313 Merge version_7_1779313509661 into main
Merge version_7_1779313509661 into main
2026-05-20 21:45:34 +00:00
kudinDmitriyUp
c85d974b0a Bob AI: add a trusted by 100 clients ribbon to the hero section with avatars 2026-05-20 21:45:30 +00:00
cc031c5096 Merge version_6_1779313071033 into main
Merge version_6_1779313071033 into main
2026-05-20 21:39:07 +00:00
kudinDmitriyUp
2a93134d0f Add trust ribbon (HeroCenteredLogos) to hero section 2026-05-20 21:38:28 +00:00
2706bae182 Merge version_5_1779311964925 into main
Merge version_5_1779311964925 into main
2026-05-20 21:20:32 +00:00
kudinDmitriyUp
d6f38d5ee7 Changed hero section to HeroSplitMediaGrid with multiple images. 2026-05-20 21:19:53 +00:00
37d6f88d90 Merge version_4_1779311739221 into main
Merge version_4_1779311739221 into main
2026-05-20 21:18:30 +00:00
kudinDmitriyUp
745cf65837 Replaced raw SVG stars with Lucide Star component in HeroCenteredLogos.tsx 2026-05-20 21:17:46 +00:00
kudinDmitriyUp
228bf55afe Fixed SVG property names in HeroCenteredLogos.tsx 2026-05-20 21:16:47 +00:00
kudinDmitriyUp
22a6beff28 Added 3D and hover animation to hero buttons 2026-05-20 21:16:05 +00:00
d42bcf5e0c Merge version_3_1779311470159 into main
Merge version_3_1779311470159 into main
2026-05-20 21:12:14 +00:00
kudinDmitriyUp
587a1519bc Swapped NavbarDropdown with NavbarFloating for a thinner navbar 2026-05-20 21:11:30 +00:00
3ba70fde9a Merge version_2_1779309897184 into main
Merge version_2_1779309897184 into main
2026-05-20 20:46:07 +00:00
3 changed files with 70 additions and 30 deletions

View File

@@ -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",

View File

@@ -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>

View File

@@ -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">