Merge version_2_1781999026883 into main #1

Merged
bender merged 1 commits from version_2_1781999026883 into main 2026-06-20 23:45:48 +00:00
11 changed files with 413 additions and 286 deletions

View File

@@ -4,6 +4,7 @@ import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import SiteBackgroundSlot from "@/components/ui/SiteBackgroundSlot";
import { Outlet } from 'react-router-dom';
import { StyleProvider } from "@/components/ui/StyleProvider";
import { Phone, MessageCircle } from "lucide-react";
export default function Layout() {
const navItems = [
@@ -52,10 +53,48 @@ export default function Layout() {
<main className="flex-grow">
<Outlet />
</main>
{/* Floating Action Buttons */}
<div className="fixed bottom-6 right-6 z-[9999] flex flex-col gap-3">
<a
href="https://wa.me/96265530019"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-14 h-14 rounded-full bg-[#25D366] text-white shadow-lg hover:scale-110 transition-transform"
aria-label="WhatsApp Now"
>
<MessageCircle size={28} />
</a>
<a
href="tel:065530019"
className="flex items-center justify-center w-14 h-14 rounded-full bg-primary-cta text-primary-cta-text shadow-lg hover:scale-110 transition-transform"
aria-label="Call Now"
>
<Phone size={28} />
</a>
</div>
<SectionErrorBoundary name="footer">
<FooterSimple
brand="Zhoor Al Shafa"
columns={[
{
title: "Contact Us",
items: [
{
label: "Phone: 06 553 0019",
href: "tel:065530019",
},
{
label: "WhatsApp: 06 553 0019",
href: "https://wa.me/96265530019",
},
{
label: "Support Hotline",
href: "tel:065530019",
},
],
},
{
title: "Branches",
items: [
@@ -87,19 +126,6 @@ export default function Layout() {
},
],
},
{
title: "Legal",
items: [
{
label: "Privacy Policy",
href: "#",
},
{
label: "Terms & Conditions",
href: "#",
},
],
},
]}
copyright="© 2024 Zhoor Al Shafa Restaurant. All Rights Reserved."
links={[

View File

@@ -19,7 +19,13 @@ const NavbarInline = ({ logo, navItems, ctaButton }: NavbarInlineProps) => {
return (
<nav data-section="navbar" className="fixed z-1000 top-5 left-1/2 -translate-x-1/2 w-content-width">
<div className="flex items-center justify-between p-2 xl:p-3 2xl:p-4 rounded backdrop-blur-sm card">
<a href="/" className="pl-2 text-xl font-medium text-foreground">{logo}</a>
<div className="flex items-center gap-4">
<a href="/" className="pl-2 text-xl font-medium text-foreground">{logo}</a>
<a href="tel:065530019" className="hidden md:flex items-center gap-2 text-sm text-accent hover:text-foreground transition-colors">
<span className="w-2 h-2 rounded-full bg-green-500 animate-pulse"></span>
06 553 0019
</a>
</div>
<div className="hidden md:flex absolute left-1/2 -translate-x-1/2 items-center gap-6">
{navItems.map((item) => (

View File

@@ -1,284 +1,36 @@
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import HeroBrand from '@/components/sections/hero/HeroBrand';
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
import PricingHighlightedCards from '@/components/sections/pricing/PricingHighlightedCards';
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
import { Award, MapPin, 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 MenuSection from './HomePage/sections/Menu';
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">
<HeroBrand
brand="Zhoor Al Shafa"
description="Authentic Jordanian Cuisine, elevated to an art form. Experience the richness of tradition and the precision of modern fine dining in every bite."
primaryButton={{
text: "Reserve Now",
href: "#contact",
}}
secondaryButton={{
text: "View Menu",
href: "#menu",
}}
imageSrc="http://img.b2bpic.net/free-photo/gold-cutlery-set-marble_1220-4756.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutFeaturesSplit
tag="Our Heritage"
title="A Legacy of Jordanian Culinary Excellence"
description="With branches in Amman and Manama, Zhoor Al Shafa combines century-old recipes with contemporary luxury, serving the finest lamb, grill, and traditional Mansaf to connoisseurs."
items={[
{
icon: Award,
title: "Traditional Mastery",
description: "Generations-old recipes perfected.",
},
{
icon: MapPin,
title: "Prime Locations",
description: "Elegant spaces in Amman & Manama.",
},
{
icon: Users,
title: "Elite Catering",
description: "Services for weddings & corporate events.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/concept-table-setting-christmas-holidays-beautiful-stylish-decorated-table-is-waiting-guests-holiday_132075-14171.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesRevealCardsBento
tag="Signature Dishes"
title="Explore Our Culinary Delights"
description="From our open-fire grills to traditional slow-cooked masterpieces, discover the signature flavours of our house."
items={[
{
title: "Mixed Grill Platter",
description: "1000g of premium quality char-grilled meats.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/closeup-thai-street-food_53876-18298.jpg",
},
{
title: "Stuffed Grape Leaves",
description: "Hand-rolled with our signature aromatic blend.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-cup-tea-with-lemon-white-desk_140725-79721.jpg",
},
{
title: "Lamb Mansaf",
description: "The national pride of Jordan, slow-cooked to perfection.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-rice-dish_23-2147680627.jpg",
},
{
title: "Fresh Fruit Juices",
description: "Pure, pressed citrus perfection, freshly squeezed.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-fresh-natural-orange-with-lemon-juice_23-2148293802.jpg",
},
{
title: "Traditional Kibbeh",
description: "Crispy shells stuffed with spiced meat.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/fried-bread-filled-with-minced-meat-tomato_140725-126.jpg",
},
{
title: "Signature Salads",
description: "Fresh, crisp ingredients with our secret dressings.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/duck-breast_1203-3018.jpg",
},
{
title: "Whole Grilled Chicken",
description: "Turkish style, moist and flavorful skin.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/fried-tasty-meat-fry-pan-with-onion-wooden-table_23-2148206953.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MenuSection />
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingHighlightedCards
tag="Catering Packages"
title="Exceptional Events Catering"
description="Host your celebrations with our legendary traditional dishes. Customized catering solutions for every occasion."
plans={[
{
tag: "Basic",
price: "8 JOD",
description: "For intimate family dinners.",
features: [
"Traditional Sides",
"Fresh Salad",
"Warm Bread",
],
primaryButton: {
text: "Inquire",
href: "#contact",
},
},
{
tag: "Event",
price: "12 JOD",
description: "Ideal for larger gatherings.",
features: [
"Mansaf Meal",
"Appetizers",
"Soft Drinks",
"Fast Service",
],
highlight: "Most Popular",
primaryButton: {
text: "Reserve",
href: "#contact",
},
},
{
tag: "VIP",
price: "22 JOD",
description: "Premium catering experience.",
features: [
"Full Mansaf Tray",
"Selection of Grills",
"VIP Service",
"Custom Menu",
],
primaryButton: {
text: "Contact Us",
href: "#contact",
},
},
]}
/>
</SectionErrorBoundary>
</div>
<PricingSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialColumnMarqueeCards
tag="Our Guests"
title="Memories at Our Table"
description="Stories from our valued guests who have made us part of their special moments."
testimonials={[
{
name: "Ahmed Al-Farsi",
role: "Food Critic",
quote: "The Mansaf is simply the best in the region. Authentic taste in a luxury setting.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-happy-cute-africanamerican-girl-smiling-pleased-showing-thumbsup-approval-lik_1258-149049.jpg",
},
{
name: "Sarah Mansour",
role: "Local Resident",
quote: "Zhoor Al Shafa has become our go-to for all family gatherings. The service is impeccable.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-couple-having-lunch-luxury-restaurant_23-2150598413.jpg",
},
{
name: "Khalid Mahmoud",
role: "Regular Guest",
quote: "I have visited many places, but the quality of the grills here is unmatched.",
imageSrc: "http://img.b2bpic.net/free-photo/handsome-groom-feeding-his-bride-with-croissant-cafe_176420-2272.jpg",
},
{
name: "Layla Omar",
role: "Event Planner",
quote: "Collaborating with them for our weddings is always seamless. Highly professional catering.",
imageSrc: "http://img.b2bpic.net/free-photo/people-cheering-with-wine-glasses-luxurious-restaurant_23-2150517447.jpg",
},
{
name: "Omar Al-Hussein",
role: "Frequent Diner",
quote: "A truly premium fine-dining experience that respects traditional Jordanian roots.",
imageSrc: "http://img.b2bpic.net/free-photo/group-young-people-gathering-dinner_23-2148454163.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsSimpleCards
tag="Our Growth"
title="Experience the Numbers"
description="Our journey as a leading restaurant brand in Amman and Manama."
metrics={[
{
value: "3",
description: "International Branches",
},
{
value: "20+",
description: "Years of Heritage",
},
{
value: "100k+",
description: "Satisfied Guests Served",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Help Center"
title="Frequently Asked Questions"
description="Answers to common questions about our catering, reservations, and menus."
items={[
{
question: "Do you offer catering for large events?",
answer: "Yes, we specialize in event catering including weddings, corporate parties, and large family gatherings.",
},
{
question: "Can I track my online order?",
answer: "Yes, our app features real-time order tracking for all deliveries.",
},
{
question: "Do you have options for large grill orders?",
answer: "Yes, we offer grill orders by weight (kilograms) perfect for family gatherings.",
},
{
question: "Where are your branches located?",
answer: "We have branches in Tlaa Al Ali (Amman), Marj Al Hammam (Amman), and Al Avenues (Manama).",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Contact Us"
text="Ready to book your table or catering service? Contact us now via WhatsApp or visit us at one of our locations."
primaryButton={{
text: "WhatsApp Us",
href: "https://wa.me/message/yourid",
}}
secondaryButton={{
text: "Reserve Table",
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 { Award, MapPin, 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 Jordanian Culinary Excellence"
description="With branches in Amman and Manama, Zhoor Al Shafa combines century-old recipes with contemporary luxury, serving the finest lamb, grill, and traditional Mansaf to connoisseurs."
items={[
{
icon: Award,
title: "Traditional Mastery",
description: "Generations-old recipes perfected.",
},
{
icon: MapPin,
title: "Prime Locations",
description: "Elegant spaces in Amman & Manama.",
},
{
icon: Users,
title: "Elite Catering",
description: "Services for weddings & corporate events.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/concept-table-setting-christmas-holidays-beautiful-stylish-decorated-table-is-waiting-guests-holiday_132075-14171.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contact" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Contact Us"
text="Ready to book your table or catering service? Contact us now via WhatsApp or visit us at one of our locations."
primaryButton={{
text: "WhatsApp Us",
href: "https://wa.me/message/yourid",
}}
secondaryButton={{
text: "Reserve Table",
href: "#",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,38 @@
// 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 FaqSimple from '@/components/sections/faq/FaqSimple';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Help Center"
title="Frequently Asked Questions"
description="Answers to common questions about our catering, reservations, and menus."
items={[
{
question: "Do you offer catering for large events?",
answer: "Yes, we specialize in event catering including weddings, corporate parties, and large family gatherings.",
},
{
question: "Can I track my online order?",
answer: "Yes, our app features real-time order tracking for all deliveries.",
},
{
question: "Do you have options for large grill orders?",
answer: "Yes, we offer grill orders by weight (kilograms) perfect for family gatherings.",
},
{
question: "Where are your branches located?",
answer: "We have branches in Tlaa Al Ali (Amman), Marj Al Hammam (Amman), and Al Avenues (Manama).",
},
]}
/>
</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 "hero" section.
import React from 'react';
import HeroBrand from '@/components/sections/hero/HeroBrand';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBrand
brand="Zhoor Al Shafa"
description="Authentic Jordanian Cuisine, elevated to an art form. Experience the richness of tradition and the precision of modern fine dining in every bite."
primaryButton={{"text":"Call 06 553 0019","href":"tel:065530019"}}
secondaryButton={{"text":"View Menu","href":"#menu"}}
imageSrc="http://img.b2bpic.net/free-photo/gold-cutlery-set-marble_1220-4756.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,64 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "menu" section.
import React from 'react';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MenuSection(): React.JSX.Element {
return (
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesRevealCardsBento
tag="Signature Dishes"
title="Explore Our Culinary Delights"
description="From our open-fire grills to traditional slow-cooked masterpieces, discover the signature flavours of our house."
items={[
{
title: "Mixed Grill Platter",
description: "1000g of premium quality char-grilled meats.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/closeup-thai-street-food_53876-18298.jpg",
},
{
title: "Stuffed Grape Leaves",
description: "Hand-rolled with our signature aromatic blend.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-cup-tea-with-lemon-white-desk_140725-79721.jpg",
},
{
title: "Lamb Mansaf",
description: "The national pride of Jordan, slow-cooked to perfection.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-rice-dish_23-2147680627.jpg",
},
{
title: "Fresh Fruit Juices",
description: "Pure, pressed citrus perfection, freshly squeezed.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-fresh-natural-orange-with-lemon-juice_23-2148293802.jpg",
},
{
title: "Traditional Kibbeh",
description: "Crispy shells stuffed with spiced meat.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/fried-bread-filled-with-minced-meat-tomato_140725-126.jpg",
},
{
title: "Signature Salads",
description: "Fresh, crisp ingredients with our secret dressings.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/duck-breast_1203-3018.jpg",
},
{
title: "Whole Grilled Chicken",
description: "Turkish style, moist and flavorful skin.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/fried-tasty-meat-fry-pan-with-onion-wooden-table_23-2148206953.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,34 @@
// 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 MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsSimpleCards
tag="Our Growth"
title="Experience the Numbers"
description="Our journey as a leading restaurant brand in Amman and Manama."
metrics={[
{
value: "3",
description: "International Branches",
},
{
value: "20+",
description: "Years of Heritage",
},
{
value: "100k+",
description: "Satisfied Guests Served",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View 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="Catering Packages"
title="Exceptional Events Catering"
description="Host your celebrations with our legendary traditional dishes. Customized catering solutions for every occasion."
plans={[
{
tag: "Basic",
price: "8 JOD",
description: "For intimate family dinners.",
features: [
"Traditional Sides",
"Fresh Salad",
"Warm Bread",
],
primaryButton: {
text: "Inquire",
href: "#contact",
},
},
{
tag: "Event",
price: "12 JOD",
description: "Ideal for larger gatherings.",
features: [
"Mansaf Meal",
"Appetizers",
"Soft Drinks",
"Fast Service",
],
highlight: "Most Popular",
primaryButton: {
text: "Reserve",
href: "#contact",
},
},
{
tag: "VIP",
price: "22 JOD",
description: "Premium catering experience.",
features: [
"Full Mansaf Tray",
"Selection of Grills",
"VIP Service",
"Custom Menu",
],
primaryButton: {
text: "Contact Us",
href: "#contact",
},
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View 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="Our Guests"
title="Memories at Our Table"
description="Stories from our valued guests who have made us part of their special moments."
testimonials={[
{
name: "Ahmed Al-Farsi",
role: "Food Critic",
quote: "The Mansaf is simply the best in the region. Authentic taste in a luxury setting.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-happy-cute-africanamerican-girl-smiling-pleased-showing-thumbsup-approval-lik_1258-149049.jpg",
},
{
name: "Sarah Mansour",
role: "Local Resident",
quote: "Zhoor Al Shafa has become our go-to for all family gatherings. The service is impeccable.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-couple-having-lunch-luxury-restaurant_23-2150598413.jpg",
},
{
name: "Khalid Mahmoud",
role: "Regular Guest",
quote: "I have visited many places, but the quality of the grills here is unmatched.",
imageSrc: "http://img.b2bpic.net/free-photo/handsome-groom-feeding-his-bride-with-croissant-cafe_176420-2272.jpg",
},
{
name: "Layla Omar",
role: "Event Planner",
quote: "Collaborating with them for our weddings is always seamless. Highly professional catering.",
imageSrc: "http://img.b2bpic.net/free-photo/people-cheering-with-wine-glasses-luxurious-restaurant_23-2150517447.jpg",
},
{
name: "Omar Al-Hussein",
role: "Frequent Diner",
quote: "A truly premium fine-dining experience that respects traditional Jordanian roots.",
imageSrc: "http://img.b2bpic.net/free-photo/group-young-people-gathering-dinner_23-2148454163.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}