9 Commits

Author SHA1 Message Date
878a2e849b Merge version_2 into main
Merge version_2 into main
2026-05-25 13:50:25 +00:00
ab675e9eeb Remove watermark 2026-05-25 13:50:19 +00:00
6c3b7d384a Merge version_2 into main
Merge version_2 into main
2026-03-27 15:29:07 +00:00
6afd826e30 Update src/app/page.tsx 2026-03-27 15:29:04 +00:00
94d7e35bf4 Merge version_2 into main
Merge version_2 into main
2026-03-27 14:07:25 +00:00
kudinDmitriyUp
a26cb3da35 Bob AI: Add a new logo cloud section. It should feature a glasmorphi 2026-03-27 14:07:04 +00:00
b027dcc9a2 Merge version_1 into main
Merge version_1 into main
2026-03-27 13:37:24 +00:00
abcf1cbde4 Merge version_1 into main
Merge version_1 into main
2026-03-27 13:36:50 +00:00
86e323f31f Merge version_1 into main
Merge version_1 into main
2026-03-27 13:35:47 +00:00
3 changed files with 96 additions and 84 deletions

View File

@@ -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 { Montserrat } from "next/font/google";
@@ -26,7 +25,7 @@ export default function RootLayout({
<html lang="en" suppressHydrationWarning>
<ServiceWrapper>
<body className={`${montserrat.variable} antialiased`}>
<Tag />
{children}
<script
dangerouslySetInnerHTML={{

View File

@@ -6,6 +6,7 @@ import FaqBase from '@/components/sections/faq/FaqBase';
import FaqSplitText from '@/components/sections/faq/FaqSplitText';
import FooterCard from '@/components/sections/footer/FooterCard';
import HeroBillboardTestimonial from '@/components/sections/hero/HeroBillboardTestimonial';
import LogoCloudGlassmorphic from "@/components/sections/logocloud/LogoCloudGlassmorphic";
import MetricCardFourteen from '@/components/sections/metrics/MetricCardFourteen';
import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered';
import TextSplitAbout from '@/components/sections/about/TextSplitAbout';
@@ -29,21 +30,13 @@ export default function LandingPage() {
<NavbarStyleCentered
navItems={[
{
name: "Home",
id: "/",
},
name: "Home", id: "/"},
{
name: "Shop",
id: "/shop",
},
name: "Shop", id: "/shop"},
{
name: "About",
id: "/about",
},
name: "About", id: "/about"},
{
name: "Contact",
id: "/contact",
},
name: "Contact", id: "/contact"},
]}
brandName="Veloura Intimates"
/>
@@ -53,52 +46,29 @@ export default function LandingPage() {
<HeroBillboardTestimonial
useInvertedBackground={true}
background={{
variant: "gradient-bars",
}}
variant: "gradient-bars"}}
title="Unleash Your Confidence"
description="Luxury lingerie designed to make you feel irresistible."
testimonials={[
{
name: "Sarah J.",
handle: "@sarahj",
testimonial: "The most comfortable and elegant set I have ever owned. I feel so empowered.",
rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-woman-looking-confident--1774618527096-9d1bd115.png?_wi=1",
},
name: "Sarah J.", handle: "@sarahj", testimonial: "The most comfortable and elegant set I have ever owned. I feel so empowered.", rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-woman-looking-confident--1774618527096-9d1bd115.png?_wi=1"},
{
name: "Chloe M.",
handle: "@chloem",
testimonial: "Soft, luxury feel. Perfect fit for every body type.",
rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-woman-with-an-elegant-sm-1774618528979-2f055a22.png",
},
name: "Chloe M.", handle: "@chloem", testimonial: "Soft, luxury feel. Perfect fit for every body type.", rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-woman-with-an-elegant-sm-1774618528979-2f055a22.png"},
{
name: "Amelia R.",
handle: "@ameliar",
testimonial: "Sophisticated designs that make me feel beautiful every single day.",
rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-stylish-woman-high-fashi-1774618525531-ff699f82.png",
},
name: "Amelia R.", handle: "@ameliar", testimonial: "Sophisticated designs that make me feel beautiful every single day.", rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-stylish-woman-high-fashi-1774618525531-ff699f82.png"},
{
name: "Elena V.",
handle: "@elenav",
testimonial: "My partner loved the gift, and I loved the quality of the lace!",
rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-sophisticated-woman-1774618527017-703f5186.png",
},
name: "Elena V.", handle: "@elenav", testimonial: "My partner loved the gift, and I loved the quality of the lace!", rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-sophisticated-woman-1774618527017-703f5186.png"},
{
name: "Sophia L.",
handle: "@sophialuxe",
testimonial: "Truly unmatched quality. I feel like a queen every time I wear these pieces.",
rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-woman-looking-confident--1774618527096-9d1bd115.png?_wi=2",
},
name: "Sophia L.", handle: "@sophialuxe", testimonial: "Truly unmatched quality. I feel like a queen every time I wear these pieces.", rating: 5,
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/a-portrait-of-a-woman-looking-confident--1774618527096-9d1bd115.png?_wi=2"},
]}
buttons={[
{
text: "Shop Now",
href: "/shop",
},
text: "Shop Now", href: "/shop"},
]}
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AJb0zJP2EWyuYlH5wmRP5jjTA5/professional-fashion-photography-of-a-co-1774618527118-96d74e84.png"
mediaAnimation="slide-up"
@@ -106,14 +76,25 @@ export default function LandingPage() {
/>
</div>
<div id="logo-cloud" data-section="logo-cloud">
<LogoCloudGlassmorphic
badgeText="Trusted by 10+ companies"
logos={[
{ src: "https://placehold.co/400x400?text=Logo1", alt: "Company 1" },
{ src: "https://placehold.co/400x400?text=Logo2", alt: "Company 2" },
{ src: "https://placehold.co/400x400?text=Logo3", alt: "Company 3" },
{ src: "https://placehold.co/400x400?text=Logo4", alt: "Company 4" },
{ src: "https://placehold.co/400x400?text=Logo5", alt: "Company 5" },
]}
/>
</div>
<div id="about-section" data-section="about-section">
<TextSplitAbout
useInvertedBackground={false}
title="Our Philosophy"
description={[
"At Veloura Intimates, we believe confidence starts from within. Our pieces are crafted to celebrate self-love and the beauty of your skin.",
"Every stitch is designed with the modern, empowered woman in mind—blending comfort with pure luxury.",
]}
"At Veloura Intimates, we believe confidence starts from within. Our pieces are crafted to celebrate self-love and the beauty of your skin.", "Every stitch is designed with the modern, empowered woman in mind—blending comfort with pure luxury."]}
/>
</div>
@@ -123,20 +104,11 @@ export default function LandingPage() {
useInvertedBackground={true}
faqs={[
{
id: "f1",
title: "How do I find my size?",
content: "Check our detailed size guide on each product page for a perfect, comfortable fit.",
},
id: "f1", title: "How do I find my size?", content: "Check our detailed size guide on each product page for a perfect, comfortable fit."},
{
id: "f2",
title: "Is the shipping free?",
content: "We offer free shipping on all orders over $100.",
},
id: "f2", title: "Is the shipping free?", content: "We offer free shipping on all orders over $100."},
{
id: "f3",
title: "What is your return policy?",
content: "We accept returns within 30 days of purchase for unused, pristine items.",
},
id: "f3", title: "What is your return policy?", content: "We accept returns within 30 days of purchase for unused, pristine items."},
]}
title="Common Questions"
description="Everything you need to know about your order and comfort fit."
@@ -151,20 +123,11 @@ export default function LandingPage() {
tag="Quality Assured"
metrics={[
{
id: "m1",
value: "100+",
description: "Unique Designs",
},
id: "m1", value: "100+", description: "Unique Designs"},
{
id: "m2",
value: "5k+",
description: "Happy Clients",
},
id: "m2", value: "5k+", description: "Happy Clients"},
{
id: "m3",
value: "24/7",
description: "Support",
},
id: "m3", value: "24/7", description: "Support"},
]}
metricsAnimation="slide-up"
/>
@@ -178,15 +141,9 @@ export default function LandingPage() {
faqsAnimation="slide-up"
faqs={[
{
id: "f1",
title: "How do I care for my lace?",
content: "We recommend hand washing in cool water with mild detergent.",
},
id: "f1", title: "How do I care for my lace?", content: "We recommend hand washing in cool water with mild detergent."},
{
id: "f2",
title: "Do you ship globally?",
content: "Yes, we ship our luxury collection worldwide.",
},
id: "f2", title: "Do you ship globally?", content: "Yes, we ship our luxury collection worldwide."},
]}
/>
</div>

