Compare commits
4 Commits
version_1_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| e27d0e896c | |||
|
|
5da45baf2d | ||
| 4123b875e8 | |||
|
|
d08bb80aae |
@@ -5,15 +5,15 @@
|
||||
|
||||
:root {
|
||||
/* @colorThemes/lightTheme/grayNavyBlue */
|
||||
--background: #f5faff;
|
||||
--card: #ffffff;
|
||||
--foreground: #001122;
|
||||
--primary-cta: #15479c;
|
||||
--primary-cta-text: #f5faff;
|
||||
--secondary-cta: #ffffff;
|
||||
--secondary-cta-text: #001122;
|
||||
--accent: #a8cce8;
|
||||
--background-accent: #7ba3cf;
|
||||
--background: #0a0505;
|
||||
--card: #140a0a;
|
||||
--foreground: #f5e6d3;
|
||||
--primary-cta: #b85d19;
|
||||
--primary-cta-text: #ffffff;
|
||||
--secondary-cta: #2a1515;
|
||||
--secondary-cta-text: #e8b084;
|
||||
--accent: #8c4a15;
|
||||
--background-accent: #1f0f0f;
|
||||
|
||||
/* @layout/border-radius/rounded */
|
||||
--radius: 1rem;
|
||||
|
||||
@@ -1,269 +1,36 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import FeaturesBorderGlow from '@/components/sections/features/FeaturesBorderGlow';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import HeroTiltedCards from '@/components/sections/hero/HeroTiltedCards';
|
||||
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
|
||||
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
|
||||
import { Camera, Droplets, Flame, Music, Sparkles, Wine } from "lucide-react";
|
||||
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 AboutSection from './HomePage/sections/About';
|
||||
import MenuSection from './HomePage/sections/Menu';
|
||||
import GallerySection from './HomePage/sections/Gallery';
|
||||
import WhyUsSection from './HomePage/sections/WhyUs';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import ReservationSection from './HomePage/sections/Reservation';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroTiltedCards
|
||||
tag="Since 2024"
|
||||
title="Experience Premium Shisha Moments"
|
||||
description="Luxury Shisha, Signature Cocktails and Unforgettable Nights"
|
||||
primaryButton={{
|
||||
text: "Reserve a Table",
|
||||
href: "#reservation",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "View Menu",
|
||||
href: "#menu",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/futuristic-kitchen-interior-design_23-2151821267.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-people-vaping-from-hookah-bar_23-2149194158.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-hookah-ready-smoke_23-2149173607.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/view-luxurious-golden-ring-with-basket_23-2150329682.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/peaceful-empty-library-featuring-wooden-shelves-vintage-green-lamps_482257-125711.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="Our Story"
|
||||
title="Unrivaled Elegance"
|
||||
description="HookaHouse represents the pinnacle of shisha luxury. We curate an environment of pure sophistication where premium flavors meet artisanal mixology and ambient nightlife perfection."
|
||||
items={[
|
||||
{
|
||||
icon: Sparkles,
|
||||
title: "Premium Selection",
|
||||
description: "Global flavor blends.",
|
||||
},
|
||||
{
|
||||
icon: Wine,
|
||||
title: "Artisanal Drinks",
|
||||
description: "Signature cocktails.",
|
||||
},
|
||||
{
|
||||
icon: Music,
|
||||
title: "Atmospheric Sound",
|
||||
description: "Nightly curated vibes.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/man-holding-hookah-pipe-placed-coffee-table_140725-5034.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesImageBento
|
||||
tag="Our Menu"
|
||||
title="Taste the Exceptional"
|
||||
description="A refined selection crafted for the discerning palate."
|
||||
items={[
|
||||
{
|
||||
title: "Signature Shisha",
|
||||
description: "The HookaHouse classic experience.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/hookah-still-life-assortment_23-2149213304.jpg",
|
||||
},
|
||||
{
|
||||
title: "Craft Cocktails",
|
||||
description: "Hand-mixed spirits.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/book-with-drink-black-background_23-2148273473.jpg",
|
||||
},
|
||||
{
|
||||
title: "Rare Spirits",
|
||||
description: "Premium aged liquors.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tray-with-glass-desk_23-2148667944.jpg",
|
||||
},
|
||||
{
|
||||
title: "Light Bites",
|
||||
description: "Gourmet pairing snacks.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/clear-wine-glass-brown-wooden-table_209848-77.jpg",
|
||||
},
|
||||
{
|
||||
title: "House Mixes",
|
||||
description: "Our secret flavor blends.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/hookah-with-red-lamp_140725-6398.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fine Wines",
|
||||
description: "Selected vintages.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-man-preparing-tasty-beverage_23-2148437093.jpg",
|
||||
},
|
||||
{
|
||||
title: "VIP Packages",
|
||||
description: "Exclusive table service.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/city-background-panoramic-view_23-2148892961.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MenuSection />
|
||||
|
||||
<div id="gallery" data-section="gallery">
|
||||
<SectionErrorBoundary name="gallery">
|
||||
<FeaturesBorderGlow
|
||||
tag="Our Vibe"
|
||||
title="Step Into Elegance"
|
||||
description="Browse our gallery to discover the unique atmosphere of HookaHouse."
|
||||
features={[
|
||||
{
|
||||
icon: Camera,
|
||||
title: "Intimate Seating",
|
||||
description: "Plush leather lounge settings.",
|
||||
},
|
||||
{
|
||||
icon: Flame,
|
||||
title: "Warm Glow",
|
||||
description: "Ambient golden lighting throughout.",
|
||||
},
|
||||
{
|
||||
icon: Droplets,
|
||||
title: "Sophisticated Crowd",
|
||||
description: "The destination for elite nightlife.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<GallerySection />
|
||||
|
||||
<div id="why-us" data-section="why-us">
|
||||
<SectionErrorBoundary name="why-us">
|
||||
<MetricsSimpleCards
|
||||
tag="Why Us"
|
||||
title="Why HookaHouse?"
|
||||
description="We don't just provide shisha; we craft experiences."
|
||||
metrics={[
|
||||
{
|
||||
value: "50+",
|
||||
description: "Flavor Profiles",
|
||||
},
|
||||
{
|
||||
value: "100%",
|
||||
description: "Premium Tobacco",
|
||||
},
|
||||
{
|
||||
value: "24/7",
|
||||
description: "Service Dedication",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<WhyUsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeOverlayCards
|
||||
tag="Testimonials"
|
||||
title="Guests' Experience"
|
||||
description="What our guests say about HookaHouse."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Marcus R.",
|
||||
role: "Finance Consultant",
|
||||
company: "Global Group",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-curly-woman-enjoying-her-wine-bar_627829-6909.jpg",
|
||||
},
|
||||
{
|
||||
name: "Elena V.",
|
||||
role: "Creative Director",
|
||||
company: "Studio X",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/going-out-concept-with-girl-night_23-2148140750.jpg",
|
||||
},
|
||||
{
|
||||
name: "David L.",
|
||||
role: "Tech Entrepreneur",
|
||||
company: "Innovate",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-enjoying-her-virtual-date_23-2149307269.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah K.",
|
||||
role: "Fashion Editor",
|
||||
company: "Vogue Style",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/mature-shoe-designer-is-sitting-armchair-his-workshop-holding-shoe-from-his-last-collection_613910-17419.jpg",
|
||||
},
|
||||
{
|
||||
name: "James P.",
|
||||
role: "Architect",
|
||||
company: "Design Hub",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-young-woman-shooting-with-projector_23-2149424924.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="reservation" data-section="reservation">
|
||||
<SectionErrorBoundary name="reservation">
|
||||
<ContactCta
|
||||
tag="Reservations"
|
||||
text="Secure your table for the ultimate premium lounge experience at HookaHouse."
|
||||
primaryButton={{
|
||||
text: "Reserve Now",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Call Us",
|
||||
href: "tel:+1234567890",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ReservationSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<FaqTwoColumn
|
||||
tag="Info"
|
||||
title="Visit HookaHouse"
|
||||
description="Located in the heart of the city nightlife scene."
|
||||
items={[
|
||||
{
|
||||
question: "Address",
|
||||
answer: "123 Nightlife Avenue, Downtown City, ST 90210",
|
||||
},
|
||||
{
|
||||
question: "Opening Hours",
|
||||
answer: "Sun - Thu: 6PM - 2AM | Fri - Sat: 6PM - 4AM",
|
||||
},
|
||||
{
|
||||
question: "Phone Number",
|
||||
answer: "+1 (234) 567-890",
|
||||
},
|
||||
{
|
||||
question: "Dress Code",
|
||||
answer: "Smart casual & elegant attire encouraged.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
39
src/pages/HomePage/sections/About.tsx
Normal file
39
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,39 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "about" section.
|
||||
|
||||
import React from 'react';
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import { Camera, Droplets, Flame, Music, Sparkles, Wine } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="Our Story"
|
||||
title="Unrivaled Elegance"
|
||||
description="HookaHouse represents the pinnacle of shisha luxury. We curate an environment of pure sophistication where premium flavors meet artisanal mixology and ambient nightlife perfection."
|
||||
items={[
|
||||
{
|
||||
icon: Sparkles,
|
||||
title: "Premium Selection",
|
||||
description: "Global flavor blends.",
|
||||
},
|
||||
{
|
||||
icon: Wine,
|
||||
title: "Artisanal Drinks",
|
||||
description: "Signature cocktails.",
|
||||
},
|
||||
{
|
||||
icon: Music,
|
||||
title: "Atmospheric Sound",
|
||||
description: "Nightly curated vibes.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/man-holding-hookah-pipe-placed-coffee-table_140725-5034.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Contact.tsx
Normal file
38
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<FaqTwoColumn
|
||||
tag="Info"
|
||||
title="Visit HookaHouse"
|
||||
description="Located in the heart of the city nightlife scene."
|
||||
items={[
|
||||
{
|
||||
question: "Address",
|
||||
answer: "123 Nightlife Avenue, Downtown City, ST 90210",
|
||||
},
|
||||
{
|
||||
question: "Opening Hours",
|
||||
answer: "Sun - Thu: 6PM - 2AM | Fri - Sat: 6PM - 4AM",
|
||||
},
|
||||
{
|
||||
question: "Phone Number",
|
||||
answer: "+1 (234) 567-890",
|
||||
},
|
||||
{
|
||||
question: "Dress Code",
|
||||
answer: "Smart casual & elegant attire encouraged.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
39
src/pages/HomePage/sections/Gallery.tsx
Normal file
39
src/pages/HomePage/sections/Gallery.tsx
Normal file
@@ -0,0 +1,39 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "gallery" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesBorderGlow from '@/components/sections/features/FeaturesBorderGlow';
|
||||
import { Camera, Droplets, Flame, Music, Sparkles, Wine } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function GallerySection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="gallery" data-section="gallery">
|
||||
<SectionErrorBoundary name="gallery">
|
||||
<FeaturesBorderGlow
|
||||
tag="Our Vibe"
|
||||
title="Step Into Elegance"
|
||||
description="Browse our gallery to discover the unique atmosphere of hookahouse.skg."
|
||||
features={[
|
||||
{
|
||||
icon: Camera,
|
||||
title: "Intimate Seating",
|
||||
description: "Plush leather lounge settings.",
|
||||
image: "https://storage.googleapis.com/webild/users/user_3FTBP7GslGYrSzLvtTJSYWeTqcH/uploaded-1782090803895-xomwstih.png",
|
||||
},
|
||||
{
|
||||
icon: Flame,
|
||||
title: "Warm Glow",
|
||||
description: "Ambient golden lighting throughout.",
|
||||
},
|
||||
{
|
||||
icon: Droplets,
|
||||
title: "Sophisticated Crowd",
|
||||
description: "The destination for elite nightlife.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
134
src/pages/HomePage/sections/Hero.tsx
Normal file
134
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,134 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
|
||||
import Button from "@/components/ui/Button";
|
||||
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import ImageOrVideo from "@/components/ui/ImageOrVideo";
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
import { cls } from "@/lib/utils";
|
||||
|
||||
const primaryButton = {
|
||||
text: "Reserve a Table",
|
||||
href: "#reservation"
|
||||
};
|
||||
const secondaryButton = {
|
||||
text: "View Menu",
|
||||
href: "#menu"
|
||||
};
|
||||
const items = [
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FTBP7GslGYrSzLvtTJSYWeTqcH/uploaded-1782090386986-di5z9h06.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FTBP7GslGYrSzLvtTJSYWeTqcH/uploaded-1782090386990-5b75zexb.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FTBP7GslGYrSzLvtTJSYWeTqcH/uploaded-1782090386991-y7jfzmrx.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FTBP7GslGYrSzLvtTJSYWeTqcH/uploaded-1782090386982-2cryfql0.png"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://storage.googleapis.com/webild/users/user_3FTBP7GslGYrSzLvtTJSYWeTqcH/uploaded-1782090386989-rxsr5aac.png"
|
||||
}
|
||||
];
|
||||
|
||||
type MediaItem = { imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never };
|
||||
|
||||
interface HeroTiltedCardsProps {
|
||||
tag: string;
|
||||
title: string;
|
||||
description: string;
|
||||
primaryButton: { text: string; href: string };
|
||||
secondaryButton: { text: string; href: string };
|
||||
items: [MediaItem, MediaItem, MediaItem, MediaItem, MediaItem];
|
||||
}
|
||||
|
||||
const HeroInline = () => {
|
||||
const marqueeItems = [...items, ...items];
|
||||
const galleryStyles = [
|
||||
"-rotate-6 z-10 -translate-y-5",
|
||||
"rotate-6 z-20 translate-y-5 -ml-15",
|
||||
"-rotate-6 z-30 -translate-y-5 -ml-15",
|
||||
"rotate-6 z-40 translate-y-5 -ml-15",
|
||||
"-rotate-6 z-50 -translate-y-5 -ml-15",
|
||||
];
|
||||
|
||||
return (
|
||||
<section aria-label="Hero section" className="relative h-svh md:h-auto pt-25 pb-20 md:pt-30">
|
||||
<div className="absolute inset-0 w-full h-full overflow-hidden z-0">
|
||||
<div className="absolute inset-0 bg-background/80 z-10"></div>
|
||||
<video
|
||||
autoPlay
|
||||
loop
|
||||
muted
|
||||
playsInline
|
||||
className="absolute inset-0 w-full h-full object-cover scale-[1.15] origin-center"
|
||||
src="https://storage.googleapis.com/webild/placeholders/video-placeholder.mp4"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col items-center gap-12 md:gap-15 w-full md:w-content-width mx-auto">
|
||||
<div className="flex flex-col items-center gap-3 w-content-width mx-auto text-center">
|
||||
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
|
||||
<p>{"Since 2024"}</p>
|
||||
</div>
|
||||
|
||||
<TextAnimation
|
||||
text={"Experience Premium Shisha Moments"}
|
||||
variant="fade"
|
||||
gradientText={true}
|
||||
tag="h1"
|
||||
className="md:max-w-8/10 text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center text-balance"
|
||||
/>
|
||||
|
||||
<TextAnimation
|
||||
text={"Luxury Shisha, Signature Cocktails and Unforgettable Nights"}
|
||||
variant="fade"
|
||||
gradientText={false}
|
||||
tag="p"
|
||||
className="md:max-w-7/10 text-lg md:text-xl leading-snug text-balance"
|
||||
/>
|
||||
|
||||
<div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3">
|
||||
<Button text={primaryButton.text} href={primaryButton.href} variant="primary"/>
|
||||
<Button text={secondaryButton.text} href={secondaryButton.href} variant="secondary"animationDelay={0.1} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ScrollReveal variant="fade-blur" delay={0.2} className="block md:hidden w-full overflow-hidden mask-padding-x">
|
||||
<div className="flex w-max animate-marquee-horizontal">
|
||||
{marqueeItems.map((item, index) => (
|
||||
<div key={index} className="shrink-0 w-[50vw] mr-5 aspect-4/5 p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden">
|
||||
<ImageOrVideo imageSrc={item.imageSrc} videoSrc={item.videoSrc} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
|
||||
<ScrollReveal variant="fade-blur" delay={0.2} className="hidden md:flex justify-center items-center w-full">
|
||||
<div className="flex items-center justify-center">
|
||||
{items.map((item, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className={cls(
|
||||
"relative w-[23%] aspect-4/5 p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden shadow-lg transition-transform duration-500 ease-out hover:scale-110",
|
||||
galleryStyles[index]
|
||||
)}
|
||||
>
|
||||
<ImageOrVideo imageSrc={item.imageSrc} videoSrc={item.videoSrc} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default function HeroSection() {
|
||||
return (
|
||||
<div data-webild-section="hero" id="hero">
|
||||
<HeroInline />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Menu.tsx
Normal file
57
src/pages/HomePage/sections/Menu.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "menu" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MenuSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesImageBento
|
||||
tag="Our Menu"
|
||||
title="Taste the Exceptional"
|
||||
description="A refined selection crafted for the discerning palate."
|
||||
items={[
|
||||
{
|
||||
title: "Signature Shisha",
|
||||
description: "The HookaHouse classic experience.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/hookah-still-life-assortment_23-2149213304.jpg",
|
||||
},
|
||||
{
|
||||
title: "Craft Cocktails",
|
||||
description: "Hand-mixed spirits.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/book-with-drink-black-background_23-2148273473.jpg",
|
||||
},
|
||||
{
|
||||
title: "Rare Spirits",
|
||||
description: "Premium aged liquors.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tray-with-glass-desk_23-2148667944.jpg",
|
||||
},
|
||||
{
|
||||
title: "Light Bites",
|
||||
description: "Gourmet pairing snacks.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/clear-wine-glass-brown-wooden-table_209848-77.jpg",
|
||||
},
|
||||
{
|
||||
title: "House Mixes",
|
||||
description: "Our secret flavor blends.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/hookah-with-red-lamp_140725-6398.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fine Wines",
|
||||
description: "Selected vintages.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-man-preparing-tasty-beverage_23-2148437093.jpg",
|
||||
},
|
||||
{
|
||||
title: "VIP Packages",
|
||||
description: "Exclusive table service.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/city-background-panoramic-view_23-2148892961.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Reservation.tsx
Normal file
27
src/pages/HomePage/sections/Reservation.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "reservation" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ReservationSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="reservation" data-section="reservation">
|
||||
<SectionErrorBoundary name="reservation">
|
||||
<ContactCta
|
||||
tag="Reservations"
|
||||
text="Secure your table for the ultimate premium lounge experience at HookaHouse."
|
||||
primaryButton={{
|
||||
text: "Reserve Now",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Call Us",
|
||||
href: "tel:+1234567890",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Testimonials.tsx
Normal file
57
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// 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 TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeOverlayCards
|
||||
tag="Testimonials"
|
||||
title="Guests' Experience"
|
||||
description="What our guests say about HookaHouse."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Marcus R.",
|
||||
role: "Finance Consultant",
|
||||
company: "Global Group",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-curly-woman-enjoying-her-wine-bar_627829-6909.jpg",
|
||||
},
|
||||
{
|
||||
name: "Elena V.",
|
||||
role: "Creative Director",
|
||||
company: "Studio X",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/going-out-concept-with-girl-night_23-2148140750.jpg",
|
||||
},
|
||||
{
|
||||
name: "David L.",
|
||||
role: "Tech Entrepreneur",
|
||||
company: "Innovate",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-enjoying-her-virtual-date_23-2149307269.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah K.",
|
||||
role: "Fashion Editor",
|
||||
company: "Vogue Style",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/mature-shoe-designer-is-sitting-armchair-his-workshop-holding-shoe-from-his-last-collection_613910-17419.jpg",
|
||||
},
|
||||
{
|
||||
name: "James P.",
|
||||
role: "Architect",
|
||||
company: "Design Hub",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-young-woman-shooting-with-projector_23-2149424924.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
34
src/pages/HomePage/sections/WhyUs.tsx
Normal file
34
src/pages/HomePage/sections/WhyUs.tsx
Normal file
@@ -0,0 +1,34 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "why-us" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function WhyUsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="why-us" data-section="why-us">
|
||||
<SectionErrorBoundary name="why-us">
|
||||
<MetricsSimpleCards
|
||||
tag="Why Us"
|
||||
title="Why HookaHouse?"
|
||||
description="We don't just provide shisha; we craft experiences."
|
||||
metrics={[
|
||||
{
|
||||
value: "50+",
|
||||
description: "Flavor Profiles",
|
||||
},
|
||||
{
|
||||
value: "100%",
|
||||
description: "Premium Tobacco",
|
||||
},
|
||||
{
|
||||
value: "24/7",
|
||||
description: "Service Dedication",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user