1 Commits

Author SHA1 Message Date
kudinDmitriyUp
4e93c32449 Bob AI: Added WhatsApp button and Google Maps iframe to contact sect 2026-06-13 21:00:48 +00:00
8 changed files with 396 additions and 258 deletions

View File

@@ -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 />
</>
);
}

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 { 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>
);
}

View 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>
);
}

View 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>
);
}

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 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>
);
}

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="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>
);
}

View 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>
);
}

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 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>
);
}