Merge version_2_1781533380359 into main #2
@@ -1,330 +1,44 @@
|
||||
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import HeroSplit from '@/components/sections/hero/HeroSplit';
|
||||
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
|
||||
import PricingSimpleCards from '@/components/sections/pricing/PricingSimpleCards';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
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 TrustSection from './HomePage/sections/Trust';
|
||||
import AboutSection from './HomePage/sections/About';
|
||||
import RoomsSection from './HomePage/sections/Rooms';
|
||||
import WhySection from './HomePage/sections/Why';
|
||||
import DestinationsSection from './HomePage/sections/Destinations';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import GallerySection from './HomePage/sections/Gallery';
|
||||
import BookingSection from './HomePage/sections/Booking';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import TrustBadgesSection from './HomePage/sections/TrustBadges';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplit
|
||||
tag="Welcome to Demnate"
|
||||
title="Comfortable & Affordable Stay in the Heart of Demnate"
|
||||
description="Experience clean rooms, welcoming hospitality, and excellent value while exploring the beauty of Demnate and the Atlas Mountains."
|
||||
primaryButton={{
|
||||
text: "Book Your Stay",
|
||||
href: "#booking",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us",
|
||||
href: "#contact",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/luxury-villa-with-infinity-pool-sunset-coastal-view_23-2151986080.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="trust" data-section="trust">
|
||||
<SectionErrorBoundary name="trust">
|
||||
<MetricsMediaCards
|
||||
tag="Why Guests Choose Us"
|
||||
title="Clean, Comfortable, Affordable"
|
||||
description="A practical and comfortable choice for travelers, families, and visitors exploring Demnate."
|
||||
metrics={[
|
||||
{
|
||||
value: "✓",
|
||||
title: "Clean Rooms",
|
||||
description: "Daily maintained for hygiene.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/pillow-bed_1203-3751.jpg",
|
||||
},
|
||||
{
|
||||
value: "✓",
|
||||
title: "Location",
|
||||
description: "Central Demnate access.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/aerial-view-warrumbungle-national-park-mountains-blue-sky_1308-189549.jpg",
|
||||
},
|
||||
{
|
||||
value: "✓",
|
||||
title: "Service",
|
||||
description: "Friendly hospitality.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/old-tourist-using-mobile-nfc-technology_482257-76765.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TrustSection />
|
||||
<TrustBadgesSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTestimonial
|
||||
tag="Our Story"
|
||||
quote="Located in the heart of Demnate, Hôtel Résidence Marrakech offers guests a comfortable, clean, and affordable place to stay."
|
||||
author="Management Team"
|
||||
role="Hôtel Résidence Marrakech"
|
||||
imageSrc="http://img.b2bpic.net/free-photo/facade-old-architectural-building_169016-22403.jpg?_wi=1"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="rooms" data-section="rooms">
|
||||
<SectionErrorBoundary name="rooms">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Our Accommodations"
|
||||
title="Comfortable Rooms for Every Traveler"
|
||||
description="A variety of room options tailored to your needs."
|
||||
items={[
|
||||
{
|
||||
title: "Standard Room",
|
||||
description: "Comfortable Bed, Private Bathroom, WiFi, Daily Cleaning",
|
||||
buttonIcon: "Bed",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-luxury-comfortable-white-pillow-blanket-decoration-interior-bedroom_74190-12647.jpg",
|
||||
},
|
||||
{
|
||||
title: "Double Room",
|
||||
description: "Double Bed, Private Bathroom, Spacious Layout, Natural Lighting",
|
||||
buttonIcon: "Bed",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/double-bed-with-four-pillows_1203-1107.jpg",
|
||||
},
|
||||
{
|
||||
title: "Family Room",
|
||||
description: "Larger Space, Family Friendly, Comfortable Bedding, Great Value",
|
||||
buttonIcon: "Bed",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/long-shot-family-looking-through-map-caravan_23-2148659492.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<RoomsSection />
|
||||
|
||||
<div id="why" data-section="why">
|
||||
<SectionErrorBoundary name="why">
|
||||
<PricingSimpleCards
|
||||
tag="Why Choose Us"
|
||||
title="Affordable Quality"
|
||||
description="We believe in transparency and value."
|
||||
plans={[
|
||||
{
|
||||
tag: "Value",
|
||||
price: "Affordable",
|
||||
description: "Rates for all budgets",
|
||||
features: [
|
||||
"Budget-friendly",
|
||||
"Direct booking perks",
|
||||
"No hidden fees",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Location",
|
||||
price: "Convenient",
|
||||
description: "Heart of Demnate",
|
||||
features: [
|
||||
"Central location",
|
||||
"Near shops",
|
||||
"Easy access",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Clean",
|
||||
price: "Sanitary",
|
||||
description: "Hygiene standards",
|
||||
features: [
|
||||
"Daily cleaning",
|
||||
"Fresh linens",
|
||||
"Safe common areas",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<WhySection />
|
||||
|
||||
<div id="destinations" data-section="destinations">
|
||||
<SectionErrorBoundary name="destinations">
|
||||
<FeaturesImageBento
|
||||
tag="Explore"
|
||||
title="Discover the Beauty of Demnate"
|
||||
description="Breathtaking landscapes and culture."
|
||||
items={[
|
||||
{
|
||||
title: "Atlas Mountains",
|
||||
description: "Stunning vistas",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/ksar-ait-ben-haddou-surrounded-by-greenery-sunlight-blue-sky-morocco_181624-14248.jpg",
|
||||
},
|
||||
{
|
||||
title: "Natural Bridge",
|
||||
description: "Imi N'Ifri landmark",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/bear-mountain-foliage_649448-4505.jpg",
|
||||
},
|
||||
{
|
||||
title: "Culture",
|
||||
description: "Traditional streets",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/spices-market-morocco_23-2148129918.jpg",
|
||||
},
|
||||
{
|
||||
title: "Exterior",
|
||||
description: "Hotel views",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/modern-building-with-windows-blue-sky-sunlight-evening_181624-14350.jpg",
|
||||
},
|
||||
{
|
||||
title: "Reception",
|
||||
description: "Warm welcome",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beauty-slim-african-american-model-wear-black-blouse-green-long-legs-pants-posed-chinese-cafe_627829-5911.jpg",
|
||||
},
|
||||
{
|
||||
title: "Comfort",
|
||||
description: "Clean space",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/sofa-pillow_74190-1207.jpg",
|
||||
},
|
||||
{
|
||||
title: "Amenities",
|
||||
description: "Quality service",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/hallway-building_23-2149397562.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<DestinationsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Guest Voices"
|
||||
title="What Guests Say"
|
||||
description="We are proud of our hospitality."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Ahmed M.",
|
||||
role: "Traveler",
|
||||
quote: "Comfortable and safe stay. I really enjoyed my visit.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/white-towel-bed_74190-4536.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah L.",
|
||||
role: "Guest",
|
||||
quote: "Simple, clean, and good value for money.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/luxury-hotel-room-with-modern-design-elegance-generated-by-ai_188544-17094.jpg",
|
||||
},
|
||||
{
|
||||
name: "David K.",
|
||||
role: "Traveler",
|
||||
quote: "Friendly atmosphere and convenient location.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/mother-daughter-using-digital-tablet-bedroom_1170-2786.jpg",
|
||||
},
|
||||
{
|
||||
name: "Elena R.",
|
||||
role: "Guest",
|
||||
quote: "A practical choice for travelers on a budget.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-shot-yellow-trees-mountains-with-blue-sky_181624-4178.jpg",
|
||||
},
|
||||
{
|
||||
name: "Youssef T.",
|
||||
role: "Traveler",
|
||||
quote: "Wonderful hospitality and clean amenities.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/bellboy-helping-woman-guest-carry-baggage-her-room-traveller-with-trolley-bags-waiting-lounge-area-professional-bellhop-provising-luxury-service-hotel-customers-handheld-shot_482257-65357.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="gallery" data-section="gallery">
|
||||
<SectionErrorBoundary name="gallery">
|
||||
<FeaturesImageBento
|
||||
tag="Gallery"
|
||||
title="Our Hotel"
|
||||
description="Visual tour of your home away from home."
|
||||
items={[
|
||||
{
|
||||
title: "Reception",
|
||||
description: "Arrival area",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/friendly-afro-man-traditional-yellow-clothes-restaurant_627829-1132.jpg",
|
||||
},
|
||||
{
|
||||
title: "Exterior",
|
||||
description: "Main View",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/luxury-villa-with-outdoor-patio-ocean-view_23-2151986058.jpg",
|
||||
},
|
||||
{
|
||||
title: "Standard Room",
|
||||
description: "Comfort",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/contemporary-house-interior-design_23-2151050935.jpg",
|
||||
},
|
||||
{
|
||||
title: "Family Suite",
|
||||
description: "Spacious",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-couple-lying-bed-playing-with-their-baby_23-2147923029.jpg",
|
||||
},
|
||||
{
|
||||
title: "Hallway",
|
||||
description: "Entryway",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/abstract-blur-defocused-hotel-lobby-lounge_74190-6102.jpg",
|
||||
},
|
||||
{
|
||||
title: "Mountain View",
|
||||
description: "Scenery",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-shot-canyon-mountains-cloudy-sky_181624-7807.jpg",
|
||||
},
|
||||
{
|
||||
title: "Natural Beauty",
|
||||
description: "Local landscape",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/wave-sandstone-rock-formations-arizona-united-states_181624-29498.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<GallerySection />
|
||||
|
||||
<div id="booking" data-section="booking">
|
||||
<SectionErrorBoundary name="booking">
|
||||
<ContactCta
|
||||
tag="Reserve Now"
|
||||
text="Ready for your stay? Book directly and save."
|
||||
primaryButton={{
|
||||
text: "Book Now",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Call Us",
|
||||
href: "tel:+212000000000",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<BookingSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<FaqTwoColumn
|
||||
tag="Support"
|
||||
title="Frequently Asked Questions"
|
||||
description="Need to contact us directly?"
|
||||
items={[
|
||||
{
|
||||
question: "Where are you located?",
|
||||
answer: "PXMW+532, Demnate, Morocco",
|
||||
},
|
||||
{
|
||||
question: "Do you offer WiFi?",
|
||||
answer: "Yes, high-speed WiFi is included.",
|
||||
},
|
||||
{
|
||||
question: "Is parking available?",
|
||||
answer: "Yes, free parking is available.",
|
||||
},
|
||||
{
|
||||
question: "Can I cancel?",
|
||||
answer: "Check our flexible booking policy.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
22
src/pages/HomePage/sections/About.tsx
Normal file
22
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,22 @@
|
||||
// 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 AboutTestimonial from '@/components/sections/about/AboutTestimonial';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTestimonial
|
||||
tag="Our Story"
|
||||
quote="Located in the heart of Demnate, Hôtel Résidence Marrakech offers guests a comfortable, clean, and affordable place to stay."
|
||||
author="Management Team"
|
||||
role="Hôtel Résidence Marrakech"
|
||||
imageSrc="http://img.b2bpic.net/free-photo/facade-old-architectural-building_169016-22403.jpg?_wi=1"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Booking.tsx
Normal file
27
src/pages/HomePage/sections/Booking.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 "booking" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function BookingSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="booking" data-section="booking">
|
||||
<SectionErrorBoundary name="booking">
|
||||
<ContactCta
|
||||
tag="Reserve Now"
|
||||
text="Ready for your stay? Book directly and save."
|
||||
primaryButton={{
|
||||
text: "Book Now",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Call Us",
|
||||
href: "tel:+212000000000",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Contact.tsx
Normal file
38
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<FaqTwoColumn
|
||||
tag="Support"
|
||||
title="Frequently Asked Questions"
|
||||
description="Need to contact us directly?"
|
||||
items={[
|
||||
{
|
||||
question: "Where are you located?",
|
||||
answer: "PXMW+532, Demnate, Morocco",
|
||||
},
|
||||
{
|
||||
question: "Do you offer WiFi?",
|
||||
answer: "Yes, high-speed WiFi is included.",
|
||||
},
|
||||
{
|
||||
question: "Is parking available?",
|
||||
answer: "Yes, free parking is available.",
|
||||
},
|
||||
{
|
||||
question: "Can I cancel?",
|
||||
answer: "Check our flexible booking policy.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Destinations.tsx
Normal file
57
src/pages/HomePage/sections/Destinations.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 "destinations" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function DestinationsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="destinations" data-section="destinations">
|
||||
<SectionErrorBoundary name="destinations">
|
||||
<FeaturesImageBento
|
||||
tag="Explore"
|
||||
title="Discover the Beauty of Demnate"
|
||||
description="Breathtaking landscapes and culture."
|
||||
items={[
|
||||
{
|
||||
title: "Atlas Mountains",
|
||||
description: "Stunning vistas",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/ksar-ait-ben-haddou-surrounded-by-greenery-sunlight-blue-sky-morocco_181624-14248.jpg",
|
||||
},
|
||||
{
|
||||
title: "Natural Bridge",
|
||||
description: "Imi N'Ifri landmark",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/bear-mountain-foliage_649448-4505.jpg",
|
||||
},
|
||||
{
|
||||
title: "Culture",
|
||||
description: "Traditional streets",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/spices-market-morocco_23-2148129918.jpg",
|
||||
},
|
||||
{
|
||||
title: "Exterior",
|
||||
description: "Hotel views",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/modern-building-with-windows-blue-sky-sunlight-evening_181624-14350.jpg",
|
||||
},
|
||||
{
|
||||
title: "Reception",
|
||||
description: "Warm welcome",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beauty-slim-african-american-model-wear-black-blouse-green-long-legs-pants-posed-chinese-cafe_627829-5911.jpg",
|
||||
},
|
||||
{
|
||||
title: "Comfort",
|
||||
description: "Clean space",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/sofa-pillow_74190-1207.jpg",
|
||||
},
|
||||
{
|
||||
title: "Amenities",
|
||||
description: "Quality service",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/hallway-building_23-2149397562.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Gallery.tsx
Normal file
57
src/pages/HomePage/sections/Gallery.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 "gallery" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function GallerySection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="gallery" data-section="gallery">
|
||||
<SectionErrorBoundary name="gallery">
|
||||
<FeaturesImageBento
|
||||
tag="Gallery"
|
||||
title="Our Hotel"
|
||||
description="Visual tour of your home away from home."
|
||||
items={[
|
||||
{
|
||||
title: "Reception",
|
||||
description: "Arrival area",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/friendly-afro-man-traditional-yellow-clothes-restaurant_627829-1132.jpg",
|
||||
},
|
||||
{
|
||||
title: "Exterior",
|
||||
description: "Main View",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/luxury-villa-with-outdoor-patio-ocean-view_23-2151986058.jpg",
|
||||
},
|
||||
{
|
||||
title: "Standard Room",
|
||||
description: "Comfort",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/contemporary-house-interior-design_23-2151050935.jpg",
|
||||
},
|
||||
{
|
||||
title: "Family Suite",
|
||||
description: "Spacious",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-couple-lying-bed-playing-with-their-baby_23-2147923029.jpg",
|
||||
},
|
||||
{
|
||||
title: "Hallway",
|
||||
description: "Entryway",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/abstract-blur-defocused-hotel-lobby-lounge_74190-6102.jpg",
|
||||
},
|
||||
{
|
||||
title: "Mountain View",
|
||||
description: "Scenery",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-shot-canyon-mountains-cloudy-sky_181624-7807.jpg",
|
||||
},
|
||||
{
|
||||
title: "Natural Beauty",
|
||||
description: "Local landscape",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/wave-sandstone-rock-formations-arizona-united-states_181624-29498.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Hero.tsx
Normal file
29
src/pages/HomePage/sections/Hero.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 "hero" section.
|
||||
|
||||
import React from 'react';
|
||||
import HeroSplit from '@/components/sections/hero/HeroSplit';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplit
|
||||
tag="Welcome to Demnate"
|
||||
title="Comfortable & Affordable Stay in the Heart of Demnate"
|
||||
description="Experience clean rooms, welcoming hospitality, and excellent value while exploring the beauty of Demnate and the Atlas Mountains."
|
||||
primaryButton={{
|
||||
text: "Book Your Stay",
|
||||
href: "#booking",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us",
|
||||
href: "#contact",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/luxury-villa-with-infinity-pool-sunset-coastal-view_23-2151986080.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
40
src/pages/HomePage/sections/Rooms.tsx
Normal file
40
src/pages/HomePage/sections/Rooms.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
// 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 FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function RoomsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="rooms" data-section="rooms">
|
||||
<SectionErrorBoundary name="rooms">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Our Accommodations"
|
||||
title="Comfortable Rooms for Every Traveler"
|
||||
description="A variety of room options tailored to your needs."
|
||||
items={[
|
||||
{
|
||||
title: "Standard Room",
|
||||
description: "Comfortable Bed, Private Bathroom, WiFi, Daily Cleaning",
|
||||
buttonIcon: "Bed",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-luxury-comfortable-white-pillow-blanket-decoration-interior-bedroom_74190-12647.jpg",
|
||||
},
|
||||
{
|
||||
title: "Double Room",
|
||||
description: "Double Bed, Private Bathroom, Spacious Layout, Natural Lighting",
|
||||
buttonIcon: "Bed",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/double-bed-with-four-pillows_1203-1107.jpg",
|
||||
},
|
||||
{
|
||||
title: "Family Room",
|
||||
description: "Larger Space, Family Friendly, Comfortable Bedding, Great Value",
|
||||
buttonIcon: "Bed",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/long-shot-family-looking-through-map-caravan_23-2148659492.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Testimonials.tsx
Normal file
52
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
// 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 TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Guest Voices"
|
||||
title="What Guests Say"
|
||||
description="We are proud of our hospitality."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Ahmed M.",
|
||||
role: "Traveler",
|
||||
quote: "Comfortable and safe stay. I really enjoyed my visit.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/white-towel-bed_74190-4536.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah L.",
|
||||
role: "Guest",
|
||||
quote: "Simple, clean, and good value for money.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/luxury-hotel-room-with-modern-design-elegance-generated-by-ai_188544-17094.jpg",
|
||||
},
|
||||
{
|
||||
name: "David K.",
|
||||
role: "Traveler",
|
||||
quote: "Friendly atmosphere and convenient location.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/mother-daughter-using-digital-tablet-bedroom_1170-2786.jpg",
|
||||
},
|
||||
{
|
||||
name: "Elena R.",
|
||||
role: "Guest",
|
||||
quote: "A practical choice for travelers on a budget.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-shot-yellow-trees-mountains-with-blue-sky_181624-4178.jpg",
|
||||
},
|
||||
{
|
||||
name: "Youssef T.",
|
||||
role: "Traveler",
|
||||
quote: "Wonderful hospitality and clean amenities.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/bellboy-helping-woman-guest-carry-baggage-her-room-traveller-with-trolley-bags-waiting-lounge-area-professional-bellhop-provising-luxury-service-hotel-customers-handheld-shot_482257-65357.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
40
src/pages/HomePage/sections/Trust.tsx
Normal file
40
src/pages/HomePage/sections/Trust.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "trust" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TrustSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="trust" data-section="trust">
|
||||
<SectionErrorBoundary name="trust">
|
||||
<MetricsMediaCards
|
||||
tag="Why Guests Choose Us"
|
||||
title="Clean, Comfortable, Affordable"
|
||||
description="A practical and comfortable choice for travelers, families, and visitors exploring Demnate."
|
||||
metrics={[
|
||||
{
|
||||
value: "✓",
|
||||
title: "Clean Rooms",
|
||||
description: "Daily maintained for hygiene.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/pillow-bed_1203-3751.jpg",
|
||||
},
|
||||
{
|
||||
value: "✓",
|
||||
title: "Location",
|
||||
description: "Central Demnate access.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/aerial-view-warrumbungle-national-park-mountains-blue-sky_1308-189549.jpg",
|
||||
},
|
||||
{
|
||||
value: "✓",
|
||||
title: "Service",
|
||||
description: "Friendly hospitality.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/old-tourist-using-mobile-nfc-technology_482257-76765.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/TrustBadges.tsx
Normal file
29
src/pages/HomePage/sections/TrustBadges.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
import { motion } from "motion/react"
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal"
|
||||
|
||||
export default function TrustBadgesSection() {
|
||||
return (
|
||||
<section data-webild-section="trust-badges" id="trust-badges" className="py-12 bg-background-accent/20 border-y border-border/50">
|
||||
<div className="w-content-width mx-auto px-4 md:px-6">
|
||||
<ScrollReveal variant="fade">
|
||||
<div className="flex flex-col items-center justify-center space-y-6">
|
||||
<p className="text-sm font-medium text-muted-foreground uppercase tracking-wider text-center">
|
||||
Trusted by guests worldwide
|
||||
</p>
|
||||
<div className="flex flex-wrap justify-center items-center gap-8 md:gap-16 opacity-80 grayscale hover:grayscale-0 transition-all duration-500">
|
||||
<div className="flex items-center gap-2">
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Booking.com_logo.svg/2560px-Booking.com_logo.svg.png" alt="Booking.com" className="h-8 md:h-10 object-contain" />
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/TripAdvisor_Logo.svg/1024px-TripAdvisor_Logo.svg.png" alt="TripAdvisor" className="h-8 md:h-10 object-contain" />
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/2560px-Google_2015_logo.svg.png" alt="Google Reviews" className="h-8 md:h-10 object-contain" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Why.tsx
Normal file
52
src/pages/HomePage/sections/Why.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "why" section.
|
||||
|
||||
import React from 'react';
|
||||
import PricingSimpleCards from '@/components/sections/pricing/PricingSimpleCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function WhySection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="why" data-section="why">
|
||||
<SectionErrorBoundary name="why">
|
||||
<PricingSimpleCards
|
||||
tag="Why Choose Us"
|
||||
title="Affordable Quality"
|
||||
description="We believe in transparency and value."
|
||||
plans={[
|
||||
{
|
||||
tag: "Value",
|
||||
price: "Affordable",
|
||||
description: "Rates for all budgets",
|
||||
features: [
|
||||
"Budget-friendly",
|
||||
"Direct booking perks",
|
||||
"No hidden fees",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Location",
|
||||
price: "Convenient",
|
||||
description: "Heart of Demnate",
|
||||
features: [
|
||||
"Central location",
|
||||
"Near shops",
|
||||
"Easy access",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Clean",
|
||||
price: "Sanitary",
|
||||
description: "Hygiene standards",
|
||||
features: [
|
||||
"Daily cleaning",
|
||||
"Fresh linens",
|
||||
"Safe common areas",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user