Merge version_3_1781604522651 into main #2

Merged
bender merged 1 commits from version_3_1781604522651 into main 2026-06-16 10:10:33 +00:00
7 changed files with 234 additions and 146 deletions

View File

@@ -2,8 +2,9 @@ import FooterSimple from '@/components/sections/footer/FooterSimple';
import NavbarDropdown from '@/components/ui/NavbarDropdown';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import SiteBackgroundSlot from "@/components/ui/SiteBackgroundSlot";
import { Outlet } from 'react-router-dom';
import { Outlet, Link } from 'react-router-dom';
import { StyleProvider } from "@/components/ui/StyleProvider";
import { Home, ShoppingBag, ShoppingCart, User } from 'lucide-react';
export default function Layout() {
const navItems = [
@@ -92,6 +93,28 @@ export default function Layout() {
]}
/>
</SectionErrorBoundary>
{/* Bottom Navigation Bar */}
<div className="fixed bottom-0 left-0 right-0 z-50 bg-background border-t border-border pb-safe">
<div className="flex justify-around items-center h-16 px-2 max-w-md mx-auto">
<Link to="/" className="flex flex-col items-center justify-center w-full h-full text-muted-foreground hover:text-primary-cta transition-colors">
<Home className="w-5 h-5 mb-1" />
<span className="text-[10px] font-medium">Home</span>
</Link>
<Link to="/shop" className="flex flex-col items-center justify-center w-full h-full text-muted-foreground hover:text-primary-cta transition-colors">
<ShoppingBag className="w-5 h-5 mb-1" />
<span className="text-[10px] font-medium">Shop</span>
</Link>
<Link to="/cart" className="flex flex-col items-center justify-center w-full h-full text-muted-foreground hover:text-primary-cta transition-colors">
<ShoppingCart className="w-5 h-5 mb-1" />
<span className="text-[10px] font-medium">Cart</span>
</Link>
<Link to="/admin" className="flex flex-col items-center justify-center w-full h-full text-muted-foreground hover:text-primary-cta transition-colors">
<User className="w-5 h-5 mb-1" />
<span className="text-[10px] font-medium">Admin</span>
</Link>
</div>
</div>
</StyleProvider>
);
}

View File

