Merge version_2_1780917537212 into main #2

Merged
bender merged 1 commits from version_2_1780917537212 into main 2026-06-08 11:21:30 +00:00
10 changed files with 419 additions and 253 deletions

View File

@@ -1,259 +1,30 @@
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
import FeaturesAttributeCards from '@/components/sections/features/FeaturesAttributeCards';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import HeroBrand from '@/components/sections/hero/HeroBrand';
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import TestimonialAvatarCard from '@/components/sections/testimonial/TestimonialAvatarCard';
import { Accessibility, Bed, Bell, Castle, Coffee, DoorOpen, Heart, ShowerHead, Sofa, SquareStack, Star, Tv, Users, Waves, Wifi, Wind, 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; this shell only fixes render order.
export default function HomePage() {
import React from 'react';
import HomeSection from './HomePage/sections/Home';
import AboutSection from './HomePage/sections/About';
import RoomsSection from './HomePage/sections/Rooms';
import AmenitiesSection from './HomePage/sections/Amenities';
import MetricsSection from './HomePage/sections/Metrics';
import SocialProofSection from './HomePage/sections/SocialProof';
import TestimonialsSection from './HomePage/sections/Testimonials';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="home" data-section="home">
<SectionErrorBoundary name="home">
<HeroBrand
brand="The Grand Oasis Hotel"
description="Experience unparalleled luxury and serenity in the heart of the city. Your ultimate escape awaits."
primaryButton={{
text: "Book Your Stay", href: "#contact"}}
secondaryButton={{
text: "Explore Rooms", href: "#rooms"}}
imageSrc="http://img.b2bpic.net/free-photo/abstract-science-fiction-futuristic-background-with-golden-neon-lights_181624-15608.jpg"
/>
</SectionErrorBoundary>
</div>
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="About Us"
title="A Legacy of Hospitality and Elegance"
description="Nestled in a vibrant locale, The Grand Oasis Hotel has been a beacon of luxury and comfort for decades. Our commitment to impeccable service, exquisite design, and personalized experiences ensures every guest's stay is memorable and enchanting. Discover a haven where every detail is crafted for your utmost pleasure."
primaryButton={{
text: "Our Story", href: "#"}}
secondaryButton={{
text: "Virtual Tour", href: "#"}}
imageSrc="http://img.b2bpic.net/free-photo/couple-passing-time-lounge-area_482257-81665.jpg"
/>
</SectionErrorBoundary>
</div>
<div id="rooms" data-section="rooms">
<SectionErrorBoundary name="rooms">
<FeaturesAttributeCards
tag="Our Accommodations"
title="Luxurious Rooms & Suites"
description="Indulge in our exquisitely designed rooms and suites, offering a perfect blend of comfort and sophistication. Each space is meticulously crafted to provide a tranquil retreat."
items={[
{
title: "Deluxe King Room", tags: "City View, King Bed", badge: "Popular", details: [
{
icon: Bed,
label: "Bed", value: "King"},
{
icon: Wifi,
label: "Connectivity", value: "Free Wi-Fi"},
{
icon: Users,
label: "Capacity", value: "2 Adults"},
],
imageSrc: "http://img.b2bpic.net/free-photo/close-up-romantic-breakfast-bed-arrangement_23-2150956527.jpg"},
{
title: "Executive Suite", tags: "Spacious, Lounge Access", badge: "Premium", details: [
{
icon: Sofa,
label: "Living", value: "Separate Lounge"},
{
icon: Coffee,
label: "Coffee", value: "Espresso Machine"},
{
icon: Users,
label: "Capacity", value: "3 Adults"},
],
imageSrc: "http://img.b2bpic.net/free-photo/pillow-bed_1203-9643.jpg"},
{
title: "Family Connecting Room", tags: "Connecting, Two Queens", details: [
{
icon: Bed,
label: "Beds", value: "2 Queen"},
{
icon: Users,
label: "Capacity", value: "4 Adults, 2 Kids"},
{
icon: SquareStack,
label: "Space", value: "75 sqm"},
],
imageSrc: "http://img.b2bpic.net/free-photo/cheerful-women-jumping-bed-before-wedding_1153-2805.jpg"},
{
title: "Ocean View Balcony", tags: "Sea Breeze, Private Balcony", badge: "Featured", details: [
{
icon: Waves,
label: "View", value: "Oceanfront"},
{
icon: Wind,
label: "Feature", value: "Private Balcony"},
{
icon: ShowerHead,
label: "Bathroom", value: "Rain Shower"},
],
imageSrc: "http://img.b2bpic.net/free-photo/indoor-design-luxury-resort_23-2150497255.jpg"},
{
title: "Penthouse Suite", tags: "Panoramic Views, Luxury Amenities", badge: "Exclusive", details: [
{
icon: Castle,
label: "Level", value: "Top Floor"},
{
icon: Tv,
label: "Entertainment", value: "Home Cinema"},
{
icon: Wine,
label: "Perks", value: "Private Bar"},
],
imageSrc: "http://img.b2bpic.net/free-photo/cozy-lively-home-interior-design_23-2151119019.jpg"},
{
title: "Accessible Guest Room", tags: "Spacious, Wheelchair Friendly", details: [
{
icon: Accessibility,
label: "Access", value: "ADA Compliant"},
{
icon: ShowerHead,
label: "Bathroom", value: "Roll-in Shower"},
{
icon: DoorOpen,
label: "Space", value: "Wide Doors"},
],
imageSrc: "http://img.b2bpic.net/free-photo/bangkok-thailand-august-12-2016-beautiful-luxury-bathroom_1203-2725.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<div id="amenities" data-section="amenities">
<SectionErrorBoundary name="amenities">
<FeaturesDetailedSteps
tag="Hotel Facilities"
title="World-Class Amenities"
description="Enhance your stay with our diverse range of amenities, designed for relaxation, rejuvenation, and exquisite dining experiences."
steps={[
{
tag: "Rejuvenate", title: "Serene Spa & Wellness", subtitle: "Indulge in ultimate relaxation", description: "Our luxurious spa offers a sanctuary of calm, with a range of treatments from therapeutic massages to invigorating facials, designed to restore your balance and well-being.时不我待.", imageSrc: "http://img.b2bpic.net/free-photo/girl-white-robe-spa-stairs-cozy-light-calm-mood-kid-wellness_169016-69180.jpg"},
{
tag: "Dine", title: "Gourmet Dining Experiences", subtitle: "Savor exquisite culinary delights", description: "Embark on a culinary journey at our award-winning restaurants. From sophisticated fine dining to casual al fresco options, our chefs craft unforgettable meals using the freshest local ingredients.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-friends-having-lunch-luxury-restaurant_23-2151081450.jpg"},
{
tag: "Unwind", title: "Infinity Pool with City Views", subtitle: "Relax above the city skyline", description: "Take a refreshing dip in our breathtaking infinity pool, offering panoramic city views. The perfect spot to unwind, soak up the sun, or enjoy a sunset cocktail.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-asian-woman-relax-happy-smile-leisure-around-outdoor-swimming-pool_74190-11170.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsIconCards
tag="Our Impact"
title="Trusted by Travelers Worldwide"
description="Our commitment to excellence shines through in every guest experience. We're proud of the moments we create."
metrics={[
{
icon: Star,
title: "Guest Rating", value: "4.9/5"},
{
icon: Heart,
title: "Repeat Guests", value: "85%"},
{
icon: Bell,
title: "Years of Service", value: "30+"},
]}
/>
</SectionErrorBoundary>
</div>
<div id="social-proof" data-section="social-proof">
<SectionErrorBoundary name="social-proof">
<SocialProofMarquee
tag="Our Partners"
title="Proudly Affiliated & Recommended"
description="We collaborate with leading travel and hospitality brands to bring you an unparalleled experience."
names={[
"Luxury Travel Magazine", "Global Hotel Awards", "Elite Destinations", "Voyage & Leisure", "Gourmet Escapes", "Wellness Retreats", "City Explorer Guide"]}
/>
</SectionErrorBoundary>
</div>
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialAvatarCard
tag="Guest Experiences"
title="What Our Guests Say"
primaryButton={{
text: "Read All Reviews", href: "#"}}
avatars={[
{
name: "John Doe", imageSrc: "http://img.b2bpic.net/free-photo/blond-businessman-surprised-expression_1194-3809.jpg"},
{
name: "Jane Smith", imageSrc: "http://img.b2bpic.net/free-photo/smiley-woman-with-hat-traveling_23-2148518196.jpg"},
{
name: "Robert Johnson", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-family-celebrating-birthday-together_23-2150572127.jpg"},
{
name: "Emily Chen", imageSrc: "http://img.b2bpic.net/free-photo/young-caucasian-man-smiling-happy-standing-city_839833-10609.jpg"},
{
name: "Michael Chang", imageSrc: "http://img.b2bpic.net/free-photo/smiling-senior-businessman-pointing-with-finger_1262-3108.jpg"},
{
name: "Sarah Jenkins", imageSrc: "http://img.b2bpic.net/free-photo/woman-with-hat-traveling_23-2148518197.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Need Assistance?"
title="Frequently Asked Questions"
description="Find quick answers to common questions about your stay, bookings, and hotel services."
categories={[
{
name: "Bookings & Check-in", items: [
{
question: "What are your check-in and check-out times?", answer: "Check-in is at 3:00 PM and check-out is at 11:00 AM. Early check-in and late check-out may be available upon request and subject to availability."},
{
question: "Do you offer airport transportation?", answer: "Yes, we offer airport shuttle services. Please contact our concierge desk at least 24 hours in advance to arrange your pick-up or drop-off."},
{
question: "What is your cancellation policy?", answer: "Our standard cancellation policy allows free cancellation up to 48 hours prior to your arrival date. Policies may vary for special packages or promotions."},
],
},
{
name: "Hotel Services", items: [
{
question: "Is breakfast included in the room rate?", answer: "Breakfast inclusion depends on your room package. Please refer to your booking confirmation or inquire at the front desk for details."},
{
question: "Do you have a fitness center or spa?", answer: "Yes, we have a fully equipped fitness center and a luxurious spa offering a variety of treatments. Both are accessible to guests during operational hours."},
{
question: "Is Wi-Fi available throughout the hotel?", answer: "Complimentary high-speed Wi-Fi is available in all guest rooms and public areas of the hotel for your convenience."},
],
},
]}
cta={{
name: "Alice Wonderland", role: "Concierge Manager", buttonText: "Chat with Support", buttonHref: "#contact", imageSrc: "http://img.b2bpic.net/free-photo/receptionists-elegant-suits-work-hours_23-2149714404.jpg"}}
/>
</SectionErrorBoundary>
</div>
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Your Perfect Stay Awaits"
text="Ready to experience unparalleled luxury and hospitality? Book your dream getaway today."
primaryButton={{
text: "Make a Reservation", href: "#"}}
secondaryButton={{
text: "Contact Our Team", href: "#"}}
/>
</SectionErrorBoundary>
</div>
<HomeSection />
<AboutSection />
<RoomsSection />
<AmenitiesSection />
<MetricsSection />
<SocialProofSection />
<TestimonialsSection />
<FaqSection />
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,25 @@
// 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 AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="About Us"
title="A Legacy of Hospitality and Elegance"
description="Nestled in a vibrant locale, The Grand Oasis Hotel has been a beacon of luxury and comfort for decades. Our commitment to impeccable service, exquisite design, and personalized experiences ensures every guest's stay is memorable and enchanting. Discover a haven where every detail is crafted for your utmost pleasure."
primaryButton={{
text: "Our Story", href: "#"}}
secondaryButton={{
text: "Virtual Tour", href: "#"}}
imageSrc="http://img.b2bpic.net/free-photo/couple-passing-time-lounge-area_482257-81665.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,28 @@
// 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 FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AmenitiesSection(): React.JSX.Element {
return (
<div id="amenities" data-section="amenities">
<SectionErrorBoundary name="amenities">
<FeaturesDetailedSteps
tag="Hotel Facilities"
title="World-Class Amenities"
description="Enhance your stay with our diverse range of amenities, designed for relaxation, rejuvenation, and exquisite dining experiences."
steps={[
{
tag: "Rejuvenate", title: "Serene Spa & Wellness", subtitle: "Indulge in ultimate relaxation", description: "Our luxurious spa offers a sanctuary of calm, with a range of treatments from therapeutic massages to invigorating facials, designed to restore your balance and well-being.时不我待.", imageSrc: "http://img.b2bpic.net/free-photo/girl-white-robe-spa-stairs-cozy-light-calm-mood-kid-wellness_169016-69180.jpg"},
{
tag: "Dine", title: "Gourmet Dining Experiences", subtitle: "Savor exquisite culinary delights", description: "Embark on a culinary journey at our award-winning restaurants. From sophisticated fine dining to casual al fresco options, our chefs craft unforgettable meals using the freshest local ingredients.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-friends-having-lunch-luxury-restaurant_23-2151081450.jpg"},
{
tag: "Unwind", title: "Infinity Pool with City Views", subtitle: "Relax above the city skyline", description: "Take a refreshing dip in our breathtaking infinity pool, offering panoramic city views. The perfect spot to unwind, soak up the sun, or enjoy a sunset cocktail.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-asian-woman-relax-happy-smile-leisure-around-outdoor-swimming-pool_74190-11170.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,23 @@
// 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="Your Perfect Stay Awaits"
text="Ready to experience unparalleled luxury and hospitality? Book your dream getaway today."
primaryButton={{
text: "Make a Reservation", href: "#"}}
secondaryButton={{
text: "Contact Our Team", href: "#"}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,44 @@
// 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 Assistance?"
title="Frequently Asked Questions"
description="Find quick answers to common questions about your stay, bookings, and hotel services."
categories={[
{
name: "Bookings & Check-in", items: [
{
question: "What are your check-in and check-out times?", answer: "Check-in is at 3:00 PM and check-out is at 11:00 AM. Early check-in and late check-out may be available upon request and subject to availability."},
{
question: "Do you offer airport transportation?", answer: "Yes, we offer airport shuttle services. Please contact our concierge desk at least 24 hours in advance to arrange your pick-up or drop-off."},
{
question: "What is your cancellation policy?", answer: "Our standard cancellation policy allows free cancellation up to 48 hours prior to your arrival date. Policies may vary for special packages or promotions."},
],
},
{
name: "Hotel Services", items: [
{
question: "Is breakfast included in the room rate?", answer: "Breakfast inclusion depends on your room package. Please refer to your booking confirmation or inquire at the front desk for details."},
{
question: "Do you have a fitness center or spa?", answer: "Yes, we have a fully equipped fitness center and a luxurious spa offering a variety of treatments. Both are accessible to guests during operational hours."},
{
question: "Is Wi-Fi available throughout the hotel?", answer: "Complimentary high-speed Wi-Fi is available in all guest rooms and public areas of the hotel for your convenience."},
],
},
]}
cta={{
name: "Alice Wonderland", role: "Concierge Manager", buttonText: "Chat with Support", buttonHref: "#contact", imageSrc: "http://img.b2bpic.net/free-photo/receptionists-elegant-suits-work-hours_23-2149714404.jpg"}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,85 @@
/* 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 AutoFillText from "@/components/ui/AutoFillText";
import Input from "@/components/ui/Input";
const primaryButton = {
text: "Book Your Stay",
href: "#contact"
};
const secondaryButton = {
text: "Explore Rooms",
href: "#rooms"
};
type HeroBrandProps = {
brand: string;
description: string;
primaryButton: { text: string; href: string };
secondaryButton: { text: string; href: string };
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
const HomeInline = () => {
return (
<section
aria-label="Hero section"
className="relative w-full h-svh overflow-hidden flex flex-col justify-end mb-20"
>
<HeroBackgroundSlot />
<ImageOrVideo
imageSrc={"http://img.b2bpic.net/free-photo/abstract-science-fiction-futuristic-background-with-golden-neon-lights_181624-15608.jpg"}
className="absolute inset-0 w-full h-full object-cover rounded-none"
/>
<div
className="absolute z-10 w-full h-[50svh] md:h-[75svh] left-0 bottom-0 backdrop-blur-xl mask-[linear-gradient(to_bottom,transparent,black_60%)]"
aria-hidden="true"
/>
<div className="relative z-10 w-content-width mx-auto pb-5">
<div className="flex flex-col">
<div className="w-full mb-8 pt-32">
<Input placeholder="Enter your email for exclusive offers..." className="max-w-md bg-background/80 backdrop-blur-sm text-foreground border-border" />
</div>
<div className="w-full flex flex-col md:flex-row md:justify-between items-start md:items-end gap-3 md:gap-5">
<TextAnimation
text={"Experience unparalleled luxury and serenity in the heart of the city. Your ultimate escape awaits."}
variant="fade"
gradientText={false}
tag="p"
className="w-full md:w-1/2 text-lg md:text-2xl text-balance font-normal text-primary-cta-text leading-snug"
/>
<div className="w-full md:w-1/2 flex justify-start md:justify-end">
<div className="flex flex-wrap gap-3">
<Button text={primaryButton.text} href={primaryButton.href} variant="primary"/>
<Button text={secondaryButton.text} href={secondaryButton.href} variant="secondary"animationDelay={0.1} />
</div>
</div>
</div>
<AutoFillText className="font-semibold text-primary-cta-text">{"The Grand Oasis Hotel"}</AutoFillText>
<div className="w-full mt-8">
<ImageOrVideo
imageSrc="https://images.unsplash.com/photo-1566073771259-6a8506099945?auto=format&fit=crop&q=80"
className="w-full h-64 md:h-96 object-cover rounded-2xl shadow-xl"
/>
</div>
</div>
</div>
</section>
);
};
export default function HomeSection() {
return (
<div data-webild-section="home" id="home">
<HomeInline />
</div>
);
}

View File

@@ -0,0 +1,32 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "metrics" section.
import React from 'react';
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
import { Accessibility, Bed, Bell, Castle, Coffee, DoorOpen, Heart, ShowerHead, Sofa, SquareStack, Star, Tv, Users, Waves, Wifi, Wind, Wine } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsIconCards
tag="Our Impact"
title="Trusted by Travelers Worldwide"
description="Our commitment to excellence shines through in every guest experience. We're proud of the moments we create."
metrics={[
{
icon: Star,
title: "Guest Rating", value: "4.9/5"},
{
icon: Heart,
title: "Repeat Guests", value: "85%"},
{
icon: Bell,
title: "Years of Service", value: "30+"},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,101 @@
// 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 FeaturesAttributeCards from '@/components/sections/features/FeaturesAttributeCards';
import { Accessibility, Bed, Bell, Castle, Coffee, DoorOpen, Heart, ShowerHead, Sofa, SquareStack, Star, Tv, Users, Waves, Wifi, Wind, Wine } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function RoomsSection(): React.JSX.Element {
return (
<div id="rooms" data-section="rooms">
<SectionErrorBoundary name="rooms">
<FeaturesAttributeCards
tag="Our Accommodations"
title="Luxurious Rooms & Suites"
description="Indulge in our exquisitely designed rooms and suites, offering a perfect blend of comfort and sophistication. Each space is meticulously crafted to provide a tranquil retreat."
items={[
{
title: "Deluxe King Room", tags: "City View, King Bed", badge: "Popular", details: [
{
icon: Bed,
label: "Bed", value: "King"},
{
icon: Wifi,
label: "Connectivity", value: "Free Wi-Fi"},
{
icon: Users,
label: "Capacity", value: "2 Adults"},
],
imageSrc: "http://img.b2bpic.net/free-photo/close-up-romantic-breakfast-bed-arrangement_23-2150956527.jpg"},
{
title: "Executive Suite", tags: "Spacious, Lounge Access", badge: "Premium", details: [
{
icon: Sofa,
label: "Living", value: "Separate Lounge"},
{
icon: Coffee,
label: "Coffee", value: "Espresso Machine"},
{
icon: Users,
label: "Capacity", value: "3 Adults"},
],
imageSrc: "http://img.b2bpic.net/free-photo/pillow-bed_1203-9643.jpg"},
{
title: "Family Connecting Room", tags: "Connecting, Two Queens", details: [
{
icon: Bed,
label: "Beds", value: "2 Queen"},
{
icon: Users,
label: "Capacity", value: "4 Adults, 2 Kids"},
{
icon: SquareStack,
label: "Space", value: "75 sqm"},
],
imageSrc: "http://img.b2bpic.net/free-photo/cheerful-women-jumping-bed-before-wedding_1153-2805.jpg"},
{
title: "Ocean View Balcony", tags: "Sea Breeze, Private Balcony", badge: "Featured", details: [
{
icon: Waves,
label: "View", value: "Oceanfront"},
{
icon: Wind,
label: "Feature", value: "Private Balcony"},
{
icon: ShowerHead,
label: "Bathroom", value: "Rain Shower"},
],
imageSrc: "http://img.b2bpic.net/free-photo/indoor-design-luxury-resort_23-2150497255.jpg"},
{
title: "Penthouse Suite", tags: "Panoramic Views, Luxury Amenities", badge: "Exclusive", details: [
{
icon: Castle,
label: "Level", value: "Top Floor"},
{
icon: Tv,
label: "Entertainment", value: "Home Cinema"},
{
icon: Wine,
label: "Perks", value: "Private Bar"},
],
imageSrc: "http://img.b2bpic.net/free-photo/cozy-lively-home-interior-design_23-2151119019.jpg"},
{
title: "Accessible Guest Room", tags: "Spacious, Wheelchair Friendly", details: [
{
icon: Accessibility,
label: "Access", value: "ADA Compliant"},
{
icon: ShowerHead,
label: "Bathroom", value: "Roll-in Shower"},
{
icon: DoorOpen,
label: "Space", value: "Wide Doors"},
],
imageSrc: "http://img.b2bpic.net/free-photo/bangkok-thailand-august-12-2016-beautiful-luxury-bathroom_1203-2725.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,22 @@
// 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="Our Partners"
title="Proudly Affiliated & Recommended"
description="We collaborate with leading travel and hospitality brands to bring you an unparalleled experience."
names={[
"Luxury Travel Magazine", "Global Hotel Awards", "Elite Destinations", "Voyage & Leisure", "Gourmet Escapes", "Wellness Retreats", "City Explorer Guide"]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,35 @@
// 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 TestimonialAvatarCard from '@/components/sections/testimonial/TestimonialAvatarCard';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialAvatarCard
tag="Guest Experiences"
title="What Our Guests Say"
primaryButton={{
text: "Read All Reviews", href: "#"}}
avatars={[
{
name: "John Doe", imageSrc: "http://img.b2bpic.net/free-photo/blond-businessman-surprised-expression_1194-3809.jpg"},
{
name: "Jane Smith", imageSrc: "http://img.b2bpic.net/free-photo/smiley-woman-with-hat-traveling_23-2148518196.jpg"},
{
name: "Robert Johnson", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-family-celebrating-birthday-together_23-2150572127.jpg"},
{
name: "Emily Chen", imageSrc: "http://img.b2bpic.net/free-photo/young-caucasian-man-smiling-happy-standing-city_839833-10609.jpg"},
{
name: "Michael Chang", imageSrc: "http://img.b2bpic.net/free-photo/smiling-senior-businessman-pointing-with-finger_1262-3108.jpg"},
{
name: "Sarah Jenkins", imageSrc: "http://img.b2bpic.net/free-photo/woman-with-hat-traveling_23-2148518197.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
);
}