14 Commits

Author SHA1 Message Date
b4d8444b36 Update src/app/page.tsx 2026-02-21 20:14:39 +00:00
a398c5e39d Update src/app/blog/page.tsx 2026-02-21 20:14:38 +00:00
d4133c0f0d Update src/app/shop/page.tsx 2026-02-21 20:13:55 +00:00
f7c50d6ee7 Update src/app/shop/[id]/page.tsx 2026-02-21 20:13:54 +00:00
a282b1225b Update src/app/privacy/page.tsx 2026-02-21 20:13:54 +00:00
48ef8ff917 Update src/app/page.tsx 2026-02-21 20:13:53 +00:00
5e02715c8a Update src/app/blog/page.tsx 2026-02-21 20:13:52 +00:00
aafcd380b9 Update src/app/shop/[id]/page.tsx 2026-02-21 20:10:40 +00:00
417ca64eb2 Update src/app/shop/page.tsx 2026-02-21 20:08:19 +00:00
b4369d6ab3 Update src/app/shop/[id]/page.tsx 2026-02-21 20:08:19 +00:00
0a3cd391f2 Update src/app/page.tsx 2026-02-21 20:08:18 +00:00
776129b0d9 Update src/app/layout.tsx 2026-02-21 20:08:17 +00:00
3bfaef8b07 Update src/app/blog/page.tsx 2026-02-21 20:08:16 +00:00
6425110e7c Merge version_2 into main
Merge version_2 into main
2026-02-21 20:07:35 +00:00
6 changed files with 338 additions and 377 deletions

View File