@@ -1,154 +1,27 @@
import ContactCta from '@/components/sections/contact/ContactCta';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import HeroOverlay from '@/components/sections/hero/HeroOverlay';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
// files directly. Non-block content (wrappers, non-inlinable sections) is
// preserved inline; extracted section blocks become <XSection/> refs.
export default function HomePage() {
import React from 'react';
import HeroSection from './HomePage/sections/Hero';
import ProductsSection from './HomePage/sections/Products';
import TestimonialsSection from './HomePage/sections/Testimonials';
import SocialProofSection from './HomePage/sections/SocialProof';
import ContactCtaSection from './HomePage/sections/ContactCta';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroOverlay
tag="PREMIUM PERFUMERY"
title="Unforgettable Scents, Delivered to Your Door"
description="Discover signature scents for men, women, and unisex collections. Experience premium perfumes with direct WhatsApp support and exclusive testers."
primaryButton={{
text: "Explore Collection",
href: "/shop",
}}
secondaryButton={{
text: "WhatsApp Us",
href: "https://wa.me/923232107893",
}}
imageSrc="http://img.b2bpic.net/free-photo/alcohol-beautiful-bottle_176474-6024.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="products" data-section="products">
<SectionErrorBoundary name="products">
<FeaturesImageBento
tag="LATEST RELEASES"
title="Our Signature Collection"
description="Explore our hand-picked selection of premium fragrances, crafted with excellence."
items={[
{
title: "Men's Collection",
description: "Bold, masculine, and sophisticated.",
imageSrc: "http://img.b2bpic.net/free-photo/cosmetic-product-container-with-art-nouveau-inspired-sun-relief-background_23-2151420703.jpg",
},
{
title: "Women's Collection",
description: "Graceful, floral, and elegant.",
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-eucalyptus-arrangement_23-2149440631.jpg",
},
{
title: "Unisex Fragrances",
description: "Versatile and timeless scents.",
imageSrc: "http://img.b2bpic.net/free-photo/closeup-shot-metal-bottle-with-spray_181624-23106.jpg",
},
{
title: "Tester Kits",
description: "Try before you buy.",
imageSrc: "http://img.b2bpic.net/free-photo/containers-liquid-soap-shampoo-with-dispenser-is-sold-supermarket_169016-49297.jpg",
},
{
title: "Artisan Blends",
description: "Rare and exclusive ingredients.",
imageSrc: "http://img.b2bpic.net/free-photo/skincare-supplies-marble-background_23-2147710684.jpg",
},
{
title: "Special Edition",
description: "Limited time release.",
imageSrc: "http://img.b2bpic.net/free-vector/wedding-invitation-sticker-label-black-vector_53876-64156.jpg",
},
{
title: "Custom Blends",
description: "Made specifically for you.",
imageSrc: "http://img.b2bpic.net/free-photo/original-glass-vase-with-angel-top-green-branch_1304-2744.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ProductsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialColumnMarqueeCards
tag="COMMUNITY"
title="Voices of Aperfume"
description="What our scent enthusiasts are saying."
testimonials={[
{
name: "Sarah Ahmed",
role: "Collector",
quote: "The quality and longevity are unmatched.",
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-brunette-woman-evening-dress-posing-holding-champaign-glass_176420-3753.jpg",
},
{
name: "Bilal Khan",
role: "Enthusiast",
quote: "Finally, a local brand that delivers true luxury.",
imageSrc: "http://img.b2bpic.net/free-photo/female-ballroom-performer-posing_23-2149454029.jpg",
},
{
name: "Fatima Z.",
role: "Gift Buyer",
quote: "Best gifting experience, premium packaging.",
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-male-self-care-setting-still-life_23-2150326579.jpg",
},
{
name: "Zaid Malik",
role: "Customer",
quote: "Exquisite scents and fast delivery.",
imageSrc: "http://img.b2bpic.net/free-photo/blonde-girl-getting-ready-green-room_23-2148210766.jpg",
},
{
name: "Ayesha K.",
role: "Customer",
quote: "My go-to for daily luxury fragrance.",
imageSrc: "http://img.b2bpic.net/free-photo/young-attractive-stylish-businesswoman-excitedly-opening-envelope-working-with-papers-city-street_574295-849.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="social-proof" data-section="social-proof">
<SectionErrorBoundary name="social-proof">
<SocialProofMarquee
tag="TRUSTED BY"
title="Fragrance Connoisseurs"
description="Join thousands of satisfied customers who have discovered their signature scent with us."
names={[
"Aperfume Collective",
"Elite Scent Club",
"Global Fragrance Guild",
"Luxury Lifestyle Network",
"Artisan Perfume Association",
]}
/>
</SectionErrorBoundary>
</div>
<SocialProofSection />
<div id="contact-cta" data-section="contact-cta">
<SectionErrorBoundary name="contact-cta">
<ContactCta
tag="JOIN US"
text="Ready to experience the essence of luxury?"
primaryButton={{
text: "Shop Now",
href: "/shop",
}}
secondaryButton={{
text: "Follow on Instagram",
href: "https://instagram.com/aperfumespk",
}}
/>
</SectionErrorBoundary>
</div>
<ContactCtaSection />
</>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contact-cta" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactCtaSection(): React.JSX.Element {
return (
<div id="contact-cta" data-section="contact-cta">
<SectionErrorBoundary name="contact-cta">
<ContactCta
tag="JOIN US"
text="Ready to experience the essence of luxury?"
primaryButton={{
text: "Shop Now",
href: "/shop",
}}
secondaryButton={{
text: "Follow on Instagram",
href: "https://instagram.com/aperfumespk",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,29 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "hero" section.
import React from 'react';
import HeroOverlay from '@/components/sections/hero/HeroOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroOverlay
tag="PREMIUM PERFUMERY"
title="Unforgettable Scents, Delivered to Your Door"
description="Discover signature scents for men, women, and unisex collections. Experience premium perfumes with direct WhatsApp support and exclusive testers."
primaryButton={{
text: "Explore Collection",
href: "/shop",
}}
secondaryButton={{
text: "WhatsApp Us",
href: "https://wa.me/923232107893",
}}
imageSrc="http://img.b2bpic.net/free-photo/alcohol-beautiful-bottle_176474-6024.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,57 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "products" section.
import React from 'react';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ProductsSection(): React.JSX.Element {
return (
<div id="products" data-section="products">
<SectionErrorBoundary name="products">
<FeaturesImageBento
tag="LATEST RELEASES"
title="Our Signature Collection"
description="Explore our hand-picked selection of premium fragrances, crafted with excellence."
items={[
{
title: "Men's Collection",
description: "Bold, masculine, and sophisticated.",
imageSrc: "http://img.b2bpic.net/free-photo/cosmetic-product-container-with-art-nouveau-inspired-sun-relief-background_23-2151420703.jpg",
},
{
title: "Women's Collection",
description: "Graceful, floral, and elegant.",
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-eucalyptus-arrangement_23-2149440631.jpg",
},
{
title: "Unisex Fragrances",
description: "Versatile and timeless scents.",
imageSrc: "http://img.b2bpic.net/free-photo/closeup-shot-metal-bottle-with-spray_181624-23106.jpg",
},
{
title: "Tester Kits",
description: "Try before you buy.",
imageSrc: "http://img.b2bpic.net/free-photo/containers-liquid-soap-shampoo-with-dispenser-is-sold-supermarket_169016-49297.jpg",
},
{
title: "Artisan Blends",
description: "Rare and exclusive ingredients.",
imageSrc: "http://img.b2bpic.net/free-photo/skincare-supplies-marble-background_23-2147710684.jpg",
},
{
title: "Special Edition",
description: "Limited time release.",
imageSrc: "http://img.b2bpic.net/free-vector/wedding-invitation-sticker-label-black-vector_53876-64156.jpg",
},
{
title: "Custom Blends",
description: "Made specifically for you.",
imageSrc: "http://img.b2bpic.net/free-photo/original-glass-vase-with-angel-top-green-branch_1304-2744.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "social-proof" section.
import React from 'react';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function SocialProofSection(): React.JSX.Element {
return (
<div id="social-proof" data-section="social-proof">
<SectionErrorBoundary name="social-proof">
<SocialProofMarquee
tag="TRUSTED BY"
title="Fragrance Connoisseurs"
description="Join thousands of satisfied customers who have discovered their signature scent with us."
names={[
"Aperfume Collective",
"Elite Scent Club",
"Global Fragrance Guild",
"Luxury Lifestyle Network",
"Artisan Perfume Association",
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,52 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "testimonials" section.
import React from 'react';
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialColumnMarqueeCards
tag="COMMUNITY"
title="Voices of Aperfume"
description="What our scent enthusiasts are saying."
testimonials={[
{
name: "Sarah Ahmed",
role: "Collector",
quote: "The quality and longevity are unmatched.",
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-brunette-woman-evening-dress-posing-holding-champaign-glass_176420-3753.jpg",
},
{
name: "Bilal Khan",
role: "Enthusiast",
quote: "Finally, a local brand that delivers true luxury.",
imageSrc: "http://img.b2bpic.net/free-photo/female-ballroom-performer-posing_23-2149454029.jpg",
},
{
name: "Fatima Z.",
role: "Gift Buyer",
quote: "Best gifting experience, premium packaging.",
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-male-self-care-setting-still-life_23-2150326579.jpg",
},
{
name: "Zaid Malik",
role: "Customer",
quote: "Exquisite scents and fast delivery.",
imageSrc: "http://img.b2bpic.net/free-photo/blonde-girl-getting-ready-green-room_23-2148210766.jpg",
},
{
name: "Ayesha K.",
role: "Customer",
quote: "My go-to for daily luxury fragrance.",
imageSrc: "http://img.b2bpic.net/free-photo/young-attractive-stylish-businesswoman-excitedly-opening-envelope-working-with-papers-city-street_574295-849.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}