Merge version_2_1782160280494 into main #1

Merged
bender merged 1 commits from version_2_1782160280494 into main 2026-06-22 20:33:07 +00:00
10 changed files with 385 additions and 219 deletions

View File

@@ -1,231 +1,38 @@
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
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 MetricsSection from './HomePage/sections/Metrics';
import TestimonialsSection from './HomePage/sections/Testimonials';
import SocialSection from './HomePage/sections/Social';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
import CertificationsSection from './HomePage/sections/Certifications';export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Gelato Artisanal"
title="Le Goût de l'Italie à Dakar"
description="Découvrez l'expérience authentique du vrai gelato italien, préparé chaque jour avec des ingrédients frais et naturels."
primaryButton={{
text: "Découvrir le Menu",
href: "#menu",
}}
secondaryButton={{
text: "Nous Contacter",
href: "#contact",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/woman-cooking-pizza-kitchen_158595-2120.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/ice-lollies-with-blueberries-cherries_23-2148216294.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/top-view-delicious-food-concept_23-2148578404.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/colored-cloths-arrangement-with-natural-pigments_23-2148734437.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/pistachio-ice-cream-with-pistachios_23-2151988819.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/vertical-shot-glass-delicious-ice-cream-with-chocolate-syrup-whipped-cream_181624-57869.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<CertificationsSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="Notre Histoire"
title="La Passion du Gelato"
description="Chez Taq Taq, nous sélectionnons les meilleurs ingrédients pour vous offrir une texture onctueuse et des saveurs inoubliables. Chaque recette est un hommage à la tradition italienne, adaptée aux produits locaux du Sénégal."
imageSrc="http://img.b2bpic.net/free-photo/crop-hand-with-spoon-sugar_23-2147758390.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesImageBento
tag="Menu Signature"
title="Nos Parfums Favoris"
description="Une sélection de glaces artisanales fabriquées avec amour."
items={[
{
title: "Pistache",
description: "Pistaches de Sicile torréfiées.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-green-ice-cream-plate_52683-92471.jpg",
},
{
title: "Chocolat Noir",
description: "Cacao intense 70%.",
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-bowl-with-chocolate-flavored-ice-cream_23-2148422052.jpg",
},
{
title: "Fraise Fraîche",
description: "Fraises locales de saison.",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-ice-creams-glass_23-2148507965.jpg",
},
{
title: "Vanille Bourbon",
description: "Gousses de vanille de Madagascar.",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-ice-cream-with-nuts_23-2148507941.jpg",
},
{
title: "Caramel au Beurre Salé",
description: "Une pointe de sel marin.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-little-creamy-cake-with-chocolate-cookies-dark-surface-biscuit-cake-sweet-pie-sugar-cookie_140725-118183.jpg",
},
{
title: "Noisette",
description: "Noisettes croquantes.",
imageSrc: "http://img.b2bpic.net/free-photo/chocolate-ice-cream-texture_23-2149450689.jpg",
},
{
title: "Citron Sorbet",
description: "Rafraîchissant et acidulé.",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-granita-dessert-with-various-ingredients_23-2149400149.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MenuSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsMediaCards
tag="La Qualité avant tout"
title="Nos Engagements"
description="La promesse d'une qualité exceptionnelle à chaque bouchée."
metrics={[
{
value: "100%",
title: "Ingrédients naturels",
description: "Sans colorants ni conservateurs artificiels.",
imageSrc: "http://img.b2bpic.net/free-photo/ripe-fruits-veggies-homegrown-sold-farmers-market-stand_482257-77543.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialQuoteCards
tag="Nos clients"
title="Ce qu'ils pensent de nous"
description="Les retours de nos fidèles amateurs de glaces à Dakar."
testimonials={[
{
name: "Fatou Ndiaye",
role: "Passionnée",
quote: "La meilleure glace de Dakar, sans aucune hésitation !",
imageSrc: "http://img.b2bpic.net/free-photo/laugh-is-way-happiness_329181-2893.jpg",
},
{
name: "Marc L.",
role: "Habitué",
quote: "Une texture incroyablement onctueuse, authentique et savoureuse.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-people-with-paper-wrapped-sandwiches_23-2151309966.jpg",
},
{
name: "Aminata S.",
role: "Client fidéle",
quote: "L'endroit idéal pour une pause sucrée après une longue journée.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-with-two-raised-fingers_1187-1103.jpg",
},
{
name: "Jean B.",
role: "Gourmand",
quote: "Le parfum pistache est une pure merveille. Je reviens chaque semaine.",
imageSrc: "http://img.b2bpic.net/free-photo/positive-woman-denim-jacket-undershirt-looks-sun-bright-backdrop-brunette-girl-light-pants-sunglasses-poses-yellow-background_197531-28011.jpg",
},
{
name: "Sophie D.",
role: "Gourmande",
quote: "L'accueil est chaleureux et la glace est divine. Bravo Taq Taq !",
imageSrc: "http://img.b2bpic.net/free-photo/outdoor-street-portrait-happy-woman-eating-ice-cream_197531-22772.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="social" data-section="social">
<SectionErrorBoundary name="social">
<SocialProofMarquee
tag="Nos partenaires"
title="Ils nous font confiance"
description="Nous collaborons avec les meilleurs services de Dakar."
names={[
"Glovo",
"Dakar E-commerce",
"Local Farms Coop",
"Artisan Alliance",
"Qualité Dakar",
"Le Meilleur de Dakar",
"EcoFriendly Label",
]}
/>
</SectionErrorBoundary>
</div>
<SocialSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTwoColumn
tag="FAQ"
title="Des questions ?"
description="Retrouvez les réponses aux questions les plus fréquentes."
items={[
{
question: "Quels sont vos horaires ?",
answer: "Nous sommes ouverts tous les jours de 10h à minuit.",
},
{
question: "Proposez-vous la livraison ?",
answer: "Oui, nous livrons via nos partenaires habituels sur toute la zone de Dakar.",
},
{
question: "Les glaces sont-elles artisanales ?",
answer: "Absolument, chaque bac est préparé manuellement chaque matin.",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Nous trouver"
text="Venez goûter à la magie de Taq Taq MammaMia Gelato dès aujourd'hui !"
primaryButton={{
text: "Itinéraire (Google Maps)",
href: "https://maps.google.com",
}}
secondaryButton={{
text: "Appeler : 33 873 66 66",
href: "tel:338736666",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,21 @@
// 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 AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="Notre Histoire"
title="La Passion du Gelato"
description="Chez Taq Taq, nous sélectionnons les meilleurs ingrédients pour vous offrir une texture onctueuse et des saveurs inoubliables. Chaque recette est un hommage à la tradition italienne, adaptée aux produits locaux du Sénégal."
imageSrc="http://img.b2bpic.net/free-photo/crop-hand-with-spoon-sugar_23-2147758390.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,63 @@
import { Leaf, ShieldCheck, Award } from 'lucide-react';
import ScrollReveal from '@/components/ui/ScrollReveal';
import TextAnimation from '@/components/ui/TextAnimation';
export default function CertificationsSection() {
const features = [
{
icon: Leaf,
title: "Ingrédients Naturels",
description: "Nos glaces sont préparées avec des ingrédients 100% naturels, sans colorants ni conservateurs artificiels."
},
{
icon: ShieldCheck,
title: "Hygiène & Sécurité",
description: "Notre laboratoire de production respecte les normes d'hygiène les plus strictes pour garantir votre sécurité."
},
{
icon: Award,
title: "Qualité Premium",
description: "Nous sélectionnons rigoureusement nos fournisseurs pour vous garantir des produits frais et de première qualité."
}
];
return (
<section id="certifications" data-webild-section="certifications" className="py-24 bg-background">
<div className="w-content-width mx-auto">
<div className="text-center mb-16">
<ScrollReveal variant="fade">
<span className="inline-block py-1 px-3 rounded-full bg-primary-cta/10 text-primary-cta text-sm font-medium mb-4">
Qualité & Sécurité
</span>
</ScrollReveal>
<TextAnimation
text="Nos Engagements & Certifications"
variant="fade-blur"
tag="h2"
gradientText={false}
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
/>
<ScrollReveal variant="fade" delay={0.1}>
<p className="text-lg text-accent max-w-2xl mx-auto">
Nous nous engageons à vous offrir le meilleur gelato, préparé dans le strict respect des normes d'hygiène et de sécurité alimentaire. Nos ingrédients sont soigneusement sélectionnés pour garantir une qualité exceptionnelle.
</p>
</ScrollReveal>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
{features.map((feature, index) => (
<ScrollReveal variant="fade" key={index} delay={0.2 + index * 0.1}>
<div className="card p-8 h-full flex flex-col items-center text-center">
<div className="w-16 h-16 rounded-full bg-primary-cta/10 flex items-center justify-center mb-6 text-primary-cta">
<feature.icon className="w-8 h-8" />
</div>
<h3 className="text-xl font-bold text-foreground mb-4">{feature.title}</h3>
<p className="text-accent">{feature.description}</p>
</div>
</ScrollReveal>
))}
</div>
</div>
</section>
);
}

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="Nous trouver"
text="Venez goûter à la magie de Taq Taq MammaMia Gelato dès aujourd'hui !"
primaryButton={{
text: "Itinéraire (Google Maps)",
href: "https://maps.google.com",
}}
secondaryButton={{
text: "Appeler : 33 873 66 66",
href: "tel:338736666",
}}
/>
</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 "faq" section.
import React from 'react';
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTwoColumn
tag="FAQ"
title="Des questions ?"
description="Retrouvez les réponses aux questions les plus fréquentes."
items={[
{
question: "Quels sont vos horaires ?",
answer: "Nous sommes ouverts tous les jours de 10h à minuit.",
},
{
question: "Proposez-vous la livraison ?",
answer: "Oui, nous livrons via nos partenaires habituels sur toute la zone de Dakar.",
},
{
question: "Les glaces sont-elles artisanales ?",
answer: "Absolument, chaque bac est préparé manuellement chaque matin.",
},
]}
/>
</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="Gelato Artisanal"
title="Le Goût de l'Italie à Dakar"
description="Découvrez l'expérience authentique du vrai gelato italien, préparé chaque jour avec des ingrédients frais et naturels."
primaryButton={{
text: "Découvrir le Menu",
href: "#menu",
}}
secondaryButton={{
text: "Nous Contacter",
href: "#contact",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/woman-cooking-pizza-kitchen_158595-2120.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/ice-lollies-with-blueberries-cherries_23-2148216294.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/top-view-delicious-food-concept_23-2148578404.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/colored-cloths-arrangement-with-natural-pigments_23-2148734437.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/pistachio-ice-cream-with-pistachios_23-2151988819.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/vertical-shot-glass-delicious-ice-cream-with-chocolate-syrup-whipped-cream_181624-57869.jpg",
},
]}
/>
</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 "menu" section.
import React from 'react';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MenuSection(): React.JSX.Element {
return (
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesImageBento
tag="Menu Signature"
title="Nos Parfums Favoris"
description="Une sélection de glaces artisanales fabriquées avec amour."
items={[
{
title: "Pistache",
description: "Pistaches de Sicile torréfiées.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-green-ice-cream-plate_52683-92471.jpg",
},
{
title: "Chocolat Noir",
description: "Cacao intense 70%.",
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-bowl-with-chocolate-flavored-ice-cream_23-2148422052.jpg",
},
{
title: "Fraise Fraîche",
description: "Fraises locales de saison.",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-ice-creams-glass_23-2148507965.jpg",
},
{
title: "Vanille Bourbon",
description: "Gousses de vanille de Madagascar.",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-ice-cream-with-nuts_23-2148507941.jpg",
},
{
title: "Caramel au Beurre Salé",
description: "Une pointe de sel marin.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-little-creamy-cake-with-chocolate-cookies-dark-surface-biscuit-cake-sweet-pie-sugar-cookie_140725-118183.jpg",
},
{
title: "Noisette",
description: "Noisettes croquantes.",
imageSrc: "http://img.b2bpic.net/free-photo/chocolate-ice-cream-texture_23-2149450689.jpg",
},
{
title: "Citron Sorbet",
description: "Rafraîchissant et acidulé.",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-granita-dessert-with-various-ingredients_23-2149400149.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,28 @@
// 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 MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsMediaCards
tag="La Qualité avant tout"
title="Nos Engagements"
description="La promesse d'une qualité exceptionnelle à chaque bouchée."
metrics={[
{
value: "100%",
title: "Ingrédients naturels",
description: "Sans colorants ni conservateurs artificiels.",
imageSrc: "http://img.b2bpic.net/free-photo/ripe-fruits-veggies-homegrown-sold-farmers-market-stand_482257-77543.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,29 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "social" section.
import React from 'react';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function SocialSection(): React.JSX.Element {
return (
<div id="social" data-section="social">
<SectionErrorBoundary name="social">
<SocialProofMarquee
tag="Nos partenaires"
title="Ils nous font confiance"
description="Nous collaborons avec les meilleurs services de Dakar."
names={[
"Glovo",
"Dakar E-commerce",
"Local Farms Coop",
"Artisan Alliance",
"Qualité Dakar",
"Le Meilleur de Dakar",
"EcoFriendly Label",
]}
/>
</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 TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialQuoteCards
tag="Nos clients"
title="Ce qu'ils pensent de nous"
description="Les retours de nos fidèles amateurs de glaces à Dakar."
testimonials={[
{
name: "Fatou Ndiaye",
role: "Passionnée",
quote: "La meilleure glace de Dakar, sans aucune hésitation !",
imageSrc: "http://img.b2bpic.net/free-photo/laugh-is-way-happiness_329181-2893.jpg",
},
{
name: "Marc L.",
role: "Habitué",
quote: "Une texture incroyablement onctueuse, authentique et savoureuse.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-people-with-paper-wrapped-sandwiches_23-2151309966.jpg",
},
{
name: "Aminata S.",
role: "Client fidéle",
quote: "L'endroit idéal pour une pause sucrée après une longue journée.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-with-two-raised-fingers_1187-1103.jpg",
},
{
name: "Jean B.",
role: "Gourmand",
quote: "Le parfum pistache est une pure merveille. Je reviens chaque semaine.",
imageSrc: "http://img.b2bpic.net/free-photo/positive-woman-denim-jacket-undershirt-looks-sun-bright-backdrop-brunette-girl-light-pants-sunglasses-poses-yellow-background_197531-28011.jpg",
},
{
name: "Sophie D.",
role: "Gourmande",
quote: "L'accueil est chaleureux et la glace est divine. Bravo Taq Taq !",
imageSrc: "http://img.b2bpic.net/free-photo/outdoor-street-portrait-happy-woman-eating-ice-cream_197531-22772.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}