@@ -1,24 +1,44 @@
"use client"; "use client";
import ReactLenis from "lenis/react"; import BlogCardTwo from '@/components/sections/blog/BlogCardTwo';
import BlogCardThree from '@/components/sections/blog/BlogCardThree';
import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal'; import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal';
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay"; import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay";
import { useBlogPosts } from "@/hooks/useBlogPosts";
const posts = [
{
id: '1',
category: ['Skincare', 'Tips'],
title: '5 Tips for a Glowing Complexion',
excerpt: 'Discover our top secrets to achieving radiant, healthy-looking skin that glows from within.',
imageSrc: 'https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg',
authorName: 'Lee Coral',
authorAvatar: 'https://img.b2bpic.net/free-photo/studio-shot-sensual-woman-pink-suit_197531-16807.jpg',
date: 'Oct 20, 2023',
},
{
id: '2',
category: ['Live Shows'],
title: 'What to Expect in Our Next Live Show',
excerpt: 'Get a sneak peek into the exclusive bundles and new drops featured in our upcoming live event.',
imageSrc: 'https://img.b2bpic.net/free-photo/online-workshop-demontration-beauty-products_259150-60056.jpg?_wi=2',
authorName: 'Ariel S.',
authorAvatar: 'https://img.b2bpic.net/free-photo/portrait-young-female-dentist-dentistry-concept-dental-treatment_169016-67131.jpg',
date: 'Oct 15, 2023',
},
{
id: '3',
category: ['Cosmetics'],
title: 'The Ultimate Guide to Pro Cosmetics',
excerpt: 'Learn how to use our professional cosmetic kits to create stunning looks for any occasion.',
imageSrc: 'https://img.b2bpic.net/free-photo/foundation-bottles-advertising-arrangement_23-2149511243.jpg?_wi=2',
authorName: 'Glow Theory',
authorAvatar: 'https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg',
date: 'Oct 10, 2023',
}
];
export default function BlogPage() { export default function BlogPage() {
const { posts, isLoading } = useBlogPosts();
const WHATNOT_LINK = "https://www.whatnot.com/live/glowtheory";
const navItems = [
{ name: "Home", id: "/" },
{ name: "About", id: "/#about" },
{ name: "Live Shows", id: "/#live-shows" },
{ name: "Bundles", id: "/#bundles" },
{ name: "Reviews", id: "/#reviews" },
{ name: "Contact", id: "/#contact-support" }
];
return ( return (
<ThemeProvider <ThemeProvider
@@ -33,47 +53,41 @@ export default function BlogPage() {
secondaryButtonStyle="radial-glow" secondaryButtonStyle="radial-glow"
headingFontWeight="medium" headingFontWeight="medium"
> >
<ReactLenis root> <div id="nav" data-section="nav">
<div id="nav" data-section="nav"> <NavbarLayoutFloatingOverlay
<NavbarLayoutFloatingOverlay brandName="Glow Theory"
brandName="Glow Theory" navItems={[
navItems={navItems} { name: "Home", id: "/" },
button={{ text: "Join Live", href: WHATNOT_LINK }} { name: "Shop", id: "/shop" },
className="py-4 px-6 md:px-8" ]}
buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]" button={{ text: "Join Live", href: "/#live-shows" }}
buttonTextClassName="font-medium" className="py-4 px-6 md:px-8"
menuButtonClassName="!text-[--accent]" buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]"
/> buttonTextClassName="font-medium"
</div> />
</div>
{isLoading ? ( <div id="blog" data-section="blog">
<div className="w-content-width mx-auto py-20 text-center"> <BlogCardTwo
<p className="text-foreground">Loading posts...</p> blogs={posts}
</div> title="Featured Articles"
) : ( description="Explore our latest insights"
<div id="blog" data-section="blog"> animationType="slide-up"
<BlogCardThree textboxLayout="default"
blogs={posts} useInvertedBackground={false}
title="Featured Articles" />
description="Explore our latest insights" </div>
animationType="slide-up"
textboxLayout="default"
useInvertedBackground={false}
/>
</div>
)}
<div id="footer" data-section="footer"> <div id="footer" data-section="footer">
<FooterLogoReveal <FooterLogoReveal
logoText="Glow Theory" logoText="Glow Theory"
leftLink={{ text: "Customer Support", href: "/#contact-support" }} leftLink={{ text: "Customer Support", href: "/#contact-support" }}
rightLink={{ text: "Privacy Policy", href: "/privacy" }} rightLink={{ text: "Privacy Policy", href: "/privacy" }}
className="bg-[--background] text-[--foreground] py-6 px-4" className="bg-[--background] text-[--foreground] py-6 px-4"
linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200" linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200"
logoClassName="text-2xl font-bold tracking-tight" logoClassName="text-2xl font-bold tracking-tight"
/> />
</div> </div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -12,12 +12,12 @@ export const metadata: Metadata = {
title: "Glow Theory - Premium Beauty Wholesale Live Selling", description: "Elevate your glow with Glow Theory, your Miami-based source for luxury beauty, skincare, fragrance, and cosmetic reseller bundles through live shows on Whatnot.", openGraph: { title: "Glow Theory - Premium Beauty Wholesale Live Selling", description: "Elevate your glow with Glow Theory, your Miami-based source for luxury beauty, skincare, fragrance, and cosmetic reseller bundles through live shows on Whatnot.", openGraph: {
title: "Glow Theory - Premium Beauty Wholesale Live Selling", description: "Elevate your glow with Glow Theory, your Miami-based source for luxury beauty, skincare, fragrance, and cosmetic reseller bundles through live shows on Whatnot.", url: "https://glowtheory.com", siteName: "Glow Theory", images: [ title: "Glow Theory - Premium Beauty Wholesale Live Selling", description: "Elevate your glow with Glow Theory, your Miami-based source for luxury beauty, skincare, fragrance, and cosmetic reseller bundles through live shows on Whatnot.", url: "https://glowtheory.com", siteName: "Glow Theory", images: [
{ {
url: "https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg", alt: "Glow Theory beauty products with a soft pink glow"} url: "https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg", alt: "Glow Theory beauty products with a soft pink glow"},
], ],
type: "website"}, type: "website"},
twitter: { twitter: {
card: "summary_large_image", title: "Glow Theory - Premium Beauty Wholesale Live Selling", description: "Elevate your glow with Glow Theory, your Miami-based source for luxury beauty, skincare, fragrance, and cosmetic reseller bundles through live shows on Whatnot.", images: ["https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg"] card: "summary_large_image", title: "Glow Theory - Premium Beauty Wholesale Live Selling", description: "Elevate your glow with Glow Theory, your Miami-based source for luxury beauty, skincare, fragrance, and cosmetic reseller bundles through live shows on Whatnot.", images: ["https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg"],
} },
}; };
export default function RootLayout({ export default function RootLayout({

View File

@@ -12,15 +12,6 @@ import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal';
import { CalendarCheck, Mail, MessageSquare, Sparkles, Timer, Tv } from "lucide-react"; import { CalendarCheck, Mail, MessageSquare, Sparkles, Timer, Tv } from "lucide-react";
export default function LandingPage() { export default function LandingPage() {
const WHATNOT_LINK = "https://www.whatnot.com/live/glowtheory";
const navItems = [
{ name: "About", id: "about" },
{ name: "Live Shows", id: "live-shows" },
{ name: "Bundles", id: "bundles" },
{ name: "Reviews", id: "reviews" },
{ name: "Contact", id: "contact-support" }
];
return ( return (
<ThemeProvider <ThemeProvider
defaultButtonVariant="elastic-effect" defaultButtonVariant="elastic-effect"
@@ -37,12 +28,19 @@ export default function LandingPage() {
<div id="nav" data-section="nav"> <div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay <NavbarLayoutFloatingOverlay
brandName="Glow Theory" brandName="Glow Theory"
navItems={navItems} navItems={[
button={{ text: "Join Live", href: WHATNOT_LINK }} { name: "About", id: "about" },
{ name: "Live Shows", id: "live-shows" },
{ name: "Bundles", id: "bundles" },
{ name: "Reviews", id: "reviews" },
{ name: "Support", id: "support" },
{ name: "Shop", id: "/shop" },
{ name: "Blog", id: "/blog" }
]}
button={{ text: "Join Live", href: "#live-shows" }}
className="py-4 px-6 md:px-8" className="py-4 px-6 md:px-8"
buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]" buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]"
buttonTextClassName="font-medium" buttonTextClassName="font-medium"
menuButtonClassName="!text-[--accent]"
/> />
</div> </div>
@@ -51,14 +49,13 @@ export default function LandingPage() {
title="Glow Theory" title="Glow Theory"
description="Elevate Your Glow" description="Elevate Your Glow"
background={{ variant: "radial-gradient" }} background={{ variant: "radial-gradient" }}
buttons={[{ text: "Join Our Live Show", href: WHATNOT_LINK }]} buttons={[{ text: "Join Our Live Show", href: "https://www.whatnot.com/s/xeIJ5XNt" }]}
mediaItems={[ mediaItems={[
{ imageSrc: "https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg?_wi=1", imageAlt: "Beauty products with a soft pink glow" }, { imageSrc: "https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg?_wi=1", imageAlt: "Beauty products with a soft pink glow" },
{ imageSrc: "https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg?_wi=2", imageAlt: "Beauty products with a soft pink glow" }, { imageSrc: "https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg?_wi=2", imageAlt: "Beauty products with a soft pink glow" },
{ imageSrc: "https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg?_wi=3", imageAlt: "Beauty products with a soft pink glow" }, { imageSrc: "https://img.b2bpic.net/free-photo/minimal-assortment-beauty-products_23-2148961325.jpg?_wi=3", imageAlt: "Beauty products with a soft pink glow" },
]} ]}
mediaAnimation="opacity" mediaAnimation="opacity"
tagAnimation="opacity"
buttonAnimation="opacity" buttonAnimation="opacity"
className="bg-[--background] text-[--foreground]" className="bg-[--background] text-[--foreground]"
titleClassName="text-5xl md:text-7xl lg:text-8xl font-thin tracking-wide" titleClassName="text-5xl md:text-7xl lg:text-8xl font-thin tracking-wide"
@@ -120,9 +117,9 @@ export default function LandingPage() {
title="Featured Bundles" title="Featured Bundles"
description="Discover our curated selection of reseller beauty bundles, perfect for elevating your inventory. Available exclusively on our live shows!" description="Discover our curated selection of reseller beauty bundles, perfect for elevating your inventory. Available exclusively on our live shows!"
products={[ products={[
{ id: "bundle-1", brand: "Glow Theory", name: "Skincare Essentials Bundle", price: "Live Show Price", rating: 5, reviewCount: "1.2K", imageSrc: "https://img.b2bpic.net/free-photo/online-workshop-demontration-beauty-products_259150-60056.jpg", imageAlt: "Skincare Essentials Bundle" }, { id: "bundle-1", brand: "Glow Theory", name: "Skincare Essentials Bundle", price: "Live Show Price", rating: 5, reviewCount: "1.2K", imageSrc: "https://img.b2bpic.net/free-photo/online-workshop-demontration-beauty-products_259150-60056.jpg?_wi=1", imageAlt: "Skincare Essentials Bundle" },
{ id: "bundle-2", brand: "Glow Theory", name: "Fragrance Discovery Set", price: "Live Show Price", rating: 5, reviewCount: "890", imageSrc: "https://img.b2bpic.net/free-photo/close-up-variety-cosmetic-products-desk-isolated_574295-5284.jpg", imageAlt: "Fragrance Discovery Set" }, { id: "bundle-2", brand: "Glow Theory", name: "Fragrance Discovery Set", price: "Live Show Price", rating: 5, reviewCount: "890", imageSrc: "https://img.b2bpic.net/free-photo/close-up-variety-cosmetic-products-desk-isolated_574295-5284.jpg", imageAlt: "Fragrance Discovery Set" },
{ id: "bundle-3", brand: "Glow Theory", name: "Cosmetic Pro Kit", price: "Live Show Price", rating: 5, reviewCount: "2.5K", imageSrc: "https://img.b2bpic.net/free-photo/foundation-bottles-advertising-arrangement_23-2149511243.jpg", imageAlt: "Cosmetic Pro Kit" }, { id: "bundle-3", brand: "Glow Theory", name: "Cosmetic Pro Kit", price: "Live Show Price", rating: 5, reviewCount: "2.5K", imageSrc: "https://img.b2bpic.net/free-photo/foundation-bottles-advertising-arrangement_23-2149511243.jpg?_wi=1", imageAlt: "Cosmetic Pro Kit" },
]} ]}
gridVariant="uniform-all-items-equal" gridVariant="uniform-all-items-equal"
animationType="slide-up" animationType="slide-up"
@@ -219,7 +216,7 @@ export default function LandingPage() {
<div id="footer" data-section="footer"> <div id="footer" data-section="footer">
<FooterLogoReveal <FooterLogoReveal
logoText="Glow Theory" logoText="Glow Theory"
leftLink={{ text: "Customer Support", href: "/#contact-support" }} leftLink={{ text: "Customer Support", href: "#contact-support" }}
rightLink={{ text: "Privacy Policy", href: "/privacy" }} rightLink={{ text: "Privacy Policy", href: "/privacy" }}
className="bg-[--background] text-[--foreground] py-6 px-4" className="bg-[--background] text-[--foreground] py-6 px-4"
linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200" linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200"

View File

@@ -1,22 +1,11 @@
"use client"; "use client";
import { LegalSection } from "@/components/legal/LegalSection";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay"; import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; import LegalSection from '@/components/legal/LegalSection';
import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal';
export default function PrivacyPolicyPage() {
const navItems = [
{ name: "Home", id: "/" },
{ name: "About", id: "/#about" },
{ name: "Live Shows", id: "/#live-shows" },
{ name: "Bundles", id: "/#bundles" },
{ name: "Reviews", id: "/#reviews" },
{ name: "Contact", id: "/#contact-support" }
];
const WHATNOT_LINK = "https://www.whatnot.com/live/glowtheory";
export default function PrivacyPage() {
return ( return (
<ThemeProvider <ThemeProvider
defaultButtonVariant="elastic-effect" defaultButtonVariant="elastic-effect"
@@ -30,70 +19,63 @@ export default function PrivacyPolicyPage() {
secondaryButtonStyle="radial-glow" secondaryButtonStyle="radial-glow"
headingFontWeight="medium" headingFontWeight="medium"
> >
<ReactLenis root> <div id="nav" data-section="nav">
<div id="nav" data-section="nav"> <NavbarLayoutFloatingOverlay
<NavbarLayoutFloatingOverlay brandName="Glow Theory"
brandName="Glow Theory" navItems={[
navItems={navItems} { name: "Home", id: "/" },
button={{ text: "Join Live", href: WHATNOT_LINK }} { name: "Shop", id: "/shop" },
className="py-4 px-6 md:px-8" ]}
buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]" button={{ text: "Join Live", href: "/#live-shows" }}
buttonTextClassName="font-medium" className="py-4 px-6 md:px-8"
menuButtonClassName="!text-[--accent]" buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]"
/> buttonTextClassName="font-medium"
</div> />
<div id="privacy-policy" data-section="privacy-policy"> </div>
<LegalSection
layout="page" <div id="privacy-policy" data-section="privacy-policy">
title="Privacy Policy" <LegalSection
subtitle="Last updated: October 26, 2023" layout="page"
sections={[ title="Privacy Policy"
{ subtitle="Last Updated: October 26, 2023"
heading: "1. Introduction", content: [{ type: "paragraph", text: "Welcome to Glow Theory's Privacy Policy. We are committed to protecting your personal data and your right to privacy. This policy explains what information we collect, how we use it, and what rights you have in relation to it." }], sections={[
}, {
{ heading: "1. Introduction", content: [
heading: "2. Information We Collect", content: [ {
{ type: "paragraph", text: "We collect personal information that you voluntarily provide to us when you register on the website, express an interest in obtaining information about us or our products and services, when you participate in activities on the website (such as posting messages in our forums or entering competitions), or otherwise when you contact us." }, type: "paragraph", text: "Welcome to Glow Theory. We are committed to protecting your personal information and your right to privacy. If you have any questions or concerns about our policy, or our practices with regards to your personal information, please contact us at support@glowtheory.com."},
{ type: "list", items: ["Name, email address, phone number", "Billing and shipping addresses", "Payment information (handled securely by third-party processors)", "Interaction data on live shows and website browsing"] }, ],
], },
}, {
{ heading: "2. Information We Collect", content: [
{
type: "paragraph", text: "We collect personal information that you voluntarily provide to us when you express an interest in obtaining information about us or our products and services, when you participate in activities on the website or otherwise when you contact us."},
{
type: "list", items: [
"Personal Information: We may collect names, phone numbers, email addresses, mailing addresses, job titles, contact preferences, contact or authentication data, billing addresses, and other similar information.", "Payment Data: We may collect data necessary to process your payment if you make purchases, such as your payment instrument number (such as a credit card number), and the security code associated with your payment instrument."],
},
],
},
{
heading: "3. How We Use Your Information", content: [ heading: "3. How We Use Your Information", content: [
{ type: "paragraph", text: "We use personal information collected via our website for a variety of business purposes described below. We process your personal information for these purposes in reliance on our legitimate business interests, in order to enter into or perform a contract with you, with your consent, and/or for compliance with our legal obligations." }, {
{ type: "numbered-list", items: ["To facilitate account creation and logon process.", "To send you marketing and promotional communications.", "To post testimonials with your consent.", "To deliver products and services to you.", "To respond to your inquiries and offer support."] }, type: "paragraph", text: "We use personal information collected via our website for a variety of business purposes described below. We process your personal information for these purposes in reliance on our legitimate business interests, in order to enter into or perform a contract with you, with your consent, and/or for compliance with our legal obligations."
], }
}, ]
{ }
heading: "4. Sharing Your Information", content: [ ]}
{ type: "paragraph", text: "We only share information with your consent, to comply with laws, to provide you with services, to protect your rights, or to fulfill business obligations. Specifically, we may share your data with third-party vendors, service providers, contractors or agents who perform services for us or on our behalf and require access to such information to do that work. These include payment processing, data analysis, email delivery, hosting services, customer service, and marketing efforts." }, />
], </div>
},
{ <div id="footer" data-section="footer">
heading: "5. Your Privacy Rights", content: [ <FooterLogoReveal
{ type: "paragraph", text: "You have certain rights under applicable data protection laws. These may include the right (i) to request access and obtain a copy of your personal information, (ii) to request rectification or erasure; (iii) to restrict the processing of your personal information; and (iv) if applicable, to data portability. In certain circumstances, you may also have the right to object to the processing of your personal information. To make such a request, please use the contact details provided below." }, logoText="Glow Theory"
], leftLink={{ text: "Customer Support", href: "/#contact-support" }}
}, rightLink={{ text: "Home", href: "/" }}
{ className="bg-[--background] text-[--foreground] py-6 px-4"
heading: "6. Contact Us", content: [ linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200"
{ type: "paragraph", text: "If you have questions or comments about this policy, you may email us at support@glowtheory.com or contact us by post at:" }, logoClassName="text-2xl font-bold tracking-tight"
{ type: "paragraph", text: "Glow Theory\n123 Beauty Lane\nMiami, FL 33101\nUSA" }, />
], </div>
},
]}
className="bg-[--background] text-[--foreground]"
/>
</div>
<div id="footer" data-section="footer">
<FooterLogoReveal
logoText="Glow Theory"
leftLink={{ text: "Customer Support", href: "/#contact-support" }}
rightLink={{ text: "Privacy Policy", href: "/privacy" }}
className="bg-[--background] text-[--foreground] py-6 px-4"
linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200"
logoClassName="text-2xl font-bold tracking-tight"
/>
</div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -2,7 +2,6 @@
import { Suspense, use, useCallback } from "react"; import { Suspense, use, useCallback } from "react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay'; import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal'; import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal';
@@ -74,15 +73,6 @@ function ProductPageContent({ params }: ProductPageProps) {
await checkout(getCheckoutItems(), { successUrl: currentUrl.toString() }); await checkout(getCheckoutItems(), { successUrl: currentUrl.toString() });
}, [cartItems, checkout, getCheckoutItems]); }, [cartItems, checkout, getCheckoutItems]);
const navItems = [
{ name: "Home", id: "/" },
{ name: "About", id: "/#about" },
{ name: "Live Shows", id: "/#live-shows" },
{ name: "Bundles", id: "/#bundles" },
{ name: "Reviews", id: "/#reviews" },
{ name: "Contact", id: "/#contact-support" }
];
if (isLoading) { if (isLoading) {
return ( return (
<ThemeProvider <ThemeProvider
@@ -97,34 +87,31 @@ function ProductPageContent({ params }: ProductPageProps) {
secondaryButtonStyle="radial-glow" secondaryButtonStyle="radial-glow"
headingFontWeight="medium" headingFontWeight="medium"
> >
<ReactLenis root> <div id="navbar" data-section="navbar">
<div id="navbar" data-section="navbar"> <NavbarLayoutFloatingOverlay
<NavbarLayoutFloatingOverlay brandName="Glow Theory"
brandName="Glow Theory" navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]}
navItems={navItems} button={{ text: "Cart", onClick: () => setCartOpen(true) }}
button={{ text: "Cart", onClick: () => setCartOpen(true) }} className="py-4 px-6 md:px-8"
className="py-4 px-6 md:px-8" buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]"
buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]" buttonTextClassName="font-medium"
buttonTextClassName="font-medium" />
menuButtonClassName="!text-[--accent]" </div>
/> <div id="loading-section" data-section="loading-section">
</div> <main className="min-h-screen flex items-center justify-center pt-20">
<div id="loading-section" data-section="loading-section"> <p className="text-foreground">Loading product...</p>
<main className="min-h-screen flex items-center justify-center pt-20"> </main>
<p className="text-foreground">Loading product...</p> </div>
</main> <div id="footer" data-section="footer">
</div> <FooterLogoReveal
<div id="footer" data-section="footer"> logoText="Glow Theory"
<FooterLogoReveal leftLink={{ text: "Customer Support", href: "/#contact-support" }}
logoText="Glow Theory" rightLink={{ text: "Privacy Policy", href: "/privacy" }}
leftLink={{ text: "Customer Support", href: "/#contact-support" }} className="bg-[--background] text-[--foreground] py-6 px-4"
rightLink={{ text: "Privacy Policy", href: "/privacy" }} linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200"
className="bg-[--background] text-[--foreground] py-6 px-4" logoClassName="text-2xl font-bold tracking-tight"
linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200" />
logoClassName="text-2xl font-bold tracking-tight" </div>
/>
</div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }
@@ -143,42 +130,39 @@ function ProductPageContent({ params }: ProductPageProps) {
secondaryButtonStyle="radial-glow" secondaryButtonStyle="radial-glow"
headingFontWeight="medium" headingFontWeight="medium"
> >
<ReactLenis root> <div id="navbar" data-section="navbar">
<div id="navbar" data-section="navbar"> <NavbarLayoutFloatingOverlay
<NavbarLayoutFloatingOverlay brandName="Glow Theory"
brandName="Glow Theory" navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]}
navItems={navItems} button={{ text: "Cart", onClick: () => setCartOpen(true) }}
button={{ text: "Cart", onClick: () => setCartOpen(true) }} className="py-4 px-6 md:px-8"
className="py-4 px-6 md:px-8" buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]"
buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]" buttonTextClassName="font-medium"
buttonTextClassName="font-medium" />
menuButtonClassName="!text-[--accent]" </div>
/> <div id="not-found-section" data-section="not-found-section">
</div> <main className="min-h-screen flex items-center justify-center pt-20">
<div id="not-found-section" data-section="not-found-section"> <div className="text-center">
<main className="min-h-screen flex items-center justify-center pt-20"> <p className="text-foreground mb-4">Product not found</p>
<div className="text-center"> <button
<p className="text-foreground mb-4">Product not found</p> onClick={() => router.push("/shop")}
<button className="primary-button px-6 py-2 rounded-theme text-primary-cta-text"
onClick={() => router.push("/shop")} >
className="primary-button px-6 py-2 rounded-theme text-primary-cta-text" Back to Shop
> </button>
Back to Shop </div>
</button> </main>
</div> </div>
</main> <div id="footer" data-section="footer">
</div> <FooterLogoReveal
<div id="footer" data-section="footer"> logoText="Glow Theory"
<FooterLogoReveal leftLink={{ text: "Customer Support", href: "/#contact-support" }}
logoText="Glow Theory" rightLink={{ text: "Privacy Policy", href: "/privacy" }}
leftLink={{ text: "Customer Support", href: "/#contact-support" }} className="bg-[--background] text-[--foreground] py-6 px-4"
rightLink={{ text: "Privacy Policy", href: "/privacy" }} linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200"
className="bg-[--background] text-[--foreground] py-6 px-4" logoClassName="text-2xl font-bold tracking-tight"
linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200" />
logoClassName="text-2xl font-bold tracking-tight" </div>
/>
</div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }
@@ -196,65 +180,62 @@ function ProductPageContent({ params }: ProductPageProps) {
secondaryButtonStyle="radial-glow" secondaryButtonStyle="radial-glow"
headingFontWeight="medium" headingFontWeight="medium"
> >
<ReactLenis root> <div id="navbar" data-section="navbar">
<div id="navbar" data-section="navbar"> <NavbarLayoutFloatingOverlay
<NavbarLayoutFloatingOverlay brandName="Glow Theory"
brandName="Glow Theory" navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]}
navItems={navItems} button={{ text: "Cart", onClick: () => setCartOpen(true) }}
button={{ text: "Cart", onClick: () => setCartOpen(true) }} className="py-4 px-6 md:px-8"
className="py-4 px-6 md:px-8" buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]"
buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]" buttonTextClassName="font-medium"
buttonTextClassName="font-medium" />
menuButtonClassName="!text-[--accent]" </div>
/> <div id="product-detail-card" data-section="product-detail-card">
</div> <ProductDetailCard
<div id="product-detail-card" data-section="product-detail-card"> layout="page"
<ProductDetailCard name={product.name}
layout="page" price={product.price}
name={product.name} salePrice={meta.salePrice}
price={product.price} rating={product.rating || 0}
salePrice={meta.salePrice} description={product.description}
rating={product.rating || 0} images={images}
description={product.description} variants={variants.length > 0 ? variants : undefined}
images={images} quantity={quantityVariant}
variants={variants.length > 0 ? variants : undefined} ribbon={meta.ribbon}
quantity={quantityVariant} inventoryStatus={meta.inventoryStatus}
ribbon={meta.ribbon} inventoryQuantity={meta.inventoryQuantity}
inventoryStatus={meta.inventoryStatus} sku={meta.sku}
inventoryQuantity={meta.inventoryQuantity} buttons={[
sku={meta.sku} { text: "Add To Cart", onClick: handleAddToCart },
buttons={[ { text: "Buy Now", onClick: handleBuyNow },
{ text: "Add To Cart", onClick: handleAddToCart }, ]}
{ text: "Buy Now", onClick: handleBuyNow }, />
]} </div>
/> <div id="product-cart" data-section="product-cart">
</div> <ProductCart
<div id="product-cart" data-section="product-cart"> isOpen={cartOpen}
<ProductCart onClose={() => setCartOpen(false)}
isOpen={cartOpen} items={cartItems}
onClose={() => setCartOpen(false)} onQuantityChange={updateQuantity}
items={cartItems} onRemove={removeItem}
onQuantityChange={updateQuantity} total={`$${cartTotal}`}
onRemove={removeItem} buttons={[
total={`$${cartTotal}`} {
buttons={[ text: isCheckoutLoading ? "Processing..." : "Check Out", onClick: handleCheckout,
{ },
text: isCheckoutLoading ? "Processing..." : "Check Out", onClick: handleCheckout, ]}
}, />
]} </div>
/> <div id="footer" data-section="footer">
</div> <FooterLogoReveal
<div id="footer" data-section="footer"> logoText="Glow Theory"
<FooterLogoReveal leftLink={{ text: "Customer Support", href: "/#contact-support" }}
logoText="Glow Theory" rightLink={{ text: "Privacy Policy", href: "/privacy" }}
leftLink={{ text: "Customer Support", href: "/#contact-support" }} className="bg-[--background] text-[--foreground] py-6 px-4"
rightLink={{ text: "Privacy Policy", href: "/privacy" }} linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200"
className="bg-[--background] text-[--foreground] py-6 px-4" logoClassName="text-2xl font-bold tracking-tight"
linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200" />
logoClassName="text-2xl font-bold tracking-tight" </div>
/>
</div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -1,7 +1,6 @@
"use client"; "use client";
import { Suspense, useCallback } from "react"; import { Suspense, useCallback } from "react";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay'; import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal'; import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal';
@@ -30,7 +29,10 @@ function ShopPageContent() {
getCheckoutItems, getCheckoutItems,
} = useCart(); } = useCart();
const { checkout, isLoading: isCheckoutLoading } = useCheckout(); const {
checkout,
isLoading: isCheckoutLoading
} = useCheckout();
const handleCheckout = useCallback(async () => { const handleCheckout = useCallback(async () => {
if (cartItems.length === 0) return; if (cartItems.length === 0) return;
@@ -41,15 +43,6 @@ function ShopPageContent() {
await checkout(getCheckoutItems(), { successUrl: currentUrl.toString() }); await checkout(getCheckoutItems(), { successUrl: currentUrl.toString() });
}, [cartItems, checkout, getCheckoutItems]); }, [cartItems, checkout, getCheckoutItems]);
const navItems = [
{ name: "Home", id: "/" },
{ name: "About", id: "/#about" },
{ name: "Live Shows", id: "/#live-shows" },
{ name: "Bundles", id: "/#bundles" },
{ name: "Reviews", id: "/#reviews" },
{ name: "Contact", id: "/#contact-support" }
];
if (isLoading) { if (isLoading) {
return ( return (
<ThemeProvider <ThemeProvider
@@ -64,34 +57,31 @@ function ShopPageContent() {
secondaryButtonStyle="radial-glow" secondaryButtonStyle="radial-glow"
headingFontWeight="medium" headingFontWeight="medium"
> >
<ReactLenis root> <div id="navbar" data-section="navbar">
<div id="navbar" data-section="navbar"> <NavbarLayoutFloatingOverlay
<NavbarLayoutFloatingOverlay brandName="Glow Theory"
brandName="Glow Theory" navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]}
navItems={navItems} button={{ text: "Cart", onClick: () => setCartOpen(true) }}
button={{ text: "Cart", onClick: () => setCartOpen(true) }} className="py-4 px-6 md:px-8"
className="py-4 px-6 md:px-8" buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]"
buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]" buttonTextClassName="font-medium"
buttonTextClassName="font-medium" />
menuButtonClassName="!text-[--accent]" </div>
/> <div id="loading-section" data-section="loading-section">
</div> <main className="min-h-screen flex items-center justify-center pt-20">
<div id="loading-section" data-section="loading-section"> <p className="text-foreground">Loading products...</p>
<main className="min-h-screen flex items-center justify-center pt-20"> </main>
<p className="text-foreground">Loading products...</p> </div>
</main> <div id="footer" data-section="footer">
</div> <FooterLogoReveal
<div id="footer" data-section="footer"> logoText="Glow Theory"
<FooterLogoReveal leftLink={{ text: "Customer Support", href: "/#contact-support" }}
logoText="Glow Theory" rightLink={{ text: "Privacy Policy", href: "/privacy" }}
leftLink={{ text: "Customer Support", href: "/#contact-support" }} className="bg-[--background] text-[--foreground] py-6 px-4"
rightLink={{ text: "Privacy Policy", href: "/privacy" }} linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200"
className="bg-[--background] text-[--foreground] py-6 px-4" logoClassName="text-2xl font-bold tracking-tight"
linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200" />
logoClassName="text-2xl font-bold tracking-tight" </div>
/>
</div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }
@@ -109,55 +99,52 @@ function ShopPageContent() {
secondaryButtonStyle="radial-glow" secondaryButtonStyle="radial-glow"
headingFontWeight="medium" headingFontWeight="medium"
> >
<ReactLenis root> <div id="navbar" data-section="navbar">
<div id="navbar" data-section="navbar"> <NavbarLayoutFloatingOverlay
<NavbarLayoutFloatingOverlay brandName="Glow Theory"
brandName="Glow Theory" navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]}
navItems={navItems} button={{ text: "Cart", onClick: () => setCartOpen(true) }}
button={{ text: "Cart", onClick: () => setCartOpen(true) }} className="py-4 px-6 md:px-8"
className="py-4 px-6 md:px-8" buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]"
buttonClassName="shadow-md !bg-[--primary-cta] !text-[--primary-cta-text]" buttonTextClassName="font-medium"
buttonTextClassName="font-medium" />
menuButtonClassName="!text-[--accent]" </div>
/> <div id="product-catalog" data-section="product-catalog">
</div> <ProductCatalog
<div id="product-catalog" data-section="product-catalog"> layout="page"
<ProductCatalog products={products}
layout="page" searchValue={search}
products={products} onSearchChange={setSearch}
searchValue={search} searchPlaceholder="Search products..."
onSearchChange={setSearch} filters={filters}
searchPlaceholder="Search products..." emptyMessage="No products found"
filters={filters} />
emptyMessage="No products found" </div>
/> <div id="product-cart" data-section="product-cart">
</div> <ProductCart
<div id="product-cart" data-section="product-cart"> isOpen={cartOpen}
<ProductCart onClose={() => setCartOpen(false)}
isOpen={cartOpen} items={cartItems}
onClose={() => setCartOpen(false)} onQuantityChange={updateQuantity}
items={cartItems} onRemove={removeItem}
onQuantityChange={updateQuantity} total={`$${cartTotal}`}
onRemove={removeItem} buttons={[
total={`$${cartTotal}`} {
buttons={[ text: isCheckoutLoading ? "Processing..." : "Check Out", onClick: handleCheckout,
{ },
text: isCheckoutLoading ? "Processing..." : "Check Out", onClick: handleCheckout, ]}
}, />
]} </div>
/> <div id="footer" data-section="footer">
</div> <FooterLogoReveal
<div id="footer" data-section="footer"> logoText="Glow Theory"
<FooterLogoReveal leftLink={{ text: "Customer Support", href: "/#contact-support" }}
logoText="Glow Theory" rightLink={{ text: "Privacy Policy", href: "/privacy" }}
leftLink={{ text: "Customer Support", href: "/#contact-support" }} className="bg-[--background] text-[--foreground] py-6 px-4"
rightLink={{ text: "Privacy Policy", href: "/privacy" }} linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200"
className="bg-[--background] text-[--foreground] py-6 px-4" logoClassName="text-2xl font-bold tracking-tight"
linkClassName="text-[--foreground] hover:text-[--primary-cta] transition-colors duration-200" />
logoClassName="text-2xl font-bold tracking-tight" </div>
/>
</div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }