Merge version_2_1781384362228 into main
Merge version_2_1781384362228 into main
This commit was merged in pull request #1.
This commit is contained in:
@@ -1,269 +1,33 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroBillboardTiltedCarousel from '@/components/sections/hero/HeroBillboardTiltedCarousel';
|
||||
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
|
||||
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
import { CheckCircle, Flame, Truck } 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 TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardTiltedCarousel
|
||||
tag="Délicieux & Croustillant"
|
||||
title="Monastir Fried Chicken"
|
||||
description="Le meilleur poulet frit de la ville, préparé avec des ingrédients frais et une recette unique. Venez goûter la différence."
|
||||
primaryButton={{
|
||||
text: "Commander en ligne",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Voir le menu",
|
||||
href: "#menu",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/crispy-wholegrain-rice-cakes-crackers-black-plate_114579-88011.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/delicious-corn-dog-meal_52683-86633.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-hand-taking-fries_23-2149455103.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/delicious-boneless-chicken-high-angle_23-2149972965.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-chicken-with-copy-space_23-2148454892.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tasty-dinner-with-crispy-fried-chicken-potatoes_140725-114443.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="Notre Histoire"
|
||||
title="Qualité et Passion"
|
||||
description="Situé au cœur de Monastir, notre restaurant s'engage à offrir une expérience de restauration rapide authentique et accueillante pour tous nos clients."
|
||||
items={[
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "Ingrédients Frais",
|
||||
description: "Sélection rigoureuse de volailles de qualité.",
|
||||
},
|
||||
{
|
||||
icon: Flame,
|
||||
title: "Recette Unique",
|
||||
description: "Une marinade secrète pour un croquant parfait.",
|
||||
},
|
||||
{
|
||||
icon: Truck,
|
||||
title: "Service Rapide",
|
||||
description: "Livraison rapide pour profiter chez soi.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/blurred-hotel-desk_1203-168.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Notre Menu"
|
||||
title="Découvrez nos délices"
|
||||
description="Une sélection variée de plats croustillants pour toutes les faims."
|
||||
items={[
|
||||
{
|
||||
title: "Poulet Burger",
|
||||
description: "Poulet tendre, salade croquante, sauce maison.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-burger-meal_23-2152022799.jpg",
|
||||
},
|
||||
{
|
||||
title: "Frites Maison",
|
||||
description: "Pommes de terre dorées, assaisonnement spécial.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/caesar-salad_1203-8975.jpg",
|
||||
},
|
||||
{
|
||||
title: "Ailes de Poulet",
|
||||
description: "5 ou 10 pièces croustillantes et épicées.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/shrimps-batter-with-sauce-crisps-beer-plate_176474-2990.jpg",
|
||||
},
|
||||
{
|
||||
title: "Nuggets",
|
||||
description: "Bouchées de poulet croustillantes pour tous.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/homemade-crispy-chicken-popcorn-white-background_23-2148029590.jpg",
|
||||
},
|
||||
{
|
||||
title: "Tenders",
|
||||
description: "Filets de poulet premium panés à la main.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-delicious-cakes-with-crackers-cookies-white-background_140725-76503.jpg",
|
||||
},
|
||||
{
|
||||
title: "Menu Combo",
|
||||
description: "Le mélange parfait de nos spécialités.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/four-boxes-nuggets-with-chicken-prawn-cheese-fish-with-four-sauce_141793-2305.jpg",
|
||||
},
|
||||
{
|
||||
title: "Boissons Fraîches",
|
||||
description: "Large choix de sodas et eaux minérales.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-fast-food-snacks-table_23-2148262940.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MenuSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Avis Clients"
|
||||
title="Ce qu'ils pensent de nous"
|
||||
description="La satisfaction de nos clients est notre priorité."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Taha-Amine Brahem",
|
||||
role: "Client Fidèle",
|
||||
quote: "The food is perfect and the service is very welcoming. I believe this restaurant will succeed.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/couple-restaurant_23-2148006698.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah Mansour",
|
||||
role: "Habituée",
|
||||
quote: "Toujours croustillant et chaud ! Un service au top à Monastir.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-waitress-standing-counter_1170-668.jpg",
|
||||
},
|
||||
{
|
||||
name: "Karim Haddad",
|
||||
role: "Gourmand",
|
||||
quote: "Le meilleur burger au poulet que j'ai pu goûter récemment.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-smiley-man-with-food_23-2148899055.jpg",
|
||||
},
|
||||
{
|
||||
name: "Leila Ben Aissa",
|
||||
role: "Étudiante",
|
||||
quote: "Rapide, propre et vraiment délicieux. Je recommande.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-smiley-man-with-chain-necklace_23-2149409803.jpg",
|
||||
},
|
||||
{
|
||||
name: "Yassine S.",
|
||||
role: "Client Local",
|
||||
quote: "Un super spot pour manger rapidement. Équipe très gentille.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stylish-teen-holding-drink_1157-1115.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Questions Fréquentes"
|
||||
title="Besoin d'aide ?"
|
||||
description="Voici les réponses aux questions les plus posées."
|
||||
categories={[
|
||||
{
|
||||
name: "Général",
|
||||
items: [
|
||||
{
|
||||
question: "Quels sont vos horaires ?",
|
||||
answer: "Nous sommes ouverts tous les jours jusqu'à minuit.",
|
||||
},
|
||||
{
|
||||
question: "Proposez-vous la livraison ?",
|
||||
answer: "Oui, nous livrons sur tout Monastir.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Commande",
|
||||
items: [
|
||||
{
|
||||
question: "Comment commander ?",
|
||||
answer: "Vous pouvez appeler au 52 442 078 ou passer au restaurant.",
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsFeatureCards
|
||||
tag="Nos Chiffres"
|
||||
title="Notre impact"
|
||||
description="Chaque jour au service de nos clients."
|
||||
metrics={[
|
||||
{
|
||||
value: "100%",
|
||||
title: "Satisfaction Client",
|
||||
features: [
|
||||
"Ingrédients frais",
|
||||
"Recettes authentiques",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "00:00",
|
||||
title: "Heure de Fermeture",
|
||||
features: [
|
||||
"Service tardif",
|
||||
"Disponibilité",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "5.0",
|
||||
title: "Note Moyenne",
|
||||
features: [
|
||||
"Qualité assurée",
|
||||
"Accueil chaleureux",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Contactez-nous"
|
||||
text="Prêt à déguster votre poulet frit préféré ? Appelez-nous ou passez nous voir à Monastir."
|
||||
primaryButton={{
|
||||
text: "Appeler : 52 442 078",
|
||||
href: "tel:+21652442078",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Itinéraire",
|
||||
href: "https://maps.google.com",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
39
src/pages/HomePage/sections/About.tsx
Normal file
39
src/pages/HomePage/sections/About.tsx
Normal 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 { CheckCircle, Flame, Truck } 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="Notre Histoire"
|
||||
title="Qualité et Passion"
|
||||
description="Situé au cœur de Monastir, notre restaurant s'engage à offrir une expérience de restauration rapide authentique et accueillante pour tous nos clients."
|
||||
items={[
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "Ingrédients Frais",
|
||||
description: "Sélection rigoureuse de volailles de qualité.",
|
||||
},
|
||||
{
|
||||
icon: Flame,
|
||||
title: "Recette Unique",
|
||||
description: "Une marinade secrète pour un croquant parfait.",
|
||||
},
|
||||
{
|
||||
icon: Truck,
|
||||
title: "Service Rapide",
|
||||
description: "Livraison rapide pour profiter chez soi.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/blurred-hotel-desk_1203-168.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
76
src/pages/HomePage/sections/Contact.tsx
Normal file
76
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,76 @@
|
||||
/* 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";
|
||||
|
||||
const primaryButton = {
|
||||
text: "Appeler : 52 442 078",
|
||||
href: "tel:+21652442078"
|
||||
};
|
||||
const secondaryButton = {
|
||||
text: "Itinéraire",
|
||||
href: "https://maps.google.com"
|
||||
};
|
||||
|
||||
const ContactInline = () => {
|
||||
return (
|
||||
<section aria-label="Contact section" className="py-20">
|
||||
<div className="w-content-width mx-auto">
|
||||
<ScrollReveal variant="fade">
|
||||
<div className="flex flex-col items-center gap-8 md:gap-10 py-20 px-8 rounded card">
|
||||
<div className="flex flex-col items-center gap-2">
|
||||
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
|
||||
<p>{"Contactez-nous"}</p>
|
||||
</div>
|
||||
|
||||
<TextAnimation
|
||||
text={"Prêt à déguster votre poulet frit préféré ? Appelez-nous ou passez nous voir à Monastir."}
|
||||
variant="fade"
|
||||
gradientText={true}
|
||||
tag="h2"
|
||||
className="md:max-w-8/10 text-5xl 2xl:text-6xl leading-[1.15] font-semibold text-center text-balance"
|
||||
/>
|
||||
|
||||
<div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3">
|
||||
<Button text={primaryButton.text} href={primaryButton.href} variant="primary" />
|
||||
<a
|
||||
href="https://wa.me/21652442078"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="inline-flex items-center justify-center gap-2 px-6 py-3 text-sm font-medium transition-colors rounded-full bg-[#25D366] text-white hover:bg-[#20bd5a]"
|
||||
>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/>
|
||||
</svg>
|
||||
WhatsApp
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="w-full mt-8 h-[350px] rounded-xl overflow-hidden border border-border shadow-sm">
|
||||
<iframe
|
||||
title="Google Maps - Monastir Fried Chicken"
|
||||
src="https://maps.google.com/maps?q=Monastir%20Fried%20Chicken,%20Monastir&t=&z=15&ie=UTF8&iwloc=&output=embed"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style={{ border: 0 }}
|
||||
allowFullScreen={true}
|
||||
loading="lazy"
|
||||
referrerPolicy="no-referrer-when-downgrade"
|
||||
></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default function ContactSection() {
|
||||
return (
|
||||
<div data-webild-section="contact" id="contact">
|
||||
<ContactInline />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
44
src/pages/HomePage/sections/Faq.tsx
Normal file
44
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,44 @@
|
||||
// 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="Questions Fréquentes"
|
||||
title="Besoin d'aide ?"
|
||||
description="Voici les réponses aux questions les plus posées."
|
||||
categories={[
|
||||
{
|
||||
name: "Général",
|
||||
items: [
|
||||
{
|
||||
question: "Quels sont vos horaires ?",
|
||||
answer: "Nous sommes ouverts tous les jours jusqu'à minuit.",
|
||||
},
|
||||
{
|
||||
question: "Proposez-vous la livraison ?",
|
||||
answer: "Oui, nous livrons sur tout Monastir.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Commande",
|
||||
items: [
|
||||
{
|
||||
question: "Comment commander ?",
|
||||
answer: "Vous pouvez appeler au 52 442 078 ou passer au restaurant.",
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
48
src/pages/HomePage/sections/Hero.tsx
Normal file
48
src/pages/HomePage/sections/Hero.tsx
Normal 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 HeroBillboardTiltedCarousel from '@/components/sections/hero/HeroBillboardTiltedCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardTiltedCarousel
|
||||
tag="Délicieux & Croustillant"
|
||||
title="Monastir Fried Chicken"
|
||||
description="Le meilleur poulet frit de la ville, préparé avec des ingrédients frais et une recette unique. Venez goûter la différence."
|
||||
primaryButton={{
|
||||
text: "Commander en ligne",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Voir le menu",
|
||||
href: "#menu",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/crispy-wholegrain-rice-cakes-crackers-black-plate_114579-88011.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/delicious-corn-dog-meal_52683-86633.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-hand-taking-fries_23-2149455103.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/delicious-boneless-chicken-high-angle_23-2149972965.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-chicken-with-copy-space_23-2148454892.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tasty-dinner-with-crispy-fried-chicken-potatoes_140725-114443.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
64
src/pages/HomePage/sections/Menu.tsx
Normal file
64
src/pages/HomePage/sections/Menu.tsx
Normal 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="Notre Menu"
|
||||
title="Découvrez nos délices"
|
||||
description="Une sélection variée de plats croustillants pour toutes les faims."
|
||||
items={[
|
||||
{
|
||||
title: "Poulet Burger",
|
||||
description: "Poulet tendre, salade croquante, sauce maison.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-burger-meal_23-2152022799.jpg",
|
||||
},
|
||||
{
|
||||
title: "Frites Maison",
|
||||
description: "Pommes de terre dorées, assaisonnement spécial.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/caesar-salad_1203-8975.jpg",
|
||||
},
|
||||
{
|
||||
title: "Ailes de Poulet",
|
||||
description: "5 ou 10 pièces croustillantes et épicées.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/shrimps-batter-with-sauce-crisps-beer-plate_176474-2990.jpg",
|
||||
},
|
||||
{
|
||||
title: "Nuggets",
|
||||
description: "Bouchées de poulet croustillantes pour tous.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/homemade-crispy-chicken-popcorn-white-background_23-2148029590.jpg",
|
||||
},
|
||||
{
|
||||
title: "Tenders",
|
||||
description: "Filets de poulet premium panés à la main.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-delicious-cakes-with-crackers-cookies-white-background_140725-76503.jpg",
|
||||
},
|
||||
{
|
||||
title: "Menu Combo",
|
||||
description: "Le mélange parfait de nos spécialités.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/four-boxes-nuggets-with-chicken-prawn-cheese-fish-with-four-sauce_141793-2305.jpg",
|
||||
},
|
||||
{
|
||||
title: "Boissons Fraîches",
|
||||
description: "Large choix de sodas et eaux minérales.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-fast-food-snacks-table_23-2148262940.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
46
src/pages/HomePage/sections/Metrics.tsx
Normal file
46
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,46 @@
|
||||
// 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="Nos Chiffres"
|
||||
title="Notre impact"
|
||||
description="Chaque jour au service de nos clients."
|
||||
metrics={[
|
||||
{
|
||||
value: "100%",
|
||||
title: "Satisfaction Client",
|
||||
features: [
|
||||
"Ingrédients frais",
|
||||
"Recettes authentiques",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "00:00",
|
||||
title: "Heure de Fermeture",
|
||||
features: [
|
||||
"Service tardif",
|
||||
"Disponibilité",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "5.0",
|
||||
title: "Note Moyenne",
|
||||
features: [
|
||||
"Qualité assurée",
|
||||
"Accueil chaleureux",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Testimonials.tsx
Normal file
57
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "testimonials" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Avis Clients"
|
||||
title="Ce qu'ils pensent de nous"
|
||||
description="La satisfaction de nos clients est notre priorité."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Taha-Amine Brahem",
|
||||
role: "Client Fidèle",
|
||||
quote: "The food is perfect and the service is very welcoming. I believe this restaurant will succeed.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/couple-restaurant_23-2148006698.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah Mansour",
|
||||
role: "Habituée",
|
||||
quote: "Toujours croustillant et chaud ! Un service au top à Monastir.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-waitress-standing-counter_1170-668.jpg",
|
||||
},
|
||||
{
|
||||
name: "Karim Haddad",
|
||||
role: "Gourmand",
|
||||
quote: "Le meilleur burger au poulet que j'ai pu goûter récemment.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-smiley-man-with-food_23-2148899055.jpg",
|
||||
},
|
||||
{
|
||||
name: "Leila Ben Aissa",
|
||||
role: "Étudiante",
|
||||
quote: "Rapide, propre et vraiment délicieux. Je recommande.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-smiley-man-with-chain-necklace_23-2149409803.jpg",
|
||||
},
|
||||
{
|
||||
name: "Yassine S.",
|
||||
role: "Client Local",
|
||||
quote: "Un super spot pour manger rapidement. Équipe très gentille.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stylish-teen-holding-drink_1157-1115.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user