17 Commits

Author SHA1 Message Date
ed19d6498b Update src/app/page.tsx 2026-02-21 14:34:03 +00:00
4bd99a4c6a Update src/app/shop/page.tsx 2026-02-21 14:33:19 +00:00
49b50c82fa Update src/app/shop/[id]/page.tsx 2026-02-21 14:33:18 +00:00
c602d7a26c Update src/app/page.tsx 2026-02-21 14:33:18 +00:00
747b00d839 Update src/app/layout.tsx 2026-02-21 14:33:17 +00:00
40216b35a7 Update src/app/blog/page.tsx 2026-02-21 14:33:16 +00:00
2362a12910 Update src/app/shop/page.tsx 2026-02-21 14:30:28 +00:00
d44f690532 Update src/app/shop/[id]/page.tsx 2026-02-21 14:30:27 +00:00
2f93c67fb0 Update src/app/page.tsx 2026-02-21 14:30:27 +00:00
5bccdb8433 Update src/app/layout.tsx 2026-02-21 14:30:26 +00:00
2ee0b19982 Update src/app/blog/page.tsx 2026-02-21 14:30:25 +00:00
82e5c7f12a Update src/app/shop/page.tsx 2026-02-21 14:23:36 +00:00
7838024917 Update src/app/shop/[id]/page.tsx 2026-02-21 14:23:36 +00:00
a2ac2dd3f0 Update src/app/page.tsx 2026-02-21 14:23:35 +00:00
47add6a9f4 Update src/app/layout.tsx 2026-02-21 14:23:34 +00:00
c466ffd5f2 Update src/app/blog/page.tsx 2026-02-21 14:23:33 +00:00
1c1597c0b8 Merge version_3 into main
Merge version_3 into main
2026-02-21 14:16:03 +00:00
5 changed files with 454 additions and 1548 deletions

View File