View File

@@ -0,0 +1,56 @@
"use client";
import { cls } from "@/lib/utils";
import Image from "next/image";
interface Logo {
src: string;
alt: string;
}
interface LogoCloudGlassmorphicProps {
badgeText: string;
logos: Logo[];
useInvertedBackground?: boolean;
className?: string;
containerClassName?: string;
badgeClassName?: string;
logosContainerClassName?: string;
}
export default function LogoCloudGlassmorphic({
badgeText,
logos,
useInvertedBackground = false,
className = "",
containerClassName = "",
badgeClassName = "",
logosContainerClassName = "",
}: LogoCloudGlassmorphicProps) {
return (
<section className={cls("relative w-full py-hero-page-padding", className)}>
<div className={cls("w-content-width mx-auto flex flex-col items-center gap-6", containerClassName)}>
<div
className={cls(
"tag-card rounded-theme-capped px-4 py-2 text-sm",
badgeClassName
)}
>
{badgeText}
</div>
<div className={cls("flex w-full flex-wrap items-center justify-center gap-x-8 gap-y-4 opacity-80", logosContainerClassName)}>
{logos.map((logo, index) => (
<Image
key={index}
src={logo.src}
alt={logo.alt}
width={120}
height={40}
className="h-8 w-auto object-contain"
/>
))}
</div>
</div>
</section>
);
}