Merge version_2_1782165967701 into main #1

Merged
bender merged 1 commits from version_2_1782165967701 into main 2026-06-22 22:08:29 +00:00
9 changed files with 436 additions and 260 deletions

View File

@@ -1,272 +1,36 @@
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 HeroOverlay from '@/components/sections/hero/HeroOverlay';
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import PricingSplitCards from '@/components/sections/pricing/PricingSplitCards';
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
import { Coffee, Star, Users } 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 ServicesSection from './HomePage/sections/Services';
import PricingSection from './HomePage/sections/Pricing';
import TestimonialsSection from './HomePage/sections/Testimonials';
import MetricsSection from './HomePage/sections/Metrics';
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">
<HeroOverlay
tag="Experience True Luxury"
title="Welcome to Mövenpick"
description="Indulge in an exquisite blend of Swiss heritage, refined gastronomy, and modern comfort."
primaryButton={{
text: "Book Your Stay",
href: "#contact",
}}
secondaryButton={{
text: "Explore Services",
href: "#services",
}}
imageSrc="http://img.b2bpic.net/free-photo/view-luxurious-hotel-interior-space_23-2150683453.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutFeaturesSplit
tag="Our Heritage"
title="A Legacy of Hospitality"
description="Founded on Swiss roots, we provide exceptional service that turns every stay into a memory worth cherishing."
items={[
{
icon: Star,
title: "World-Class Comfort",
description: "Premium rooms designed for ultimate rest.",
},
{
icon: Coffee,
title: "Culinary Excellence",
description: "Gourmet dining experiences by master chefs.",
},
{
icon: Users,
title: "Personalized Service",
description: "Attentive staff catering to every need.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/handsome-businessman-with-women-standing-working-cafe_1157-28488.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesImageBento
tag="Our Offerings"
title="Indulgent Services"
description="Discover the range of amenities tailored for your relaxation and comfort."
items={[
{
title: "Luxury Spa",
description: "Relax in our world-class spa facilities.",
imageSrc: "http://img.b2bpic.net/free-photo/luxury-modern-apartment-with-elegant-wood-flooring-generated-by-ai_188544-36597.jpg",
},
{
title: "Gourmet Dining",
description: "Taste the finest international cuisine.",
imageSrc: "http://img.b2bpic.net/free-photo/flute-with-two-white-black-porcelain-plates-different-size-served-table-with-natural-fir-branch_132075-6157.jpg",
},
{
title: "Fitness Center",
description: "State-of-the-art gym with latest gear.",
imageSrc: "http://img.b2bpic.net/free-photo/young-female-mat-exercising_23-2148284930.jpg",
},
{
title: "Infinity Pool",
description: "Enjoy a swim with breathtaking views.",
imageSrc: "http://img.b2bpic.net/free-photo/hotel-pool-resort_74190-1651.jpg",
},
{
title: "Valet Parking",
description: "Seamless arrival experience provided daily.",
imageSrc: "http://img.b2bpic.net/free-photo/side-view-woman-with-car_23-2150274556.jpg",
},
{
title: "Concierge",
description: "Expert travel assistance for your trip.",
imageSrc: "http://img.b2bpic.net/free-photo/couple-having-date-together-luxurious-restaurant_23-2150517398.jpg",
},
{
title: "Meeting Rooms",
description: "Professional spaces for all events.",
imageSrc: "http://img.b2bpic.net/free-photo/gorgeous-italian-hall-with-paintings-wall_8353-656.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingSplitCards
tag="Stay With Us"
title="Room Pricing"
description="Find the perfect space for your travel needs."
plans={[
{
tag: "Basic",
price: "$299",
period: "/night",
description: "Perfect for solo travelers.",
primaryButton: {
text: "Select",
href: "#contact",
},
featuresTitle: "Included Perks",
features: [
"Complimentary Wifi",
"Daily Breakfast",
"Room Service",
],
},
{
tag: "Suite",
price: "$550",
period: "/night",
description: "Ideal for ultimate relaxation.",
primaryButton: {
text: "Select",
href: "#contact",
},
featuresTitle: "Suite Benefits",
features: [
"Ocean View",
"Private Lounge Access",
"Spa Credits",
],
},
]}
/>
</SectionErrorBoundary>
</div>
<PricingSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialTrustCard
quote="A truly unforgettable experience. Mövenpick set the standard for luxury hospitality."
rating={5}
author="Jennifer L."
avatars={[
{
name: "Guest 1",
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-home-doing-her-beauty-routine_23-2150420952.jpg",
},
{
name: "Guest 2",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-airline-check-attendant-counter_107420-95799.jpg",
},
{
name: "Guest 3",
imageSrc: "http://img.b2bpic.net/free-photo/glamorous-young-woman-looking-shoulder-while-drinking-pineapple-cocktail-smiling-blonde-girl-hat-sitting-near-pool-with-fruits_197531-20938.jpg",
},
{
name: "Guest 4",
imageSrc: "http://img.b2bpic.net/free-photo/full-shot-woman-holding-donut_23-2148773571.jpg",
},
{
name: "Guest 5",
imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-smiling-female-white-lingerie-towel-head_158538-18051.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsFeatureCards
tag="Our Impact"
title="Hotel Metrics"
description="Delivering excellence globally."
metrics={[
{
value: "150+",
title: "Rooms Available",
features: [
"Luxury suites",
"Standard rooms",
"Family units",
],
},
{
value: "20+",
title: "Global Locations",
features: [
"Europe",
"Middle East",
"Asia",
],
},
{
value: "99%",
title: "Guest Satisfaction",
features: [
"Cleanliness",
"Comfort",
"Friendly Service",
],
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Help Center"
title="Frequently Asked Questions"
description="Find answers to common inquiries."
categories={[
{
name: "Bookings",
items: [
{
question: "Can I cancel?",
answer: "Yes, flexible rates allow cancellation.",
},
],
},
{
name: "Stay",
items: [
{
question: "Check-in time?",
answer: "Check-in is from 3:00 PM.",
},
],
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Connect"
text="Book your dream stay with Mövenpick today."
primaryButton={{
text: "Contact Us",
href: "#",
}}
secondaryButton={{
text: "View Map",
href: "#",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View 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 { Coffee, Star, Users } 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 Heritage"
title="A Legacy of Hospitality"
description="Founded on Swiss roots, we provide exceptional service that turns every stay into a memory worth cherishing."
items={[
{
icon: Star,
title: "World-Class Comfort",
description: "Premium rooms designed for ultimate rest.",
},
{
icon: Coffee,
title: "Culinary Excellence",
description: "Gourmet dining experiences by master chefs.",
},
{
icon: Users,
title: "Personalized Service",
description: "Attentive staff catering to every need.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/handsome-businessman-with-women-standing-working-cafe_1157-28488.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,102 @@
/* eslint-disable */
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
import ScrollReveal from "@/components/ui/ScrollReveal";
import TextAnimation from "@/components/ui/TextAnimation";
import Button from "@/components/ui/Button";
import Input from "@/components/ui/Input";
import Label from "@/components/ui/Label";
const primaryButton = {
text: "Contact Us",
href: "#"
};
const secondaryButton = {
text: "View Map",
href: "#"
};
const ContactInline = () => {
return (
<section aria-label="Contact section" className="py-20">
<div className="w-content-width mx-auto grid grid-cols-1 lg:grid-cols-2 gap-12 items-start">
<ScrollReveal variant="fade">
<div className="flex flex-col gap-8 md:gap-10 py-10 px-8 rounded card h-full">
<div className="flex flex-col gap-2">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>{"Connect"}</p>
</div>
<TextAnimation
text={"Book your dream stay with Mövenpick today."}
variant="slide-up"
gradientText={true}
tag="h2"
className="text-4xl 2xl:text-5xl leading-[1.15] font-semibold text-balance"
/>
<p className="text-accent mt-4">
Please provide your details below to request a booking or inquire about your stay.
</p>
</div>
<form className="flex flex-col gap-4 mt-4" onSubmit={(e) => e.preventDefault()}>
<div>
<Label className="mb-1 block">Full Name</Label>
<Input type="text" placeholder="John Doe" required className="w-full" />
</div>
<div>
<Label className="mb-1 block">Passport Number</Label>
<Input type="text" placeholder="A1234567" required className="w-full" />
</div>
<div>
<Label className="mb-1 block">Telephone Number</Label>
<Input type="tel" placeholder="+1 234 567 8900" required className="w-full" />
</div>
<div>
<Label className="mb-1 block">Duration of Vacation</Label>
<Input type="text" placeholder="e.g., 7 days" required className="w-full" />
</div>
<Button text="Submit Request" variant="primary" className="mt-4 w-full" />
</form>
</div>
</ScrollReveal>
<ScrollReveal variant="fade" delay={0.2}>
<div className="flex flex-col gap-8 md:gap-10 py-10 px-8 rounded card h-full">
<div className="flex flex-col gap-2">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>{"Location"}</p>
</div>
<TextAnimation
text={"Find Us"}
variant="slide-up"
gradientText={true}
tag="h2"
className="text-4xl 2xl:text-5xl leading-[1.15] font-semibold text-balance"
/>
<p className="text-accent mt-4">
Visit our luxurious property located in the heart of the city.
</p>
<div className="mt-6 aspect-video w-full rounded overflow-hidden bg-card">
<iframe
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3151.835434509374!2d144.9537353153166!3d-37.816279742021665!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x6ad65d4c2b349649%3A0xb6899234e561db11!2sEnvato!5e0!3m2!1sen!2sau!4v1622000000000!5m2!1sen!2sau"
width="100%"
height="100%"
style={{ border: 0 }}
allowFullScreen=""
loading="lazy"
></iframe>
</div>
</div>
</div>
</ScrollReveal>
</div>
</section>
);
};
export default function ContactSection() {
return (
<div data-webild-section="contact" id="contact">
<ContactInline />
</div>
);
}

View File

@@ -0,0 +1,40 @@
// 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="Help Center"
title="Frequently Asked Questions"
description="Find answers to common inquiries."
categories={[
{
name: "Bookings",
items: [
{
question: "Can I cancel?",
answer: "Yes, flexible rates allow cancellation.",
},
],
},
{
name: "Stay",
items: [
{
question: "Check-in time?",
answer: "Check-in is from 3:00 PM.",
},
],
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,29 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "hero" section.
import React from 'react';
import HeroOverlay from '@/components/sections/hero/HeroOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroOverlay
tag="Experience True Luxury"
title="Welcome to Mövenpick"
description="Indulge in an exquisite blend of Swiss heritage, refined gastronomy, and modern comfort."
primaryButton={{
text: "Book Your Stay",
href: "#contact",
}}
secondaryButton={{
text: "Explore Services",
href: "#services",
}}
imageSrc="http://img.b2bpic.net/free-photo/view-luxurious-hotel-interior-space_23-2150683453.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,49 @@
// 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 MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsFeatureCards
tag="Our Impact"
title="Hotel Metrics"
description="Delivering excellence globally."
metrics={[
{
value: "150+",
title: "Rooms Available",
features: [
"Luxury suites",
"Standard rooms",
"Family units",
],
},
{
value: "20+",
title: "Global Locations",
features: [
"Europe",
"Middle East",
"Asia",
],
},
{
value: "99%",
title: "Guest Satisfaction",
features: [
"Cleanliness",
"Comfort",
"Friendly Service",
],
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,54 @@
// 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 PricingSplitCards from '@/components/sections/pricing/PricingSplitCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function PricingSection(): React.JSX.Element {
return (
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingSplitCards
tag="Stay With Us"
title="Room Pricing"
description="Find the perfect space for your travel needs."
plans={[
{
tag: "Basic",
price: "$299",
period: "/night",
description: "Perfect for solo travelers.",
primaryButton: {
text: "Select",
href: "#contact",
},
featuresTitle: "Included Perks",
features: [
"Complimentary Wifi",
"Daily Breakfast",
"Room Service",
],
},
{
tag: "Suite",
price: "$550",
period: "/night",
description: "Ideal for ultimate relaxation.",
primaryButton: {
text: "Select",
href: "#contact",
},
featuresTitle: "Suite Benefits",
features: [
"Ocean View",
"Private Lounge Access",
"Spa Credits",
],
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,57 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "services" section.
import React from 'react';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ServicesSection(): React.JSX.Element {
return (
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesImageBento
tag="Our Offerings"
title="Indulgent Services"
description="Discover the range of amenities tailored for your relaxation and comfort."
items={[
{
title: "Luxury Spa",
description: "Relax in our world-class spa facilities.",
imageSrc: "http://img.b2bpic.net/free-photo/luxury-modern-apartment-with-elegant-wood-flooring-generated-by-ai_188544-36597.jpg",
},
{
title: "Gourmet Dining",
description: "Taste the finest international cuisine.",
imageSrc: "http://img.b2bpic.net/free-photo/flute-with-two-white-black-porcelain-plates-different-size-served-table-with-natural-fir-branch_132075-6157.jpg",
},
{
title: "Fitness Center",
description: "State-of-the-art gym with latest gear.",
imageSrc: "http://img.b2bpic.net/free-photo/young-female-mat-exercising_23-2148284930.jpg",
},
{
title: "Infinity Pool",
description: "Enjoy a swim with breathtaking views.",
imageSrc: "http://img.b2bpic.net/free-photo/hotel-pool-resort_74190-1651.jpg",
},
{
title: "Valet Parking",
description: "Seamless arrival experience provided daily.",
imageSrc: "http://img.b2bpic.net/free-photo/side-view-woman-with-car_23-2150274556.jpg",
},
{
title: "Concierge",
description: "Expert travel assistance for your trip.",
imageSrc: "http://img.b2bpic.net/free-photo/couple-having-date-together-luxurious-restaurant_23-2150517398.jpg",
},
{
title: "Meeting Rooms",
description: "Professional spaces for all events.",
imageSrc: "http://img.b2bpic.net/free-photo/gorgeous-italian-hall-with-paintings-wall_8353-656.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,42 @@
// 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 TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialTrustCard
quote="A truly unforgettable experience. Mövenpick set the standard for luxury hospitality."
rating={5}
author="Jennifer L."
avatars={[
{
name: "Guest 1",
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-home-doing-her-beauty-routine_23-2150420952.jpg",
},
{
name: "Guest 2",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-airline-check-attendant-counter_107420-95799.jpg",
},
{
name: "Guest 3",
imageSrc: "http://img.b2bpic.net/free-photo/glamorous-young-woman-looking-shoulder-while-drinking-pineapple-cocktail-smiling-blonde-girl-hat-sitting-near-pool-with-fruits_197531-20938.jpg",
},
{
name: "Guest 4",
imageSrc: "http://img.b2bpic.net/free-photo/full-shot-woman-holding-donut_23-2148773571.jpg",
},
{
name: "Guest 5",
imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-smiling-female-white-lingerie-towel-head_158538-18051.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}