@@ -1,6 +1,5 @@
"use client";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import { useBlogPosts } from "@/hooks/useBlogPosts";
@@ -16,6 +15,17 @@ import FooterBaseCard from '@/components/sections/footer/FooterBaseCard';
export default function BlogPage() {
const { posts, isLoading } = useBlogPosts();
const navItems = [
{ name: "Home", id: "/" },
{ name: "Shop", id: "/shop" },
{ name: "Blog", id: "/blog" },
{ name: "Features", id: "/#features" },
{ name: "Products", id: "/#products" },
{ name: "Testimonials", id: "/#testimonials" },
{ name: "FAQ", id: "/#faq" },
{ name: "Contact", id: "/#contact" }
];
return (
<ThemeProvider
defaultButtonVariant="slide-background"
@@ -29,80 +39,76 @@ export default function BlogPage() {
secondaryButtonStyle="layered"
headingFontWeight="extrabold"
>
<ReactLenis root>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
navItems={[
{ name: "Features", id: "#features" }, { name: "Products", id: "#products" }, { name: "Testimonials", id: "#testimonials" }, { name: "FAQ", id: "#faq" }, { name: "Contact", id: "#contact" }
]}
brandName="Biorogo"
button={{ text: "Shop Now", href: "/shop" }}
className="py-4 px-6 md:px-8 lg:px-12"
navItemClassName="text-foreground hover:text-primary-cta"
buttonClassName=""
buttonTextClassName=""
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
navItems={navItems}
brandName="Biorogo"
button={{ text: "Shop Now", href: "/shop" }}
className="py-4 px-6 md:px-8 lg:px-12"
navItemClassName="text-foreground hover:text-primary-cta"
buttonClassName=""
buttonTextClassName=""
/>
</div>
{isLoading ? (
<div className="w-content-width mx-auto py-20 text-center">
<p className="text-foreground">Loading posts...</p>
</div>
) : (
<div id="blog" data-section="blog">
<BlogCardTwo
blogs={posts}
title="Latest Articles"
description="Insights and updates from our team"
animationType="slide-up"
textboxLayout="default"
useInvertedBackground={false}
carouselMode="buttons"
/>
</div>
)}
{isLoading ? (
<div className="w-content-width mx-auto py-20 text-center">
<p className="text-foreground">Loading posts...</p>
</div>
) : (
<div id="blog" data-section="blog">
<BlogCardTwo
blogs={posts}
title="Latest Articles"
description="Insights and updates from our team"
animationType="slide-up"
textboxLayout="default"
useInvertedBackground={false}
carouselMode="buttons"
/>
</div>
)}
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{
title: "Shop", items: [
{ label: "All Cups", href: "/#products" },
{ label: "Ceramic", href: "/#products" },
{ label: "Glassware", href: "/#products" },
{ label: "Travel Mugs", href: "/#products" },
],
},
{
title: "Company", items: [
{ label: "About Us", href: "/#features" },
{ label: "Testimonials", href: "/#testimonials" },
{ label: "FAQ", href: "/#faq" },
],
},
{
title: "Support", items: [
{ label: "Contact Us", href: "/#contact" },
{ label: "Shipping", href: "/shipping" },
{ label: "Returns", href: "/returns" },
{ label: "Sitemap", href: "/sitemap" },
],
},
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
</ReactLenis>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{
title: "Shop", items: [
{ label: "All Cups", href: "/shop" },
{ label: "Ceramic", href: "/shop" },
{ label: "Glassware", href: "/shop" },
{ label: "Travel Mugs", href: "/shop" },
],
},
{
title: "Company", items: [
{ label: "About Us", href: "/#features" },
{ label: "Testimonials", href: "/#testimonials" },
{ label: "FAQ", href: "/#faq" },
],
},
{
title: "Support", items: [
{ label: "Contact Us", href: "/#contact" },
{ label: "Shipping", href: "/shipping" },
{ label: "Returns", href: "/returns" },
{ label: "Sitemap", href: "/sitemap" },
],
},
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
</ThemeProvider>
);
}

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@ import ContactSplit from '@/components/sections/contact/ContactSplit';
import FaqDouble from '@/components/sections/faq/FaqDouble';
import FeatureCardSeven from '@/components/sections/feature/FeatureCardSeven';
import FooterBaseCard from '@/components/sections/footer/FooterBaseCard';
import HeroOverlay from '@/components/sections/hero/HeroOverlay';
import HeroSplitDualMedia from '@/components/sections/hero/HeroSplitDualMedia';
import ProductCardThree from '@/components/sections/product/ProductCardThree';
import TestimonialCardFive from '@/components/sections/testimonial/TestimonialCardFive';
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
@@ -27,7 +27,7 @@ export default function LandingPage() {
>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
navItems={[{ name: "Features", id: "features" }, { name: "Products", id: "products" }, { name: "Testimonials", id: "testimonials" }, { name: "FAQ", id: "faq" }, { name: "Contact", id: "contact" }]}
navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }, { name: "Blog", id: "/blog" }, { name: "Features", id: "features" }, { name: "Products", id: "products" }, { name: "Testimonials", id: "testimonials" }, { name: "FAQ", id: "faq" }, { name: "Contact", id: "contact" }]}
brandName="Biorogo"
button={{ text: "Shop Now", href: "#products" }}
className="py-4 px-6 md:px-8 lg:px-12"
@@ -36,21 +36,23 @@ export default function LandingPage() {
</div>
<div id="hero" data-section="hero">
<HeroOverlay
title="Elevate Your Daily Rituals with Biorogo Cups"
description="Discover our curated collection of beautifully designed, sustainable, and handcrafted cups for every occasion. Experience the perfect blend of aesthetics and functionality."
<HeroSplitDualMedia
title="Elevate Your Daily Rituals with Biorogo's Crafted Cups"
description="Discover our beautifully designed, sustainable, and handcrafted cups for every occasion. Experience the perfect blend of aesthetics and functionality tailored for your daily joy."
background={{ variant: 'plain' }}
tag="Artistry in Every Sip"
tagIcon={Sparkles}
tagAnimation="slide-up"
buttons={[{ text: "Explore Collection", href: "#products" }, { text: "Learn More", href: "#features" }]}
buttons={[{ text: "Explore Collection", href: "#products" }, { text: "Learn More", href: "#features" }]}
buttonAnimation="slide-up"
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_34my1kGeblbsCcwUUCcjBY9WFkg/uploaded-1771505618512-apxd95pq.mp4"
imageAlt="Collection of elegant Biorogo cups"
mediaItems={[
{ imageSrc: "https://images.unsplash.com/photo-1579294246101-526487e47a50?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", imageAlt: "Coffee being poured into a Biorogo cup" },
{ imageSrc: "https://images.unsplash.com/photo-1549488339-a99f1807d476?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", imageAlt: "Person holding a handcrafted Biorogo mug" }
]}
mediaAnimation="opacity"
rating={5}
ratingText="Loved by Thousands of Customers"
ariaLabel="Welcome to Biorogo Cups"
textPosition="bottom-left"
showBlur={true}
showDimOverlay={false}
titleClassName="text-foreground text-4xl sm:text-5xl md:text-6xl lg:text-7xl font-extrabold"
descriptionClassName="text-foreground/80 text-lg md:text-xl"
tagClassName="text-accent text-sm md:text-base"
@@ -65,7 +67,7 @@ export default function LandingPage() {
features={[
{ id: 1, title: "Artisan Craftsmanship", description: "Each Biorogo cup is meticulously handcrafted by skilled artisans, ensuring unique character and superior quality that stands the test of time.", imageSrc: "https://img.b2bpic.net/free-photo/couple-with-brown-aprons-making-vase_1157-30724.jpg", imageAlt: "Hands shaping clay on a pottery wheel." },
{ id: 2, title: "Sustainable Materials", description: "We prioritize the planet by sourcing only eco-friendly and sustainably harvested materials, offering you beautiful products with a minimal environmental footprint.", imageSrc: "https://img.b2bpic.net/free-photo/close-up-couple-holding-cup-coffee_23-2147918181.jpg", imageAlt: "Green leaves growing out of a recycled cup." },
{ id: 3, title: "Thoughtful Design", description: "Our designs blend modern aesthetics with ergonomic comfort, making every sip an experience. From minimalist elegance to vibrant patterns, there's a Biorogo cup for every style.", imageSrc: "https://img.b2bpic.net/free-photo/three-cups-coffee-wooden-board_114579-52730.jpg", imageAlt: "A collection of stylish, modern designed cups." }
{ id: 3, title: "Thoughtful Design", description: "Our designs blend modern aesthetics with ergonomic comfort, making every sip an experience. From minimalist elegance to vibrant patterns, there's a Biorogo cup for every style.", imageSrc: "https://img.b2bpic.net/free-photo/three-cups-coffee-wooden-board_114579-52730.jpg?_wi=1", imageAlt: "A collection of stylish, modern designed cups." }
]}
animationType="slide-up"
textboxLayout="default"
@@ -82,10 +84,10 @@ export default function LandingPage() {
<div id="products" data-section="products">
<ProductCardThree
products={[
{ id: "1", name: "Minimalist Ceramic Mug", price: "$24.99", imageSrc: "https://img.b2bpic.net/free-photo/hot-espresso-tea-coffee-food_1203-4245.jpg", imageAlt: "A simple white ceramic mug" },
{ id: "2", name: "Eco-Friendly Glass Tumbler", price: "$19.99", imageSrc: "https://img.b2bpic.net/free-photo/coffee-cups-table_93675-130857.jpg", imageAlt: "A clear, eco-friendly glass tumbler" },
{ id: "3", name: "Bamboo Travel Cup", price: "$29.99", imageSrc: "https://img.b2bpic.net/free-photo/three-cups-coffee-wooden-board_114579-52730.jpg", imageAlt: "A reusable bamboo travel cup with lid" },
{ id: "4", name: "Artisan Espresso Cup Set", price: "$39.99", imageSrc: "https://img.b2bpic.net/free-photo/upside-down-cups-rack_53876-63375.jpg", imageAlt: "A small, artisan-crafted espresso cup" }
{ id: "1", name: "Minimalist Ceramic Mug", price: "$24.99", imageSrc: "https://img.b2bpic.net/free-photo/hot-espresso-tea-coffee-food_1203-4245.jpg?_wi=1", imageAlt: "A simple white ceramic mug" },
{ id: "2", name: "Eco-Friendly Glass Tumbler", price: "$19.99", imageSrc: "https://img.b2bpic.net/free-photo/coffee-cups-table_93675-130857.jpg?_wi=1", imageAlt: "A clear, eco-friendly glass tumbler" },
{ id: "3", name: "Bamboo Travel Cup", price: "$29.99", imageSrc: "https://img.b2bpic.net/free-photo/three-cups-coffee-wooden-board_114579-52730.jpg?_wi=2", imageAlt: "A reusable bamboo travel cup with lid" },
{ id: "4", name: "Artisan Espresso Cup Set", price: "$39.99", imageSrc: "https://img.b2bpic.net/free-photo/upside-down-cups-rack_53876-63375.jpg?_wi=1", imageAlt: "A small, artisan-crafted espresso cup" }
]}
carouselMode="buttons"
gridVariant="four-items-2x2-equal-grid"
@@ -108,10 +110,10 @@ export default function LandingPage() {
<div id="testimonials" data-section="testimonials">
<TestimonialCardFive
testimonials={[
{ id: "1", name: "Sarah L., Coffee Enthusiast", date: "Date: October 26, 2023", title: "My new favorite mug!", quote: "The craftsmanship of my Biorogo mug is exceptional. It keeps my coffee warm longer and feels so comfortable in hand. Truly elevates my morning ritual.", tag: "Ceramic Collection", avatarSrc: "https://img.b2bpic.net/free-photo/portrait-young-smiling-pretty-girl-plaid-shirt-posing_114579-70643.jpg", avatarAlt: "Sarah L. avatar", imageSrc: "https://img.b2bpic.net/free-photo/hot-espresso-tea-coffee-food_1203-4245.jpg", imageAlt: "Minimalist ceramic mug" },
{ id: "2", name: "Mark T., Eco-Conscious Shopper", date: "Date: November 15, 2023", title: "Stylish and sustainable", quote: "I love my Biorogo glass tumbler. It's perfect for my iced coffees and I feel good knowing it's made from recycled materials. Plus, it looks great!", tag: "Glassware Line", avatarSrc: "https://img.b2bpic.net/free-photo/young-woman-green-cozy-large-knitted-sweater-cute-smiling-with-crossed-hands_343596-7420.jpg", avatarAlt: "Mark T. avatar", imageSrc: "https://img.b2bpic.net/free-photo/coffee-cups-table_93675-130857.jpg", imageAlt: "Eco-friendly glass tumbler" },
{ id: "3", name: "Emily R., Daily Commuter", date: "Date: December 01, 2023", title: "Travel cup essential", quote: "The bamboo travel cup is a game-changer. It's lightweight, spill-proof, and keeps my tea hot during my busy commute. Highly recommend!", tag: "Travel Gear", avatarSrc: "https://img.b2bpic.net/free-photo/close-up-confident-corporate-woman-professional-entrepreneur-smiling-cross-arms-chest-smiling-enthusiastic-standing-white-background_1258-85600.jpg", avatarAlt: "Emily R. avatar", imageSrc: "https://img.b2bpic.net/free-photo/three-cups-coffee-wooden-board_114579-52730.jpg", imageAlt: "Bamboo travel cup" },
{ id: "4", name: "David K., Home Barista", date: "Date: January 10, 2024", title: "Perfect espresso experience", quote: "The artisan espresso cups are beautiful and truly enhance the coffee experience. The quality is evident, and they're a joy to use daily.", tag: "Espresso Series", avatarSrc: "https://img.b2bpic.net/free-photo/smiling-face-gorgeous-latin-american-woman_1262-5766.jpg", avatarAlt: "David K. avatar", imageSrc: "https://img.b2bpic.net/free-photo/upside-down-cups-rack_53876-63375.jpg", imageAlt: "Artisan espresso cup" }
{ id: "1", name: "Sarah L., Coffee Enthusiast", date: "Date: October 26, 2023", title: "My new favorite mug!", quote: "The craftsmanship of my Biorogo mug is exceptional. It keeps my coffee warm longer and feels so comfortable in hand. Truly elevates my morning ritual.", tag: "Ceramic Collection", avatarSrc: "https://img.b2bpic.net/free-photo/portrait-young-smiling-pretty-girl-plaid-shirt-posing_114579-70643.jpg", avatarAlt: "Sarah L. avatar", imageSrc: "https://img.b2bpic.net/free-photo/hot-espresso-tea-coffee-food_1203-4245.jpg?_wi=2", imageAlt: "Minimalist ceramic mug" },
{ id: "2", name: "Mark T., Eco-Conscious Shopper", date: "Date: November 15, 2023", title: "Stylish and sustainable", quote: "I love my Biorogo glass tumbler. It's perfect for my iced coffees and I feel good knowing it's made from recycled materials. Plus, it looks great!", tag: "Glassware Line", avatarSrc: "https://img.b2bpic.net/free-photo/young-woman-green-cozy-large-knitted-sweater-cute-smiling-with-crossed-hands_343596-7420.jpg", avatarAlt: "Mark T. avatar", imageSrc: "https://img.b2bpic.net/free-photo/coffee-cups-table_93675-130857.jpg?_wi=2", imageAlt: "Eco-friendly glass tumbler" },
{ id: "3", name: "Emily R., Daily Commuter", date: "Date: December 01, 2023", title: "Travel cup essential", quote: "The bamboo travel cup is a game-changer. It's lightweight, spill-proof, and keeps my tea hot during my busy commute. Highly recommend!", tag: "Travel Gear", avatarSrc: "https://img.b2bpic.net/free-photo/close-up-confident-corporate-woman-professional-entrepreneur-smiling-cross-arms-chest-smiling-enthusiastic-standing-white-background_1258-85600.jpg", avatarAlt: "Emily R. avatar", imageSrc: "https://img.b2bpic.net/free-photo/three-cups-coffee-wooden-board_114579-52730.jpg?_wi=3", imageAlt: "Bamboo travel cup" },
{ id: "4", name: "David K., Home Barista", date: "Date: January 10, 2024", title: "Perfect espresso experience", quote: "The artisan espresso cups are beautiful and truly enhance the coffee experience. The quality is evident, and they're a joy to use daily.", tag: "Espresso Series", avatarSrc: "https://img.b2bpic.net/free-photo/smiling-face-gorgeous-latin-american-woman_1262-5766.jpg", avatarAlt: "David K. avatar", imageSrc: "https://img.b2bpic.net/free-photo/upside-down-cups-rack_53876-63375.jpg?_wi=2", imageAlt: "Artisan espresso cup" }
]}
title="What Our Customers Say"
description="Hear from the Biorogo community about their favorite cups and why they love them."

View File

@@ -2,98 +2,276 @@
import { use, useCallback } from "react";
import { useRouter } from "next/navigation";
import ReactLenis from "lenis/react";
import { ThemeProvider } => {
const navigationItems = [
{ name: "Features", id: "/#features" },
{ name: "Products", id: "/#products" },
{ name: "Testimonials", id: "/#testimonials" },
{ name: "FAQ", id: "/#faq" },
{ name: "Contact", id: "/#contact" }
];
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingInline from '@/components/navbar/NavbarLayoutFloatingInline';
import ProductDetailCard from "@/components/ecommerce/productDetail/ProductDetailCard";
import ProductCart from "@/components/ecommerce/cart/ProductCart";
import { useProductDetail } from "@/hooks/useProductDetail";
import { useCart } from "@/hooks/useCart";
import { useCheckout } from "@/hooks/useCheckout";
import FooterBaseCard from '@/components/sections/footer/FooterBaseCard';
return (
<ThemeProvider
defaultButtonVariant="slide-background"
defaultTextAnimation="background-highlight"
borderRadius="rounded"
contentWidth="small"
sizing="largeSmall"
background="none"
cardStyle="inset"
primaryButtonStyle="primary-glow"
secondaryButtonStyle="layered"
headingFontWeight="extrabold"
>
<ReactLenis root>
<div id="navbar" data-section="navbar">
<NavbarLayoutFloatingInline
navItems={navigationItems}
brandName="Biorogo"
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
className="py-4 px-6 md:px-8 lg:px-12"
navItemClassName="text-foreground hover:text-primary-cta"
buttonClassName=""
buttonTextClassName=""
/>
</div>
<div id="product-detail-card" data-section="product-detail-card">
<ProductDetailCard
layout="page"
name={product.name}
price={product.price}
salePrice={meta.salePrice}
rating={product.rating || 0}
description={product.description}
images={images}
variants={variants.length > 0 ? variants : undefined}
quantity={quantityVariant}
ribbon={meta.ribbon}
inventoryStatus={meta.inventoryStatus}
inventoryQuantity={meta.inventoryQuantity}
sku={meta.sku}
buttons={[
{ text: "Add To Cart", onClick: handleAddToCart },
{ text: "Buy Now", onClick: handleBuyNow },
]}
/>
</div>
<div id="product-cart" data-section="product-cart">
<ProductCart
isOpen={cartOpen}
onClose={() => setCartOpen(false)}
items={cartItems}
onQuantityChange={updateQuantity}
onRemove={removeItem}
total={`$${cartTotal}`}
buttons={[
{
text: isCheckoutLoading ? "Processing..." : "Check Out", onClick: handleCheckout,
},
]}
/>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{ title: "Shop", items: [{ label: "All Cups", href: "/#products" }, { label: "Ceramic", href: "/#products" }, { label: "Glassware", href: "/#products" }, { label: "Travel Mugs", href: "/#products" }] },
{ title: "Company", items: [{ label: "About Us", href: "/#features" }, { label: "Testimonials", href: "/#testimonials" }, { label: "FAQ", href: "/#faq" }] },
{ title: "Support", items: [{ label: "Contact Us", href: "/#contact" }, { label: "Shipping", href: "/shipping" }, { label: "Returns", href: "/returns" }, { label: "Sitemap", href: "/sitemap" }] }
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
</ReactLenis>
</ThemeProvider>
);
interface ProductPageProps {
params: Promise<{ id: string }>;
}
export default function ProductPage({ params }: ProductPageProps) {
const { id } = use(params);
const router = useRouter();
const {
product,
isLoading,
images,
meta,
variants,
quantityVariant,
selectedQuantity,
createCartItem,
} = useProductDetail(id);
const {
items: cartItems,
isOpen: cartOpen,
setIsOpen: setCartOpen,
addItem,
updateQuantity,
removeItem,
total: cartTotal,
getCheckoutItems,
} = useCart();
const { buyNow, checkout, isLoading: isCheckoutLoading } = useCheckout();
const navItems = [
{ name: "Home", id: "/" },
{ name: "Shop", id: "/shop" },
{ name: "Blog", id: "/blog" },
{ name: "Features", id: "/#features" },
{ name: "Products", id: "/#products" },
{ name: "Testimonials", id: "/#testimonials" },
{ name: "FAQ", id: "/#faq" },
{ name: "Contact", id: "/#contact" }
];
const handleAddToCart = useCallback(() => {
const item = createCartItem();
if (item) {
addItem(item);
}
}, [createCartItem, addItem]);
const handleBuyNow = useCallback(() => {
if (product) {
buyNow(product, selectedQuantity);
}
}, [product, selectedQuantity, buyNow]);
const handleCheckout = useCallback(async () => {
if (cartItems.length === 0) return;
const currentUrl = new URL(window.location.href);
currentUrl.searchParams.set("success", "true");
await checkout(getCheckoutItems(), { successUrl: currentUrl.toString() });
}, [cartItems, checkout, getCheckoutItems]);
if (isLoading) {
return (
<ThemeProvider
defaultButtonVariant="slide-background"
defaultTextAnimation="background-highlight"
borderRadius="rounded"
contentWidth="small"
sizing="largeSmall"
background="none"
cardStyle="inset"
primaryButtonStyle="primary-glow"
secondaryButtonStyle="layered"
headingFontWeight="extrabold"
>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
navItems={navItems}
brandName="Biorogo"
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
className="py-4 px-6 md:px-8 lg:px-12"
navItemClassName="text-foreground hover:text-primary-cta"
buttonClassName=""
buttonTextClassName=""
/>
</div>
<div id="loading-indicator" data-section="loading-indicator">
<main className="min-h-screen flex items-center justify-center pt-20">
<p className="text-foreground">Loading product...</p>
</main>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{ title: "Shop", items: [{ label: "All Cups", href: "/shop" }, { label: "Ceramic", href: "/shop" }, { label: "Glassware", href: "/shop" }, { label: "Travel Mugs", href: "/shop" }] },
{ title: "Company", items: [{ label: "About Us", href: "/#features" }, { label: "Testimonials", href: "/#testimonials" }, { label: "FAQ", href: "/#faq" }] },
{ title: "Support", items: [{ label: "Contact Us", href: "/#contact" }, { label: "Shipping", href: "/shipping" }, { label: "Returns", href: "/returns" }, { label: "Sitemap", href: "/sitemap" }] }
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
</ThemeProvider>
);
}
if (!product) {
return (
<ThemeProvider
defaultButtonVariant="slide-background"
defaultTextAnimation="background-highlight"
borderRadius="rounded"
contentWidth="small"
sizing="largeSmall"
background="none"
cardStyle="inset"
primaryButtonStyle="primary-glow"
secondaryButtonStyle="layered"
headingFontWeight="extrabold"
>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
navItems={navItems}
brandName="Biorogo"
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
className="py-4 px-6 md:px-8 lg:px-12"
navItemClassName="text-foreground hover:text-primary-cta"
buttonClassName=""
buttonTextClassName=""
/>
</div>
<div id="product-not-found" data-section="product-not-found">
<main className="min-h-screen flex items-center justify-center pt-20">
<div className="text-center">
<p className="text-foreground mb-4">Product not found</p>
<button
onClick={() => router.push("/shop")}
className="primary-button px-6 py-2 rounded-theme"
>
Back to Shop
</button>
</div>
</main>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{ title: "Shop", items: [{ label: "All Cups", href: "/shop" }, { label: "Ceramic", href: "/shop" }, { label: "Glassware", href: "/shop" }, { label: "Travel Mugs", href: "/shop" }] },
{ title: "Company", items: [{ label: "About Us", href: "/#features" }, { label: "Testimonials", href: "/#testimonials" }, { label: "FAQ", href: "/#faq" }] },
{ title: "Support", items: [{ label: "Contact Us", href: "/#contact" }, { label: "Shipping", href: "/shipping" }, { label: "Returns", href: "/returns" }, { label: "Sitemap", href: "/sitemap" }] }
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
</ThemeProvider>
);
}
return (
<ThemeProvider
defaultButtonVariant="slide-background"
defaultTextAnimation="background-highlight"
borderRadius="rounded"
contentWidth="small"
sizing="largeSmall"
background="none"
cardStyle="inset"
primaryButtonStyle="primary-glow"
secondaryButtonStyle="layered"
headingFontWeight="extrabold"
>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
navItems={navItems}
brandName="Biorogo"
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
className="py-4 px-6 md:px-8 lg:px-12"
navItemClassName="text-foreground hover:text-primary-cta"
buttonClassName=""
buttonTextClassName=""
/>
</div>
<div id="product-detail-card" data-section="product-detail-card">
<ProductDetailCard
layout="page"
name={product.name}
price={product.price}
salePrice={meta.salePrice}
rating={product.rating || 0}
description={product.description}
images={images}
variants={variants.length > 0 ? variants : undefined}
quantity={quantityVariant}
ribbon={meta.ribbon}
inventoryStatus={meta.inventoryStatus}
inventoryQuantity={meta.inventoryQuantity}
sku={meta.sku}
buttons={[
{ text: "Add To Cart", onClick: handleAddToCart },
{ text: "Buy Now", onClick: handleBuyNow },
]}
/>
</div>
<div id="product-cart" data-section="product-cart">
<ProductCart
isOpen={cartOpen}
onClose={() => setCartOpen(false)}
items={cartItems}
onQuantityChange={updateQuantity}
onRemove={removeItem}
total={`$${cartTotal}`}
buttons={[
{
text: isCheckoutLoading ? "Processing..." : "Check Out", onClick: handleCheckout,
},
]}
/>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{ title: "Shop", items: [{ label: "All Cups", href: "/shop" }, { label: "Ceramic", href: "/shop" }, { label: "Glassware", href: "/shop" }, { label: "Travel Mugs", href: "/shop" }] },
{ title: "Company", items: [{ label: "About Us", href: "/#features" }, { label: "Testimonials", href: "/#testimonials" }, { label: "FAQ", href: "/#faq" }] },
{ title: "Support", items: [{ label: "Contact Us", href: "/#contact" }, { label: "Shipping", href: "/shipping" }, { label: "Returns", href: "/returns" }, { label: "Sitemap", href: "/sitemap" }] }
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
</ThemeProvider>
);
}

View File

@@ -1,8 +1,7 @@
"use client";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingInline from "@/components/navbar/NavbarLayoutFloatingInline";
import NavbarLayoutFloatingInline from '@/components/navbar/NavbarLayoutFloatingInline';
import ProductCatalog from "@/components/ecommerce/productCatalog/ProductCatalog";
import { useProductCatalog } from "@/hooks/useProductCatalog";
import FooterBaseCard from '@/components/sections/footer/FooterBaseCard';
@@ -16,6 +15,17 @@ export default function ShopPage() {
filters,
} = useProductCatalog({ basePath: "/shop" });
const navItems = [
{ name: "Home", id: "/" },
{ name: "Shop", id: "/shop" },
{ name: "Blog", id: "/blog" },
{ name: "Features", id: "/#features" },
{ name: "Products", id: "/#products" },
{ name: "Testimonials", id: "/#testimonials" },
{ name: "FAQ", id: "/#faq" },
{ name: "Contact", id: "/#contact" }
];
if (isLoading) {
return (
<ThemeProvider
@@ -30,46 +40,42 @@ export default function ShopPage() {
secondaryButtonStyle="layered"
headingFontWeight="extrabold"
>
<ReactLenis root>
<div id="navbar" data-section="navbar">
<NavbarLayoutFloatingInline
navItems={[
{ name: "Features", id: "/#features" }, { name: "Products", id: "/#products" }, { name: "Testimonials", id: "/#testimonials" }, { name: "FAQ", id: "/#faq" }, { name: "Contact", id: "/#contact" }
]}
brandName="Biorogo"
button={{ text: "Cart", onClick: () => {} }}
className="py-4 px-6 md:px-8 lg:px-12"
navItemClassName="text-foreground hover:text-primary-cta"
buttonClassName=""
buttonTextClassName=""
/>
</div>
<div id="loading-indicator" data-section="loading-indicator">
<main className="min-h-screen flex items-center justify-center pt-20">
<p className="text-foreground">Loading products...</p>
</main>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{ title: "Shop", items: [{ label: "All Cups", href: "/#products" }, { label: "Ceramic", href: "/#products" }, { label: "Glassware", href: "/#products" }, { label: "Travel Mugs", href: "/#products" }] },
{ title: "Company", items: [{ label: "About Us", href: "/#features" }, { label: "Testimonials", href: "/#testimonials" }, { label: "FAQ", href: "/#faq" }] },
{ title: "Support", items: [{ label: "Contact Us", href: "/#contact" }, { label: "Shipping", href: "/shipping" }, { label: "Returns", href: "/returns" }, { label: "Sitemap", href: "/sitemap" }] }
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
</ReactLenis>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
navItems={navItems}
brandName="Biorogo"
button={{ text: "Cart", onClick: () => {} }}
className="py-4 px-6 md:px-8 lg:px-12"
navItemClassName="text-foreground hover:text-primary-cta"
buttonClassName=""
buttonTextClassName=""
/>
</div>
<div id="loading-indicator" data-section="loading-indicator">
<main className="min-h-screen flex items-center justify-center pt-20">
<p className="text-foreground">Loading products...</p>
</main>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{ title: "Shop", items: [{ label: "All Cups", href: "/shop" }, { label: "Ceramic", href: "/shop" }, { label: "Glassware", href: "/shop" }, { label: "Travel Mugs", href: "/shop" }] },
{ title: "Company", items: [{ label: "About Us", href: "/#features" }, { label: "Testimonials", href: "/#testimonials" }, { label: "FAQ", href: "/#faq" }] },
{ title: "Support", items: [{ label: "Contact Us", href: "/#contact" }, { label: "Shipping", href: "/shipping" }, { label: "Returns", href: "/returns" }, { label: "Sitemap", href: "/sitemap" }] }
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
</ThemeProvider>
);
}
@@ -87,12 +93,9 @@ export default function ShopPage() {
secondaryButtonStyle="layered"
headingFontWeight="extrabold"
>
<ReactLenis root>
<div id="navbar" data-section="navbar">
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
navItems={[
{ name: "Features", id: "/#features" }, { name: "Products", id: "/#products" }, { name: "Testimonials", id: "/#testimonials" }, { name: "FAQ", id: "/#faq" }, { name: "Contact", id: "/#contact" }
]}
navItems={navItems}
brandName="Biorogo"
button={{ text: "Cart", onClick: () => {} }}
className="py-4 px-6 md:px-8 lg:px-12"
@@ -100,39 +103,38 @@ export default function ShopPage() {
buttonClassName=""
buttonTextClassName=""
/>
</div>
<div id="product-catalog" data-section="product-catalog">
<ProductCatalog
layout="page"
products={products}
searchValue={search}
onSearchChange={setSearch}
searchPlaceholder="Search products..."
filters={filters}
emptyMessage="No products found"
</div>
<div id="product-catalog" data-section="product-catalog">
<ProductCatalog
layout="page"
products={products}
searchValue={search}
onSearchChange={setSearch}
searchPlaceholder="Search products..."
filters={filters}
emptyMessage="No products found"
/>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{ title: "Shop", items: [{ label: "All Cups", href: "/shop" }, { label: "Ceramic", href: "/shop" }, { label: "Glassware", href: "/shop" }, { label: "Travel Mugs", href: "/shop" }] },
{ title: "Company", items: [{ label: "About Us", href: "/#features" }, { label: "Testimonials", href: "/#testimonials" }, { label: "FAQ", href: "/#faq" }] },
{ title: "Support", items: [{ label: "Contact Us", href: "/#contact" }, { label: "Shipping", href: "/shipping" }, { label: "Returns", href: "/returns" }, { label: "Sitemap", href: "/sitemap" }] }
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="Biorogo"
columns={[
{ title: "Shop", items: [{ label: "All Cups", href: "/#products" }, { label: "Ceramic", href: "/#products" }, { label: "Glassware", href: "/#products" }, { label: "Travel Mugs", href: "/#products" }] },
{ title: "Company", items: [{ label: "About Us", href: "/#features" }, { label: "Testimonials", href: "/#testimonials" }, { label: "FAQ", href: "/#faq" }] },
{ title: "Support", items: [{ label: "Contact Us", href: "/#contact" }, { label: "Shipping", href: "/shipping" }, { label: "Returns", href: "/returns" }, { label: "Sitemap", href: "/sitemap" }] }
]}
copyrightText="© 2024 Biorogo. All rights reserved."
onPrivacyClick={() => console.log('Privacy policy clicked')}
ariaLabel="Site footer for Biorogo"
className="py-16 md:py-20"
cardClassName="bg-card rounded-t-3xl shadow-lg border-t border-l border-r border-accent/20"
logoTextClassName="text-foreground text-3xl font-extrabold"
columnTitleClassName="text-foreground text-lg font-semibold"
columnItemClassName="text-foreground/80 hover:text-primary-cta"
copyrightTextClassName="text-foreground/60 text-sm"
privacyButtonClassName="text-foreground/60 text-sm hover:text-primary-cta"
/>
</div>
</ReactLenis>
</div>
</ThemeProvider>
);
}