Merge version_2_1782169418343 into main #1
@@ -1,293 +1,39 @@
|
||||
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FeaturesComparison from '@/components/sections/features/FeaturesComparison';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import PricingHighlightedCards from '@/components/sections/pricing/PricingHighlightedCards';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
|
||||
import { MapPin, Smile, Star } 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 FeaturesSection from './HomePage/sections/Features';
|
||||
import AmenitiesSection from './HomePage/sections/Amenities';
|
||||
import PricingSection from './HomePage/sections/Pricing';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import SocialProofSection from './HomePage/sections/SocialProof';
|
||||
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 Defined"
|
||||
title="Welcome to Meliá Hotels"
|
||||
description="Experience unparalleled elegance and world-class service in the heart of the world's most vibrant cities."
|
||||
primaryButton={{
|
||||
text: "Reserve Your Suite",
|
||||
href: "#pricing",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Discover More",
|
||||
href: "#about",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/neon-lit-skatepark-sunset_23-2151986963.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/outdoor-swimming-pool_1203-2844.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTextSplit
|
||||
title="A Legacy of Hospitality"
|
||||
descriptions={[
|
||||
"Meliá represents the pinnacle of luxury, where tradition meets contemporary design. Our curated properties are designed to offer sanctuary and sophistication.",
|
||||
"Since our founding, we have been dedicated to providing bespoke experiences for travelers who demand excellence. Every detail is a testament to our commitment.",
|
||||
]}
|
||||
primaryButton={{
|
||||
text: "Our History",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesComparison
|
||||
tag="Experience Difference"
|
||||
title="Why Choose Meliá"
|
||||
description="Excellence is not just a standard, it's our promise."
|
||||
negativeItems={[
|
||||
"Average room sizing",
|
||||
"Standard concierge services",
|
||||
"Basic amenity packages",
|
||||
]}
|
||||
positiveItems={[
|
||||
"Spacious designer suites",
|
||||
"24/7 Personalised butler",
|
||||
"Exclusive luxury amenities",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="amenities" data-section="amenities">
|
||||
<SectionErrorBoundary name="amenities">
|
||||
<FeaturesImageBento
|
||||
tag="Our Offerings"
|
||||
title="World-Class Amenities"
|
||||
description="Indulge in a collection of experiences tailored to your refined taste."
|
||||
items={[
|
||||
{
|
||||
title: "Sanctuary Spa",
|
||||
description: "Rejuvenate with holistic treatments.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/silhouette-woman-spa_23-2148000382.jpg",
|
||||
},
|
||||
{
|
||||
title: "Gourmet Dining",
|
||||
description: "Exquisite culinary journeys.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/life-style_1122-1806.jpg",
|
||||
},
|
||||
{
|
||||
title: "Concierge Services",
|
||||
description: "Your desires fulfilled.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/attractive-woman-reception-desk-looking-camera_23-2148033349.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fitness Center",
|
||||
description: "Stay active in our premium gym.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-sports-couple-making-cardio-workout-modern-gym_496169-2712.jpg",
|
||||
},
|
||||
{
|
||||
title: "Sky Lounge",
|
||||
description: "Breathtaking views.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/classic-old-fashioned-library-space-with-elegant-wooden-interiors_482257-125296.jpg",
|
||||
},
|
||||
{
|
||||
title: "Secret Gardens",
|
||||
description: "Escape into nature.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/san-diego-dawn-early-morning-with-palm-tree-silhouette_649448-2514.jpg",
|
||||
},
|
||||
{
|
||||
title: "Event Space",
|
||||
description: "Host in pure luxury.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/chair-front-businesswoman-sitting-caf_23-2147876643.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AmenitiesSection />
|
||||
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingHighlightedCards
|
||||
tag="Stay With Us"
|
||||
title="Curated Suites"
|
||||
description="Select the perfect room for your next escape."
|
||||
plans={[
|
||||
{
|
||||
tag: "Essential",
|
||||
price: "$450/nt",
|
||||
description: "The perfect introduction to luxury.",
|
||||
features: [
|
||||
"King-sized Bed",
|
||||
"City View",
|
||||
"Complimentary Wi-Fi",
|
||||
],
|
||||
primaryButton: {
|
||||
text: "Book Now",
|
||||
href: "#",
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: "Elite",
|
||||
price: "$890/nt",
|
||||
description: "Unmatched sophistication.",
|
||||
features: [
|
||||
"Panoramic Suite",
|
||||
"Personal Butler",
|
||||
"Private Terrace",
|
||||
"Lounge Access",
|
||||
],
|
||||
highlight: "Most Popular",
|
||||
primaryButton: {
|
||||
text: "Book Now",
|
||||
href: "#",
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: "Royal",
|
||||
price: "$1,450/nt",
|
||||
description: "The ultimate Meliá experience.",
|
||||
features: [
|
||||
"Penthouse Level",
|
||||
"24/7 Concierge",
|
||||
"Spa Credits",
|
||||
"VIP Transfer",
|
||||
],
|
||||
primaryButton: {
|
||||
text: "Book Now",
|
||||
href: "#",
|
||||
},
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<PricingSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="Our Global Impact"
|
||||
title="Meliá by Numbers"
|
||||
description="Setting standards across the globe."
|
||||
metrics={[
|
||||
{
|
||||
icon: MapPin,
|
||||
title: "Destinations",
|
||||
value: "150+",
|
||||
},
|
||||
{
|
||||
icon: Star,
|
||||
title: "Global Awards",
|
||||
value: "450",
|
||||
},
|
||||
{
|
||||
icon: Smile,
|
||||
title: "Happy Guests",
|
||||
value: "2M+",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeOverlayCards
|
||||
tag="Guest Stories"
|
||||
title="Voices of Excellence"
|
||||
description="Discover why our guests return year after year."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Julianna S.",
|
||||
role: "Travel Editor",
|
||||
company: "GlobeTrotter",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/elegant-old-man-airport-with-suitcase_1157-33367.jpg",
|
||||
},
|
||||
{
|
||||
name: "Mark D.",
|
||||
role: "CEO",
|
||||
company: "TechInnovate",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-black-woman-smile-camera_197531-33139.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sophia V.",
|
||||
role: "Architect",
|
||||
company: "VDesigns",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/groom-portrait-outdoor_624325-1547.jpg",
|
||||
},
|
||||
{
|
||||
name: "Robert B.",
|
||||
role: "Entrepreneur",
|
||||
company: "StartupX",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/browneyed-brunette-woman-beige-dress-with-straw-bag-holds-widebrimmed-hat-moves-along-path-old-city_197531-30085.jpg",
|
||||
},
|
||||
{
|
||||
name: "Elena R.",
|
||||
role: "Journalist",
|
||||
company: "GlobalNews",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-lovely-couple-dancing_23-2148060455.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="social-proof" data-section="social-proof">
|
||||
<SectionErrorBoundary name="social-proof">
|
||||
<SocialProofMarquee
|
||||
tag="Partnerships"
|
||||
title="Accredited Excellence"
|
||||
description="Recognized by industry leaders worldwide."
|
||||
names={[
|
||||
"Forbes Travel Guide",
|
||||
"Condé Nast Traveler",
|
||||
"Michelin Guide",
|
||||
"Leading Hotels of the World",
|
||||
"Virtuoso",
|
||||
"American Express Fine Hotels",
|
||||
"TripAdvisor Choice",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<SocialProofSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Connect With Us"
|
||||
text="Your perfect stay awaits. Reach out to our concierge today for bespoke bookings."
|
||||
primaryButton={{
|
||||
text: "Contact Concierge",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "View All Offers",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
26
src/pages/HomePage/sections/About.tsx
Normal file
26
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
// 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 AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTextSplit
|
||||
title="A Legacy of Hospitality"
|
||||
descriptions={[
|
||||
"Meliá represents the pinnacle of luxury, where tradition meets contemporary design. Our curated properties are designed to offer sanctuary and sophistication.",
|
||||
"Since our founding, we have been dedicated to providing bespoke experiences for travelers who demand excellence. Every detail is a testament to our commitment.",
|
||||
]}
|
||||
primaryButton={{
|
||||
text: "Our History",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Amenities.tsx
Normal file
57
src/pages/HomePage/sections/Amenities.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 "amenities" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AmenitiesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="amenities" data-section="amenities">
|
||||
<SectionErrorBoundary name="amenities">
|
||||
<FeaturesImageBento
|
||||
tag="Our Offerings"
|
||||
title="World-Class Amenities"
|
||||
description="Indulge in a collection of experiences tailored to your refined taste."
|
||||
items={[
|
||||
{
|
||||
title: "Sanctuary Spa",
|
||||
description: "Rejuvenate with holistic treatments.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/silhouette-woman-spa_23-2148000382.jpg",
|
||||
},
|
||||
{
|
||||
title: "Gourmet Dining",
|
||||
description: "Exquisite culinary journeys.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/life-style_1122-1806.jpg",
|
||||
},
|
||||
{
|
||||
title: "Concierge Services",
|
||||
description: "Your desires fulfilled.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/attractive-woman-reception-desk-looking-camera_23-2148033349.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fitness Center",
|
||||
description: "Stay active in our premium gym.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-sports-couple-making-cardio-workout-modern-gym_496169-2712.jpg",
|
||||
},
|
||||
{
|
||||
title: "Sky Lounge",
|
||||
description: "Breathtaking views.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/classic-old-fashioned-library-space-with-elegant-wooden-interiors_482257-125296.jpg",
|
||||
},
|
||||
{
|
||||
title: "Secret Gardens",
|
||||
description: "Escape into nature.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/san-diego-dawn-early-morning-with-palm-tree-silhouette_649448-2514.jpg",
|
||||
},
|
||||
{
|
||||
title: "Event Space",
|
||||
description: "Host in pure luxury.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/chair-front-businesswoman-sitting-caf_23-2147876643.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</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="Connect With Us"
|
||||
text="Your perfect stay awaits. Reach out to our concierge today for bespoke bookings."
|
||||
primaryButton={{
|
||||
text: "Contact Concierge",
|
||||
href: "#",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "View All Offers",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
30
src/pages/HomePage/sections/Features.tsx
Normal file
30
src/pages/HomePage/sections/Features.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "features" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesComparison from '@/components/sections/features/FeaturesComparison';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesComparison
|
||||
tag="Experience Difference"
|
||||
title="Why Choose Meliá"
|
||||
description="Excellence is not just a standard, it's our promise."
|
||||
negativeItems={[
|
||||
"Average room sizing",
|
||||
"Standard concierge services",
|
||||
"Basic amenity packages",
|
||||
]}
|
||||
positiveItems={[
|
||||
"Spacious designer suites",
|
||||
"24/7 Personalised butler",
|
||||
"Exclusive luxury amenities",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
19
src/pages/HomePage/sections/Hero.tsx
Normal file
19
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
// Created by add_section_from_catalog (HeroBillboardCarousel).
|
||||
|
||||
import React from 'react';
|
||||
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div data-webild-section="hero" id="hero">
|
||||
<HeroBillboardCarousel
|
||||
secondaryButton={{"href":"#offers","text":"Ofertas exclusivas"}}
|
||||
description="Descubre nuestros hoteles y resorts en los destinos más exclusivos. Lujo, confort y un servicio excepcional te esperan."
|
||||
items={[{"imageSrc":"https://images.unsplash.com/photo-1566073771259-6a8506099945?auto=format&fit=crop&q=80"},{"imageSrc":"https://images.unsplash.com/photo-1582719508461-905c673771fd?auto=format&fit=crop&q=80"},{"imageSrc":"https://images.unsplash.com/photo-1520250497591-112f2f40a3f4?auto=format&fit=crop&q=80"},{"imageSrc":"https://images.unsplash.com/photo-1571896349842-33c89424de2d?auto=format&fit=crop&q=80"}]}
|
||||
title="Vive la experiencia Meliá"
|
||||
primaryButton={{"text":"Encuentra tu hotel","href":"#booking"}}
|
||||
tag="Meliá Hotels International"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Metrics.tsx
Normal file
38
src/pages/HomePage/sections/Metrics.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 "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import { MapPin, Smile, Star } 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 Global Impact"
|
||||
title="Meliá by Numbers"
|
||||
description="Setting standards across the globe."
|
||||
metrics={[
|
||||
{
|
||||
icon: MapPin,
|
||||
title: "Destinations",
|
||||
value: "150+",
|
||||
},
|
||||
{
|
||||
icon: Star,
|
||||
title: "Global Awards",
|
||||
value: "450",
|
||||
},
|
||||
{
|
||||
icon: Smile,
|
||||
title: "Happy Guests",
|
||||
value: "2M+",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
67
src/pages/HomePage/sections/Pricing.tsx
Normal file
67
src/pages/HomePage/sections/Pricing.tsx
Normal file
@@ -0,0 +1,67 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "pricing" section.
|
||||
|
||||
import React from 'react';
|
||||
import PricingHighlightedCards from '@/components/sections/pricing/PricingHighlightedCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function PricingSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingHighlightedCards
|
||||
tag="Stay With Us"
|
||||
title="Curated Suites"
|
||||
description="Select the perfect room for your next escape."
|
||||
plans={[
|
||||
{
|
||||
tag: "Essential",
|
||||
price: "$450/nt",
|
||||
description: "The perfect introduction to luxury.",
|
||||
features: [
|
||||
"King-sized Bed",
|
||||
"City View",
|
||||
"Complimentary Wi-Fi",
|
||||
],
|
||||
primaryButton: {
|
||||
text: "Book Now",
|
||||
href: "#",
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: "Elite",
|
||||
price: "$890/nt",
|
||||
description: "Unmatched sophistication.",
|
||||
features: [
|
||||
"Panoramic Suite",
|
||||
"Personal Butler",
|
||||
"Private Terrace",
|
||||
"Lounge Access",
|
||||
],
|
||||
highlight: "Most Popular",
|
||||
primaryButton: {
|
||||
text: "Book Now",
|
||||
href: "#",
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: "Royal",
|
||||
price: "$1,450/nt",
|
||||
description: "The ultimate Meliá experience.",
|
||||
features: [
|
||||
"Penthouse Level",
|
||||
"24/7 Concierge",
|
||||
"Spa Credits",
|
||||
"VIP Transfer",
|
||||
],
|
||||
primaryButton: {
|
||||
text: "Book Now",
|
||||
href: "#",
|
||||
},
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</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="Partnerships"
|
||||
title="Accredited Excellence"
|
||||
description="Recognized by industry leaders worldwide."
|
||||
names={[
|
||||
"Forbes Travel Guide",
|
||||
"Condé Nast Traveler",
|
||||
"Michelin Guide",
|
||||
"Leading Hotels of the World",
|
||||
"Virtuoso",
|
||||
"American Express Fine Hotels",
|
||||
"TripAdvisor Choice",
|
||||
]}
|
||||
/>
|
||||
</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="Guest Stories"
|
||||
title="Voices of Excellence"
|
||||
description="Discover why our guests return year after year."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Julianna S.",
|
||||
role: "Travel Editor",
|
||||
company: "GlobeTrotter",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/elegant-old-man-airport-with-suitcase_1157-33367.jpg",
|
||||
},
|
||||
{
|
||||
name: "Mark D.",
|
||||
role: "CEO",
|
||||
company: "TechInnovate",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-black-woman-smile-camera_197531-33139.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sophia V.",
|
||||
role: "Architect",
|
||||
company: "VDesigns",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/groom-portrait-outdoor_624325-1547.jpg",
|
||||
},
|
||||
{
|
||||
name: "Robert B.",
|
||||
role: "Entrepreneur",
|
||||
company: "StartupX",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/browneyed-brunette-woman-beige-dress-with-straw-bag-holds-widebrimmed-hat-moves-along-path-old-city_197531-30085.jpg",
|
||||
},
|
||||
{
|
||||
name: "Elena R.",
|
||||
role: "Journalist",
|
||||
company: "GlobalNews",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-lovely-couple-dancing_23-2148060455.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user