Merge version_2_1781102840278 into main #1
@@ -8,12 +8,12 @@
|
||||
--background: #0a0a0a;
|
||||
--card: #1a1a1a;
|
||||
--foreground: #f5f5f5;
|
||||
--primary-cta: #ffdf7d;
|
||||
--primary-cta: #4ade80;
|
||||
--primary-cta-text: #0a0a0a;
|
||||
--secondary-cta: #1a1a1a;
|
||||
--secondary-cta-text: #ffffff;
|
||||
--accent: #b8860b;
|
||||
--background-accent: #8b6914;
|
||||
--accent: #22c55e;
|
||||
--background-accent: #166534;
|
||||
|
||||
/* @layout/border-radius/rounded */
|
||||
--radius: 1.5rem;
|
||||
|
||||
@@ -1,312 +1,28 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
|
||||
import { Bell, Building, Sparkles } 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; this shell only fixes render order.
|
||||
|
||||
export default function HomePage() {
|
||||
import React from 'react';
|
||||
import HeroSection from './HomePage/sections/Hero';
|
||||
import AboutSection from './HomePage/sections/About';
|
||||
import RoomsSection from './HomePage/sections/Rooms';
|
||||
import AmenitiesSection from './HomePage/sections/Amenities';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import SocialProofSection from './HomePage/sections/SocialProof';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplitMediaGrid
|
||||
tag="Luxury Redefined"
|
||||
title="Experience Unrivaled Elegance at Grand Lux Hotel"
|
||||
description="Discover a sanctuary of sophistication and comfort in the heart of the city. Grand Lux Hotel offers an exquisite blend of timeless charm and modern amenities for an unforgettable stay."
|
||||
primaryButton={{
|
||||
text: "Book Your Stay",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Explore Rooms",
|
||||
href: "#rooms",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "https://images.pexels.com/photos/18285947/pexels-photo-18285947.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
imageSrc: "https://images.pexels.com/photos/37910480/pexels-photo-37910480.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="About Us"
|
||||
title="Where Luxury Meets Unforgettable Service"
|
||||
description="Grand Lux Hotel is more than just a place to stay; it's an experience crafted with passion and precision. From our opulent rooms to our world-class dining, every detail is designed to ensure your comfort and satisfaction."
|
||||
primaryButton={{
|
||||
text: "Our Story",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Virtual Tour",
|
||||
href: "#",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
icon: Building,
|
||||
title: "Prime Location",
|
||||
description: "Centrally located with easy access to attractions.",
|
||||
},
|
||||
{
|
||||
icon: Bell,
|
||||
title: "Personalized Service",
|
||||
description: "Our dedicated concierge team is at your service 24/7.",
|
||||
},
|
||||
{
|
||||
icon: Sparkles,
|
||||
title: "Exquisite Design",
|
||||
description: "Luxurious interiors with attention to every aesthetic detail.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://images.pexels.com/photos/25047804/pexels-photo-25047804.jpeg?auto=compress&cs=tinysrgb&h=650&w=940"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="rooms" data-section="rooms">
|
||||
<SectionErrorBoundary name="rooms">
|
||||
<FeaturesImageBento
|
||||
tag="Our Accommodations"
|
||||
title="Indulge in Our Luxurious Rooms & Suites"
|
||||
description="Each room at Grand Lux Hotel is a haven of comfort, meticulously designed with elegant furnishings and state-of-the-art amenities to provide an unparalleled experience."
|
||||
primaryButton={{
|
||||
text: "View All Rooms",
|
||||
href: "#",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
title: "Deluxe King Room",
|
||||
description: "Spacious retreat with city views.",
|
||||
imageSrc: "https://images.pexels.com/photos/33944309/pexels-photo-33944309.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Executive Suite",
|
||||
description: "Elegance and comfort combined.",
|
||||
imageSrc: "https://images.pexels.com/photos/29617312/pexels-photo-29617312.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Classic Twin Room",
|
||||
description: "Timeless charm and coziness.",
|
||||
imageSrc: "https://images.pexels.com/photos/34108090/pexels-photo-34108090.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Spa Bathroom",
|
||||
description: "Marble-clad personal oasis.",
|
||||
imageSrc: "https://images.pexels.com/photos/7214159/pexels-photo-7214159.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Gourmet Dining",
|
||||
description: "Fine cuisine at your fingertips.",
|
||||
imageSrc: "https://images.pexels.com/photos/17294738/pexels-photo-17294738.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Infinity Pool",
|
||||
description: "Relax with panoramic views.",
|
||||
imageSrc: "https://images.pexels.com/photos/16891456/pexels-photo-16891456.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Fitness Center",
|
||||
description: "State-of-the-art gym access.",
|
||||
imageSrc: "https://images.pexels.com/photos/6285183/pexels-photo-6285183.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="amenities" data-section="amenities">
|
||||
<SectionErrorBoundary name="amenities">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Hotel Amenities"
|
||||
title="Exceptional Services for a Perfect Stay"
|
||||
description="At Grand Lux Hotel, we offer a comprehensive range of amenities designed to cater to your every need, ensuring a memorable and comfortable visit."
|
||||
primaryButton={{
|
||||
text: "Discover More",
|
||||
href: "#",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
title: "World-Class Spa",
|
||||
description: "Rejuvenate your senses with our bespoke spa treatments and therapies.",
|
||||
buttonIcon: "HeartPulse",
|
||||
buttonHref: "#",
|
||||
imageSrc: "https://images.pexels.com/photos/9146381/pexels-photo-9146381.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "24/7 Concierge",
|
||||
description: "Our dedicated team provides personalized service for your every request.",
|
||||
buttonIcon: "Concierge",
|
||||
buttonHref: "#",
|
||||
imageSrc: "https://images.pexels.com/photos/7821341/pexels-photo-7821341.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Signature Bar & Lounge",
|
||||
description: "Enjoy crafted cocktails and fine spirits in an elegant setting.",
|
||||
buttonIcon: "Martini",
|
||||
buttonHref: "#",
|
||||
imageSrc: "https://images.pexels.com/photos/15942403/pexels-photo-15942403.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialOverlayCards
|
||||
tag="Guest Experiences"
|
||||
title="Hear From Our Happy Guests"
|
||||
description="Our guests consistently praise our exceptional service, luxurious accommodations, and unforgettable experiences. Read what they have to say about their stay at Grand Lux Hotel."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.",
|
||||
role: "Travel Blogger",
|
||||
company: "Globe Trotter",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/6466295/pexels-photo-6466295.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Michael L.",
|
||||
role: "CEO",
|
||||
company: "Tech Innovations",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/11913180/pexels-photo-11913180.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Emily R.",
|
||||
role: "Family Vacationer",
|
||||
company: "N/A",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/16574324/pexels-photo-16574324.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "David K.",
|
||||
role: "Solo Adventurer",
|
||||
company: "N/A",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/5023821/pexels-photo-5023821.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Susan P.",
|
||||
role: "Retired Educator",
|
||||
company: "N/A",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/7244269/pexels-photo-7244269.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="social-proof" data-section="social-proof">
|
||||
<SectionErrorBoundary name="social-proof">
|
||||
<SocialProofMarquee
|
||||
tag="Trusted & Awarded"
|
||||
title="Recognized for Excellence in Hospitality"
|
||||
description="Grand Lux Hotel is proud to be acknowledged by leading travel organizations and magazines for our commitment to luxury and guest satisfaction."
|
||||
names={[
|
||||
"Travel + Leisure",
|
||||
"Conde Nast Traveler",
|
||||
"Forbes Travel Guide",
|
||||
"Michelin Guide",
|
||||
"World Luxury Hotel Awards",
|
||||
"AAA Five Diamond",
|
||||
"TripAdvisor Hall of Fame",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Need Help?"
|
||||
title="Frequently Asked Questions"
|
||||
description="Find answers to common questions about your stay, bookings, amenities, and more."
|
||||
categories={[
|
||||
{
|
||||
name: "Bookings",
|
||||
items: [
|
||||
{
|
||||
question: "How do I make a reservation?",
|
||||
answer: "Reservations can be made directly through our website, via phone, or through our preferred travel partners.",
|
||||
},
|
||||
{
|
||||
question: "What is your cancellation policy?",
|
||||
answer: "Cancellation policies vary by room type and rate. Please refer to your booking confirmation for details or contact us directly.",
|
||||
},
|
||||
{
|
||||
question: "Can I modify my reservation?",
|
||||
answer: "Yes, modifications are possible subject to availability and our cancellation policy. Please contact our reservations team.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Amenities",
|
||||
items: [
|
||||
{
|
||||
question: "Is Wi-Fi available?",
|
||||
answer: "Complimentary high-speed Wi-Fi is available throughout the hotel for all guests.",
|
||||
},
|
||||
{
|
||||
question: "Do you have a fitness center?",
|
||||
answer: "Yes, our state-of-the-art fitness center is open 24/7 for all hotel guests.",
|
||||
},
|
||||
{
|
||||
question: "Is breakfast included?",
|
||||
answer: "Breakfast inclusion depends on your room rate or package. Please check your booking details.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "General",
|
||||
items: [
|
||||
{
|
||||
question: "What are your check-in/check-out times?",
|
||||
answer: "Check-in is at 3:00 PM and check-out is at 12:00 PM. Early check-in or late check-out may be available upon request.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer airport transportation?",
|
||||
answer: "Yes, we can arrange airport transfers for an additional fee. Please contact our concierge.",
|
||||
},
|
||||
{
|
||||
question: "Are pets allowed?",
|
||||
answer: "Our hotel is pet-friendly, with certain restrictions and fees. Please inquire when booking.",
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Contact Us"
|
||||
text="Ready to experience luxury? Book your unforgettable stay at Grand Lux Hotel today."
|
||||
primaryButton={{
|
||||
text: "Book Your Stay",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get In Touch",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<HeroSection />
|
||||
<AboutSection />
|
||||
<RoomsSection />
|
||||
<AmenitiesSection />
|
||||
<TestimonialsSection />
|
||||
<SocialProofSection />
|
||||
<FaqSection />
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
47
src/pages/HomePage/sections/About.tsx
Normal file
47
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,47 @@
|
||||
// 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 { Bell, Building, Sparkles } 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="About Us"
|
||||
title="Where Luxury Meets Unforgettable Service"
|
||||
description="Grand Lux Hotel is more than just a place to stay; it's an experience crafted with passion and precision. From our opulent rooms to our world-class dining, every detail is designed to ensure your comfort and satisfaction."
|
||||
primaryButton={{
|
||||
text: "Our Story",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Virtual Tour",
|
||||
href: "#",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
icon: Building,
|
||||
title: "Prime Location",
|
||||
description: "Centrally located with easy access to attractions.",
|
||||
},
|
||||
{
|
||||
icon: Bell,
|
||||
title: "Personalized Service",
|
||||
description: "Our dedicated concierge team is at your service 24/7.",
|
||||
},
|
||||
{
|
||||
icon: Sparkles,
|
||||
title: "Exquisite Design",
|
||||
description: "Luxurious interiors with attention to every aesthetic detail.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://images.pexels.com/photos/25047804/pexels-photo-25047804.jpeg?auto=compress&cs=tinysrgb&h=650&w=940"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
47
src/pages/HomePage/sections/Amenities.tsx
Normal file
47
src/pages/HomePage/sections/Amenities.tsx
Normal file
@@ -0,0 +1,47 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "amenities" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AmenitiesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="amenities" data-section="amenities">
|
||||
<SectionErrorBoundary name="amenities">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Hotel Amenities"
|
||||
title="Exceptional Services for a Perfect Stay"
|
||||
description="At Grand Lux Hotel, we offer a comprehensive range of amenities designed to cater to your every need, ensuring a memorable and comfortable visit."
|
||||
primaryButton={{
|
||||
text: "Discover More",
|
||||
href: "#",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
title: "World-Class Spa",
|
||||
description: "Rejuvenate your senses with our bespoke spa treatments and therapies.",
|
||||
buttonIcon: "HeartPulse",
|
||||
buttonHref: "#",
|
||||
imageSrc: "https://images.pexels.com/photos/9146381/pexels-photo-9146381.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "24/7 Concierge",
|
||||
description: "Our dedicated team provides personalized service for your every request.",
|
||||
buttonIcon: "Concierge",
|
||||
buttonHref: "#",
|
||||
imageSrc: "https://images.pexels.com/photos/7821341/pexels-photo-7821341.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Signature Bar & Lounge",
|
||||
description: "Enjoy crafted cocktails and fine spirits in an elegant setting.",
|
||||
buttonIcon: "Martini",
|
||||
buttonHref: "#",
|
||||
imageSrc: "https://images.pexels.com/photos/15942403/pexels-photo-15942403.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Contact.tsx
Normal file
27
src/pages/HomePage/sections/Contact.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 "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Contact Us"
|
||||
text="Ready to experience luxury? Book your unforgettable stay at Grand Lux Hotel today."
|
||||
primaryButton={{
|
||||
text: "Book Your Stay",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get In Touch",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
73
src/pages/HomePage/sections/Faq.tsx
Normal file
73
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,73 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Need Help?"
|
||||
title="Frequently Asked Questions"
|
||||
description="Find answers to common questions about your stay, bookings, amenities, and more."
|
||||
categories={[
|
||||
{
|
||||
name: "Bookings",
|
||||
items: [
|
||||
{
|
||||
question: "How do I make a reservation?",
|
||||
answer: "Reservations can be made directly through our website, via phone, or through our preferred travel partners.",
|
||||
},
|
||||
{
|
||||
question: "What is your cancellation policy?",
|
||||
answer: "Cancellation policies vary by room type and rate. Please refer to your booking confirmation for details or contact us directly.",
|
||||
},
|
||||
{
|
||||
question: "Can I modify my reservation?",
|
||||
answer: "Yes, modifications are possible subject to availability and our cancellation policy. Please contact our reservations team.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Amenities",
|
||||
items: [
|
||||
{
|
||||
question: "Is Wi-Fi available?",
|
||||
answer: "Complimentary high-speed Wi-Fi is available throughout the hotel for all guests.",
|
||||
},
|
||||
{
|
||||
question: "Do you have a fitness center?",
|
||||
answer: "Yes, our state-of-the-art fitness center is open 24/7 for all hotel guests.",
|
||||
},
|
||||
{
|
||||
question: "Is breakfast included?",
|
||||
answer: "Breakfast inclusion depends on your room rate or package. Please check your booking details.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "General",
|
||||
items: [
|
||||
{
|
||||
question: "What are your check-in/check-out times?",
|
||||
answer: "Check-in is at 3:00 PM and check-out is at 12:00 PM. Early check-in or late check-out may be available upon request.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer airport transportation?",
|
||||
answer: "Yes, we can arrange airport transfers for an additional fee. Please contact our concierge.",
|
||||
},
|
||||
{
|
||||
question: "Are pets allowed?",
|
||||
answer: "Our hotel is pet-friendly, with certain restrictions and fees. Please inquire when booking.",
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
36
src/pages/HomePage/sections/Hero.tsx
Normal file
36
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,36 @@
|
||||
// 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 HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplitMediaGrid
|
||||
tag="Luxury Redefined"
|
||||
title="Experience Unrivaled Elegance at Grand Lux Hotel"
|
||||
description="Discover a sanctuary of sophistication and comfort in the heart of the city. Grand Lux Hotel offers an exquisite blend of timeless charm and modern amenities for an unforgettable stay."
|
||||
primaryButton={{
|
||||
text: "Book Your Stay",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Explore Rooms",
|
||||
href: "#rooms",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "https://images.pexels.com/photos/18285947/pexels-photo-18285947.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
imageSrc: "https://images.pexels.com/photos/37910480/pexels-photo-37910480.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
61
src/pages/HomePage/sections/Rooms.tsx
Normal file
61
src/pages/HomePage/sections/Rooms.tsx
Normal file
@@ -0,0 +1,61 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "rooms" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function RoomsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="rooms" data-section="rooms">
|
||||
<SectionErrorBoundary name="rooms">
|
||||
<FeaturesImageBento
|
||||
tag="Our Accommodations"
|
||||
title="Indulge in Our Luxurious Rooms & Suites"
|
||||
description="Each room at Grand Lux Hotel is a haven of comfort, meticulously designed with elegant furnishings and state-of-the-art amenities to provide an unparalleled experience."
|
||||
primaryButton={{
|
||||
text: "View All Rooms",
|
||||
href: "#",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
title: "Deluxe King Room",
|
||||
description: "Spacious retreat with city views.",
|
||||
imageSrc: "https://images.pexels.com/photos/33944309/pexels-photo-33944309.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Executive Suite",
|
||||
description: "Elegance and comfort combined.",
|
||||
imageSrc: "https://images.pexels.com/photos/29617312/pexels-photo-29617312.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Classic Twin Room",
|
||||
description: "Timeless charm and coziness.",
|
||||
imageSrc: "https://images.pexels.com/photos/34108090/pexels-photo-34108090.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Spa Bathroom",
|
||||
description: "Marble-clad personal oasis.",
|
||||
imageSrc: "https://images.pexels.com/photos/7214159/pexels-photo-7214159.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Gourmet Dining",
|
||||
description: "Fine cuisine at your fingertips.",
|
||||
imageSrc: "https://images.pexels.com/photos/17294738/pexels-photo-17294738.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Infinity Pool",
|
||||
description: "Relax with panoramic views.",
|
||||
imageSrc: "https://images.pexels.com/photos/16891456/pexels-photo-16891456.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
title: "Fitness Center",
|
||||
description: "State-of-the-art gym access.",
|
||||
imageSrc: "https://images.pexels.com/photos/6285183/pexels-photo-6285183.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/SocialProof.tsx
Normal file
29
src/pages/HomePage/sections/SocialProof.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
// 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 & Awarded"
|
||||
title="Recognized for Excellence in Hospitality"
|
||||
description="Grand Lux Hotel is proud to be acknowledged by leading travel organizations and magazines for our commitment to luxury and guest satisfaction."
|
||||
names={[
|
||||
"Travel + Leisure",
|
||||
"Conde Nast Traveler",
|
||||
"Forbes Travel Guide",
|
||||
"Michelin Guide",
|
||||
"World Luxury Hotel Awards",
|
||||
"AAA Five Diamond",
|
||||
"TripAdvisor Hall of Fame",
|
||||
]}
|
||||
/>
|
||||
</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 TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialOverlayCards
|
||||
tag="Guest Experiences"
|
||||
title="Hear From Our Happy Guests"
|
||||
description="Our guests consistently praise our exceptional service, luxurious accommodations, and unforgettable experiences. Read what they have to say about their stay at Grand Lux Hotel."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.",
|
||||
role: "Travel Blogger",
|
||||
company: "Globe Trotter",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/6466295/pexels-photo-6466295.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Michael L.",
|
||||
role: "CEO",
|
||||
company: "Tech Innovations",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/11913180/pexels-photo-11913180.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Emily R.",
|
||||
role: "Family Vacationer",
|
||||
company: "N/A",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/16574324/pexels-photo-16574324.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "David K.",
|
||||
role: "Solo Adventurer",
|
||||
company: "N/A",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/5023821/pexels-photo-5023821.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
{
|
||||
name: "Susan P.",
|
||||
role: "Retired Educator",
|
||||
company: "N/A",
|
||||
rating: 5,
|
||||
imageSrc: "https://images.pexels.com/photos/7244269/pexels-photo-7244269.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user