Merge version_2_1781398604413 into main #1

Merged
bender merged 1 commits from version_2_1781398604413 into main 2026-06-14 00:57:58 +00:00
10 changed files with 359 additions and 257 deletions

View File

@@ -38,8 +38,9 @@ export default function Layout() {
];
return (
<StyleProvider buttonVariant="expand" siteBackground="noise" heroBackground="lightRaysCenter">
<StyleProvider buttonVariant="expand" siteBackground="none" heroBackground="lightRaysCenter">
<SiteBackgroundSlot />
<div className="fixed inset-0 z-[-1] opacity-10 pointer-events-none" style={{ backgroundImage: "url('https://images.unsplash.com/photo-1541447271487-09612b3f49f7?q=80&w=2000&auto=format&fit=crop')", backgroundSize: "400px", backgroundRepeat: "repeat" }} />
<SectionErrorBoundary name="navbar">
<NavbarInline
logo="BASIDI"

View File

@@ -1,268 +1,36 @@
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
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 DishesSection from './HomePage/sections/Dishes';
import MetricsSection from './HomePage/sections/Metrics';
import TestimonialsSection from './HomePage/sections/Testimonials';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Basidi Rabat"
title="L'Authenticité Marocaine au Cœur de Rabat"
description="Découvrez le goût raffiné d'une cuisine familiale, préparée avec passion et tradition."
primaryButton={{
text: "Réserver une table",
href: "#contact",
}}
secondaryButton={{
text: "Découvrir le Menu",
href: "#menu",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/catering-tablecloth-plate-drink-background_1203-5091.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/plate-with-fresh-food-near-cup-dried-fruits-burlap_23-2148080959.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/ramadan-concept_23-2147791756.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/oriental-pattern_23-2148129850.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/plate-with-food-near-cup-drink-teapot_23-2148080944.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/photorealistic-wedding-venue-with-intricate-decor-ornaments_23-2151481493.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTextSplit
title="Un Héritage Familial"
descriptions={[
"Chez Basidi, nous croyons en la force de la tradition. Situé en plein cœur de Rabat, sur l'Av. Annakhil, notre restaurant familial s'engage à offrir une expérience culinaire authentique.",
"Chaque plat que nous servons raconte l'histoire de notre terroir, de nos épices et du savoir-faire transmis de génération en génération.",
]}
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesMediaCarousel
tag="Notre Menu"
title="Les Trésors de la Gastronomie"
description="Un voyage culinaire à travers les meilleures recettes du Maroc."
items={[
{
title: "Tajine Royal",
description: "L'excellence de nos tajines traditionnels mijotés lentement.",
buttonIcon: "Utensils",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-delicious-food-table-still-life_23-2150751959.jpg",
},
{
title: "Bastilla aux saveurs",
description: "Un mariage sucré-salé unique et délicieux.",
buttonIcon: "Utensils",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-sweet-table-with-baklava-shekerbura-glass-tea-cutting-board_176474-3470.jpg",
},
{
title: "Salades Marocaines",
description: "La fraîcheur des légumes de saison sublimés.",
buttonIcon: "Utensils",
imageSrc: "http://img.b2bpic.net/free-photo/cracker-cake-inside-brown-plate_140725-29925.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MenuSection />
<div id="dishes" data-section="dishes">
<SectionErrorBoundary name="dishes">
<FeaturesImageBento
tag="Nos Plats"
title="Une Carte Riche en Saveurs"
description="Chaque détail compte pour vous offrir une expérience inoubliable."
items={[
{
title: "Tajine au Citron",
description: "Un classique incontournable.",
imageSrc: "http://img.b2bpic.net/free-photo/closeup-shot-plate-food_181624-60393.jpg",
},
{
title: "Couscous Royal",
description: "Le pilier de la table marocaine.",
imageSrc: "http://img.b2bpic.net/free-photo/traditional-dish-pity-mutton-peas-potato-onion-sumakh-side-view_141793-3249.jpg",
},
{
title: "Salades Fraîches",
description: "Le goût du soleil en bouche.",
imageSrc: "http://img.b2bpic.net/free-photo/side-view-fresh-salad-with-cabbage-tomatoes-white-cheese-pomegranate-seeds-plate_140725-10248.jpg",
},
{
title: "Bastilla Sucrée",
description: "Un délice croustillant.",
imageSrc: "http://img.b2bpic.net/free-photo/crepes-filled-with-cottage-cheese-breakfast_114579-35100.jpg",
},
{
title: "Brochettes grillées",
description: "Le goût authentique des braises.",
imageSrc: "http://img.b2bpic.net/free-photo/sac-ichi-with-mixed-ingredients-lavash-bread_114579-1156.jpg",
},
{
title: "Thé à la menthe",
description: "L'hospitalité marocaine.",
imageSrc: "http://img.b2bpic.net/free-photo/half-shot-organic-fresh-juices-bottles-served-with-tubes-fruits-brown-wooden-background_140725-94576.jpg",
},
{
title: "Pain Traditionnel",
description: "La base de chaque repas.",
imageSrc: "http://img.b2bpic.net/free-photo/greenies-qutab-greens-herbs-dough-cook-brown-wood-rustic-desk_140725-14966.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<DishesSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsSimpleCards
title="Basidi en Quelques Chiffres"
description="L'excellence récompensée par vos avis."
metrics={[
{
value: "4.3/5",
description: "Note moyenne Google Maps",
},
{
value: "298",
description: "Avis authentiques",
},
{
value: "100+",
description: "Recettes transmises",
},
]}
tag="Engagement"
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialMarqueeOverlayCards
title="Ils ont adoré"
description="Nos clients partagent leur expérience culinaire avec nous."
testimonials={[
{
name: "Sarah",
role: "Habituée",
company: "Rabat",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-eating-delicious-tiramisu-cafe_1303-25270.jpg",
},
{
name: "Karim",
role: "Gourmet",
company: "Casablanca",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/group-friends-dining-out_23-2149187205.jpg",
},
{
name: "Famille L.",
role: "Visiteurs",
company: "France",
rating: 4,
imageSrc: "http://img.b2bpic.net/free-photo/top-view-friends-having-lunch-luxury-restaurant_23-2151081479.jpg",
},
{
name: "Amine",
role: "Critique",
company: "Rabat",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/having-breakfast-home_1098-13946.jpg",
},
{
name: "Sofia",
role: "Touriste",
company: "Espagne",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/front-view-happy-man-showing-approval_23-2148230800.jpg",
},
]}
tag="Témoignages"
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Informations utiles"
title="Questions Fréquentes"
categories={[
{
name: "Réservations",
items: [
{
question: "Comment réserver ?",
answer: "Vous pouvez nous appeler au 05 37 71 27 22.",
},
{
question: "Acceptez-vous les grands groupes ?",
answer: "Oui, sur réservation préalable.",
},
],
},
{
name: "Service",
items: [
{
question: "La livraison est-elle possible ?",
answer: "Oui, nous proposons la livraison à Rabat.",
},
{
question: "Où êtes-vous situés ?",
answer: "Av. Annakhil, Hay Riad, Rabat.",
},
],
},
]}
description="Tout ce qu'il faut savoir sur notre restaurant."
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Réservez maintenant"
text="Basidi Restaurant est prêt à vous accueillir pour une expérience inoubliable. Contactez-nous pour réserver votre table."
primaryButton={{
text: "Appeler le 05 37 71 27 22",
href: "tel:0537712722",
}}
secondaryButton={{
text: "Voir l'itinéraire",
href: "https://maps.google.com",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

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 "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="Un Héritage Familial"
descriptions={[
"Chez Basidi, nous croyons en la force de la tradition. Situé en plein cœur de Rabat, sur l'Av. Annakhil, notre restaurant familial s'engage à offrir une expérience culinaire authentique.",
"Chaque plat que nous servons raconte l'histoire de notre terroir, de nos épices et du savoir-faire transmis de génération en génération.",
]}
/>
</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="Réservez maintenant"
text="Basidi Restaurant est prêt à vous accueillir pour une expérience inoubliable. Contactez-nous pour réserver votre table."
primaryButton={{
text: "Appeler le 05 37 71 27 22",
href: "tel:0537712722",
}}
secondaryButton={{
text: "Voir l'itinéraire",
href: "https://maps.google.com",
}}
/>
</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 "dishes" section.
import React from 'react';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function DishesSection(): React.JSX.Element {
return (
<div id="dishes" data-section="dishes">
<SectionErrorBoundary name="dishes">
<FeaturesImageBento
tag="Nos Plats"
title="Une Carte Riche en Saveurs"
description="Chaque détail compte pour vous offrir une expérience inoubliable."
items={[
{
title: "Tajine au Citron",
description: "Un classique incontournable.",
imageSrc: "http://img.b2bpic.net/free-photo/closeup-shot-plate-food_181624-60393.jpg",
},
{
title: "Couscous Royal",
description: "Le pilier de la table marocaine.",
imageSrc: "http://img.b2bpic.net/free-photo/traditional-dish-pity-mutton-peas-potato-onion-sumakh-side-view_141793-3249.jpg",
},
{
title: "Salades Fraîches",
description: "Le goût du soleil en bouche.",
imageSrc: "http://img.b2bpic.net/free-photo/side-view-fresh-salad-with-cabbage-tomatoes-white-cheese-pomegranate-seeds-plate_140725-10248.jpg",
},
{
title: "Bastilla Sucrée",
description: "Un délice croustillant.",
imageSrc: "http://img.b2bpic.net/free-photo/crepes-filled-with-cottage-cheese-breakfast_114579-35100.jpg",
},
{
title: "Brochettes grillées",
description: "Le goût authentique des braises.",
imageSrc: "http://img.b2bpic.net/free-photo/sac-ichi-with-mixed-ingredients-lavash-bread_114579-1156.jpg",
},
{
title: "Thé à la menthe",
description: "L'hospitalité marocaine.",
imageSrc: "http://img.b2bpic.net/free-photo/half-shot-organic-fresh-juices-bottles-served-with-tubes-fruits-brown-wooden-background_140725-94576.jpg",
},
{
title: "Pain Traditionnel",
description: "La base de chaque repas.",
imageSrc: "http://img.b2bpic.net/free-photo/greenies-qutab-greens-herbs-dough-cook-brown-wood-rustic-desk_140725-14966.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,48 @@
// 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="Informations utiles"
title="Questions Fréquentes"
categories={[
{
name: "Réservations",
items: [
{
question: "Comment réserver ?",
answer: "Vous pouvez nous appeler au 05 37 71 27 22.",
},
{
question: "Acceptez-vous les grands groupes ?",
answer: "Oui, sur réservation préalable.",
},
],
},
{
name: "Service",
items: [
{
question: "La livraison est-elle possible ?",
answer: "Oui, nous proposons la livraison à Rabat.",
},
{
question: "Où êtes-vous situés ?",
answer: "Av. Annakhil, Hay Riad, Rabat.",
},
],
},
]}
description="Tout ce qu'il faut savoir sur notre restaurant."
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,48 @@
// 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 HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Basidi Rabat"
title="L'Authenticité Marocaine au Cœur de Rabat"
description="Découvrez le goût raffiné d'une cuisine familiale, préparée avec passion et tradition."
primaryButton={{
text: "Réserver une table",
href: "#contact",
}}
secondaryButton={{
text: "Découvrir le Menu",
href: "#menu",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/catering-tablecloth-plate-drink-background_1203-5091.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/plate-with-fresh-food-near-cup-dried-fruits-burlap_23-2148080959.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/ramadan-concept_23-2147791756.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/oriental-pattern_23-2148129850.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/plate-with-food-near-cup-drink-teapot_23-2148080944.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/photorealistic-wedding-venue-with-intricate-decor-ornaments_23-2151481493.jpg",
},
]}
/>
</SectionErrorBoundary>
</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 "menu" section.
import React from 'react';
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MenuSection(): React.JSX.Element {
return (
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesMediaCarousel
tag="Notre Menu"
title="Les Trésors de la Gastronomie"
description="Un voyage culinaire à travers les meilleures recettes du Maroc."
items={[
{
title: "Tajine Royal",
description: "L'excellence de nos tajines traditionnels mijotés lentement.",
buttonIcon: "Utensils",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-delicious-food-table-still-life_23-2150751959.jpg",
},
{
title: "Bastilla aux saveurs",
description: "Un mariage sucré-salé unique et délicieux.",
buttonIcon: "Utensils",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-sweet-table-with-baklava-shekerbura-glass-tea-cutting-board_176474-3470.jpg",
},
{
title: "Salades Marocaines",
description: "La fraîcheur des légumes de saison sublimés.",
buttonIcon: "Utensils",
imageSrc: "http://img.b2bpic.net/free-photo/cracker-cake-inside-brown-plate_140725-29925.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
title="Basidi en Quelques Chiffres"
description="L'excellence récompensée par vos avis."
metrics={[
{
value: "4.3/5",
description: "Note moyenne Google Maps",
},
{
value: "298",
description: "Avis authentiques",
},
{
value: "100+",
description: "Recettes transmises",
},
]}
tag="Engagement"
/>
</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 "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
title="Ils ont adoré"
description="Nos clients partagent leur expérience culinaire avec nous."
testimonials={[
{
name: "Sarah",
role: "Habituée",
company: "Rabat",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-eating-delicious-tiramisu-cafe_1303-25270.jpg",
},
{
name: "Karim",
role: "Gourmet",
company: "Casablanca",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/group-friends-dining-out_23-2149187205.jpg",
},
{
name: "Famille L.",
role: "Visiteurs",
company: "France",
rating: 4,
imageSrc: "http://img.b2bpic.net/free-photo/top-view-friends-having-lunch-luxury-restaurant_23-2151081479.jpg",
},
{
name: "Amine",
role: "Critique",
company: "Rabat",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/having-breakfast-home_1098-13946.jpg",
},
{
name: "Sofia",
role: "Touriste",
company: "Espagne",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/front-view-happy-man-showing-approval_23-2148230800.jpg",
},
]}
tag="Témoignages"
/>
</SectionErrorBoundary>
</div>
);
}