5 Commits

Author SHA1 Message Date
b03c7e32b9 Update src/app/admin/page.tsx 2026-05-25 23:28:42 +00:00
8fe3a653af Update src/app/admin/page.tsx 2026-05-25 23:28:05 +00:00
bba5fe383b Update src/app/styles/variables.css 2026-05-25 23:27:17 +00:00
61175df146 Update src/app/page.tsx 2026-05-25 23:27:16 +00:00
5c44c66dbd Update src/app/admin/page.tsx 2026-05-25 23:27:16 +00:00
3 changed files with 256 additions and 296 deletions

View File

@@ -2,12 +2,145 @@
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import ReactLenis from "lenis/react"; import ReactLenis from "lenis/react";
import FaqDouble from '@/components/sections/faq/FaqDouble';
import FooterBase from '@/components/sections/footer/FooterBase';
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay'; import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import TextAbout from '@/components/sections/about/TextAbout'; import FooterBase from '@/components/sections/footer/FooterBase';
import CardStack from '@/components/cardStack/CardStack';
import ButtonShiftHover from '@/components/button/ButtonShiftHover/ButtonShiftHover';
import { useState, useEffect, useCallback } from 'react';
import { Phone, MessageCircle } from 'lucide-react'; // For call and WhatsApp icons
// Mock data for orders
interface OrderItem {
name: string;
quantity: number;
price: number;
}
interface Order {
id: string;
customerName: string;
customerPhone: string; // E.g., "0550123456"
customerAddress: string;
items: OrderItem[];
totalPrice: number;
timestamp: string; // ISO string or similar
}
const mockOrders: Order[] = [
{
id: "ORD001", customerName: "Ahmed Benali", customerPhone: "0550123456", customerAddress: "Rue Didouche Mourad, Alger Centre", items: [
{ name: "Burger Classique", quantity: 2, price: 450 },
{ name: "Frites XXL", quantity: 1, price: 200 },
],
totalPrice: 1100,
timestamp: new Date().toISOString(),
},
{
id: "ORD002", customerName: "Fatima Zahra", customerPhone: "0770987654", customerAddress: "Cité El Wouroud, Bab Ezzouar", items: [
{ name: "Pizza Pepperoni", quantity: 1, price: 850 },
{ name: "Boisson Gazeuse", quantity: 2, price: 100 },
],
totalPrice: 1050,
timestamp: new Date(Date.now() - 5 * 60 * 1000).toISOString(), // 5 mins ago
},
{
id: "ORD003", customerName: "Rachid Khelifa", customerPhone: "0660112233", customerAddress: "Boulevard Krim Belkacem, Oran", items: [
{ name: "Taco Poulet", quantity: 1, price: 500 },
{ name: "Chicken Nuggets (6pcs)", quantity: 1, price: 600 },
{ name: "Boisson Gazeuse", quantity: 1, price: 100 },
],
totalPrice: 1200,
timestamp: new Date(Date.now() - 10 * 60 * 1000).toISOString(), // 10 mins ago
},
];
const OrderCard: React.FC<{ order: Order; onOrderReady: (id: string) => void }> = ({ order, onOrderReady }) => {
const formatPhoneNumberForWhatsApp = (phone: string) => {
// Remove leading '0' if present and add country code "+213"
let formatted = phone.startsWith('0') ? phone.substring(1) : phone;
if (!formatted.startsWith('213')) {
formatted = '213' + formatted;
}
return formatted;
};
return (
<div className="bg-card p-6 rounded-lg shadow-lg flex flex-col gap-4 border border-accent/20">
<h3 className="text-xl font-semibold text-foreground">Commande #{order.id}</h3>
<div className="text-sm text-foreground/80">
<p><span className="font-medium">Client:</span> {order.customerName}</p>
<p><span className="font-medium">Téléphone:</span> {order.customerPhone}</p>
<p><span className="font-medium">Adresse:</span> {order.customerAddress}</p>
<p className="mt-2 text-xs"><span className="font-medium">Heure:</span> {new Date(order.timestamp).toLocaleTimeString('fr-FR')}</p>
</div>
<div className="flex-grow">
<h4 className="font-semibold text-foreground mt-4 mb-2">Articles:</h4>
<ul className="list-disc list-inside text-foreground/90">
{order.items.map((item, index) => (
<li key={index} className="text-sm">{item.name} x{item.quantity} ({item.price * item.quantity} DA)</li>
))}
</ul>
</div>
<p className="text-lg font-bold text-foreground mt-4">Total: {order.totalPrice} DA</p>
<div className="flex flex-col sm:flex-row gap-2 mt-4">
<ButtonShiftHover
text="Appeler le client"
href={`tel:${order.customerPhone}`}
className="flex-1 bg-secondary-cta hover:bg-secondary-cta/80 text-secondary-cta-text"
textClassName="flex items-center justify-center gap-2"
ariaLabel={`Appeler le client ${order.customerName}`}
/>
<ButtonShiftHover
text="WhatsApp"
href={`https://wa.me/${formatPhoneNumberForWhatsApp(order.customerPhone)}`}
className="flex-1 bg-green-500 hover:bg-green-600 text-white"
textClassName="flex items-center justify-center gap-2"
ariaLabel={`Envoyer un message WhatsApp à ${order.customerName}`}
/>
<ButtonShiftHover
text="Commande Prête"
onClick={() => onOrderReady(order.id)}
className="flex-1 bg-primary-cta hover:bg-primary-cta/80 text-primary-cta-text"
ariaLabel={`Marquer la commande ${order.id} comme prête`}
/>
</div>
</div>
);
};
export default function AdminPage() {
const [orders, setOrders] = useState<Order[]>([]);
// Simulate fetching orders from a backend
const fetchOrders = useCallback(() => {
// In a real app, this would be an API call
console.log("Fetching orders...");
// For now, load mockOrders if empty, otherwise just return current orders
setOrders(prevOrders => {
if (prevOrders.length === 0) {
return mockOrders;
}
return prevOrders;
});
}, []);
useEffect(() => {
fetchOrders(); // Fetch immediately on component mount
const intervalId = setInterval(fetchOrders, 2000); // Fetch every 2 seconds
return () => clearInterval(intervalId); // Cleanup interval on unmount
}, [fetchOrders]);
const handleOrderReady = (id: string) => {
setOrders(prevOrders => prevOrders.filter(order => order.id !== id));
console.log(`Order ${id} marked as ready and cleared.`);
// In a real app, this would also trigger an API call to update order status in backend
};
export default function LandingPage() {
return ( return (
<ThemeProvider <ThemeProvider
defaultButtonVariant="hover-magnetic" defaultButtonVariant="hover-magnetic"
@@ -15,138 +148,79 @@ export default function LandingPage() {
borderRadius="soft" borderRadius="soft"
contentWidth="mediumLarge" contentWidth="mediumLarge"
sizing="mediumSizeLargeTitles" sizing="mediumSizeLargeTitles"
background="floatingGradient" background="noise"
cardStyle="soft-shadow" cardStyle="glass-elevated"
primaryButtonStyle="primary-glow" primaryButtonStyle="diagonal-gradient"
secondaryButtonStyle="glass" secondaryButtonStyle="radial-glow"
headingFontWeight="extrabold" headingFontWeight="extrabold"
> >
<ReactLenis root> <ReactLenis root>
<div id="nav" data-section="nav"> <div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay <NavbarLayoutFloatingOverlay
navItems={[ navItems={[
{ { name: "Accueil", id: "/" },
name: "Accueil", { name: "Menu", id: "/#menu" },
id: "/", { name: "Commander", id: "/#commander" },
}, { name: "Admin", id: "/admin" }
{ ]}
name: "Menu", logoSrc="http://img.b2bpic.net/free-vector/illustration-pizza-vector-set_53876-81099.jpg"
id: "/#menu", logoAlt="Logo Fast Food DZ"
}, brandName="Fast Food DZ"
{ />
name: "Commander", </div>
id: "/#commander",
},
{
name: "Admin",
id: "/admin",
},
]}
logoSrc="http://img.b2bpic.net/free-vector/illustration-pizza-vector-set_53876-81099.jpg"
logoAlt="Logo Fast Food DZ"
brandName="Fast Food DZ"
/>
</div>
<div id="admin-about" data-section="admin-about"> <main className="min-h-screen pt-20 px-4 sm:px-6 lg:px-8 bg-background text-foreground">
<TextAbout <div className="max-w-7xl mx-auto py-12">
useInvertedBackground={false} <h1 className="text-5xl font-extrabold text-center mb-10">Gestion des Commandes</h1>
title="Tableau de Bord Administrateur" {orders.length === 0 ? (
/> <p className="text-center text-lg text-foreground/70">Aucune commande en attente.</p>
</div> ) : (
<CardStack
animationType="slide-up"
textboxLayout="default"
gridVariant="uniform-all-items-equal"
uniformGridCustomHeightClasses="min-h-fit"
className="pt-8"
gridClassName="grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6"
>
{orders.map((order) => (
<OrderCard key={order.id} order={order} onOrderReady={handleOrderReady} />
))}
</CardStack>
)}
</div>
</main>
<div id="admin-faq" data-section="admin-faq"> <div id="footer" data-section="footer">
<FaqDouble <FooterBase
textboxLayout="default" columns={[
useInvertedBackground={false} {
faqs={[ title: "Catégories", items: [
{ { label: "Burgers", href: "/#menu" },
id: "q1", { label: "Pizzas", href: "/#menu" },
title: "Comment les commandes sont-elles affichées ?", { label: "Tacos", href: "/#menu" },
content: "Les nouvelles commandes apparaissent automatiquement et en temps réel sur le tableau de bord, sans nécessiter de rafraîchissement manuel. Elles sont triées par ordre d'arrivée.", { label: "Boissons", href: "/#menu" }
}, ]
{ },
id: "q2", {
title: "Comment contacter un client ?", title: "Aide", items: [
content: "Chaque commande affiche un bouton 'Appeler le client' qui vous permet d'initier un appel téléphonique ou une discussion WhatsApp directement avec le client concerné.", { label: "Commander", href: "/#commander" },
}, { label: "Contact", href: "/contact" },
{ { label: "FAQ", href: "/faq" }
id: "q3", ]
title: "Que fait le bouton 'Commande Prête' ?", },
content: "En cliquant sur 'Commande Prête', la commande est retirée du tableau de bord actif, signalant qu'elle est préparée et prête pour la livraison ou la collecte.", {
}, title: "Légal", items: [
{ { label: "Politique de Confidentialité", href: "/politique-confidentialite" },
id: "q4", { label: "Conditions de Service", href: "/conditions-service" }
title: "Puis-je modifier une commande existante ?", ]
content: "L'interface est conçue pour l'affichage et la gestion du statut. Les modifications directes de commande nécessitent une intervention manuelle ou un système backend dédié.", }
}, ]}
]} logoText="Fast Food DZ"
title="Questions Fréquentes sur la Gestion des Commandes" copyrightText="© 2024 Fast Food DZ. Tous droits réservés."
description="Retrouvez ici les réponses aux questions les plus courantes pour vous aider à utiliser l'interface administrateur." />
faqsAnimation="slide-up" </div>
/>
</div>
<div id="footer" data-section="footer">
<FooterBase
columns={[
{
title: "Catégories",
items: [
{
label: "Burgers",
href: "/#menu",
},
{
label: "Pizzas",
href: "/#menu",
},
{
label: "Tacos",
href: "/#menu",
},
{
label: "Boissons",
href: "/#menu",
},
],
},
{
title: "Aide",
items: [
{
label: "Commander",
href: "/#commander",
},
{
label: "Contact",
href: "/contact",
},
{
label: "FAQ",
href: "/faq",
},
],
},
{
title: "Légal",
items: [
{
label: "Politique de Confidentialité",
href: "/politique-confidentialite",
},
{
label: "Conditions de Service",
href: "/conditions-service",
},
],
},
]}
logoText="Fast Food DZ"
copyrightText="© 2024 Fast Food DZ. Tous droits réservés."
/>
</div>
</ReactLenis> </ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -29,21 +29,13 @@ export default function LandingPage() {
<NavbarLayoutFloatingOverlay <NavbarLayoutFloatingOverlay
navItems={[ navItems={[
{ {
name: "Accueil", name: "Accueil", id: "/"},
id: "/",
},
{ {
name: "Menu", name: "Menu", id: "/client#menu-section"},
id: "/#menu",
},
{ {
name: "Commander", name: "Commander", id: "/client#commander-section"},
id: "/#commander",
},
{ {
name: "Admin", name: "Admin", id: "/admin"},
id: "/admin",
},
]} ]}
logoSrc="http://img.b2bpic.net/free-vector/illustration-pizza-vector-set_53876-81099.jpg" logoSrc="http://img.b2bpic.net/free-vector/illustration-pizza-vector-set_53876-81099.jpg"
logoAlt="Logo Fast Food DZ" logoAlt="Logo Fast Food DZ"
@@ -57,13 +49,9 @@ export default function LandingPage() {
description="Le goût authentique, livré rapidement à votre porte en Algérie. Découvrez notre menu varié et commandez en quelques clics !" description="Le goût authentique, livré rapidement à votre porte en Algérie. Découvrez notre menu varié et commandez en quelques clics !"
buttons={[ buttons={[
{ {
text: "Voir le Menu", text: "Voir le Menu", href: "/client#menu-section"},
href: "/#menu",
},
{ {
text: "Commander Maintenant", text: "Commander Maintenant", href: "/client#commander-section"},
href: "/#commander",
},
]} ]}
buttonAnimation="slide-up" buttonAnimation="slide-up"
imageSrc="http://img.b2bpic.net/free-photo/responsible-handsome-male-driver-scooter-with-red-helmet-delivering-pizza_273609-31428.jpg" imageSrc="http://img.b2bpic.net/free-photo/responsible-handsome-male-driver-scooter-with-red-helmet-delivering-pizza_273609-31428.jpg"
@@ -80,23 +68,11 @@ export default function LandingPage() {
useInvertedBackground={false} useInvertedBackground={false}
features={[ features={[
{ {
title: "Livraison Rapide", title: "Livraison Rapide", description: "Recevez vos plats préférés en un temps record, directement à votre adresse.", imageSrc: "http://img.b2bpic.net/free-photo/colleagues-work-eating-pizza_23-2148894071.jpg", imageAlt: "Livreur sur scooter"},
description: "Recevez vos plats préférés en un temps record, directement à votre adresse.",
imageSrc: "http://img.b2bpic.net/free-photo/colleagues-work-eating-pizza_23-2148894071.jpg",
imageAlt: "Livreur sur scooter",
},
{ {
title: "Ingrédients Frais", title: "Ingrédients Frais", description: "Nous utilisons uniquement des produits frais et de qualité supérieure pour chaque plat.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-fresh-red-tomatoes-with-garlic-green-salad-inside-wooden-board-blue-surface-food-lunch-salad-ripe-color-meal_179666-19771.jpg", imageAlt: "Ingrédients frais"},
description: "Nous utilisons uniquement des produits frais et de qualité supérieure pour chaque plat.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-fresh-red-tomatoes-with-garlic-green-salad-inside-wooden-board-blue-surface-food-lunch-salad-ripe-color-meal_179666-19771.jpg",
imageAlt: "Ingrédients frais",
},
{ {
title: "Paiement Facile", title: "Paiement Facile", description: "Options de paiement flexibles pour une expérience de commande sans tracas.", imageSrc: "http://img.b2bpic.net/free-photo/paying-purchases_1098-16889.jpg", imageAlt: "Paiement mobile"},
description: "Options de paiement flexibles pour une expérience de commande sans tracas.",
imageSrc: "http://img.b2bpic.net/free-photo/paying-purchases_1098-16889.jpg",
imageAlt: "Paiement mobile",
},
]} ]}
title="Pourquoi Choisir Fast Food DZ ?" title="Pourquoi Choisir Fast Food DZ ?"
description="Nous nous engageons à vous offrir la meilleure expérience de restauration rapide, de la commande à la livraison." description="Nous nous engageons à vous offrir la meilleure expérience de restauration rapide, de la commande à la livraison."
@@ -111,52 +87,22 @@ export default function LandingPage() {
useInvertedBackground={false} useInvertedBackground={false}
products={[ products={[
{ {
id: "burger-1", id: "burger-1", name: "Burger Classique", price: "450 DA", imageSrc: "http://img.b2bpic.net/free-photo/hamburger-isolated-white-background-fresh-burger-fastfood-with-beef-cheese_90220-1329.jpg", imageAlt: "Burger Classique", rating: 5,
name: "Burger Classique",
price: "450 DA",
imageSrc: "http://img.b2bpic.net/free-photo/hamburger-isolated-white-background-fresh-burger-fastfood-with-beef-cheese_90220-1329.jpg",
imageAlt: "Burger Classique",
rating: 5,
}, },
{ {
id: "pizza-1", id: "pizza-1", name: "Pizza Pepperoni", price: "850 DA", imageSrc: "http://img.b2bpic.net/free-photo/slice-pizza-wooden-board-with-recipe-book-aside-marble_114579-13833.jpg", imageAlt: "Pizza Pepperoni", rating: 4,
name: "Pizza Pepperoni",
price: "850 DA",
imageSrc: "http://img.b2bpic.net/free-photo/slice-pizza-wooden-board-with-recipe-book-aside-marble_114579-13833.jpg",
imageAlt: "Pizza Pepperoni",
rating: 4,
}, },
{ {
id: "taco-1", id: "taco-1", name: "Taco Poulet", price: "500 DA", imageSrc: "http://img.b2bpic.net/free-photo/hand-holding-delicious-taco_23-2150799493.jpg", imageAlt: "Taco Poulet", rating: 5,
name: "Taco Poulet",
price: "500 DA",
imageSrc: "http://img.b2bpic.net/free-photo/hand-holding-delicious-taco_23-2150799493.jpg",
imageAlt: "Taco Poulet",
rating: 5,
}, },
{ {
id: "drink-1", id: "drink-1", name: "Boisson Gazeuse", price: "100 DA", imageSrc: "http://img.b2bpic.net/free-photo/photorealistic-burger-meal_23-2151292977.jpg", imageAlt: "Boisson Gazeuse", rating: 4,
name: "Boisson Gazeuse",
price: "100 DA",
imageSrc: "http://img.b2bpic.net/free-photo/photorealistic-burger-meal_23-2151292977.jpg",
imageAlt: "Boisson Gazeuse",
rating: 4,
}, },
{ {
id: "fries-1", id: "fries-1", name: "Frites XXL", price: "200 DA", imageSrc: "http://img.b2bpic.net/free-photo/front-view-delicious-french-fries-with-seasonings-getting-eat-by-female-dark-surface_179666-34417.jpg", imageAlt: "Frites XXL", rating: 5,
name: "Frites XXL",
price: "200 DA",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-delicious-french-fries-with-seasonings-getting-eat-by-female-dark-surface_179666-34417.jpg",
imageAlt: "Frites XXL",
rating: 5,
}, },
{ {
id: "nuggets-1", id: "nuggets-1", name: "Chicken Nuggets (6pcs)", price: "600 DA", imageSrc: "http://img.b2bpic.net/free-photo/vertical-shot-fried-chicken-wings-some-garlic-spices-grey-surface_181624-23572.jpg", imageAlt: "Chicken Nuggets", rating: 4,
name: "Chicken Nuggets (6pcs)",
price: "600 DA",
imageSrc: "http://img.b2bpic.net/free-photo/vertical-shot-fried-chicken-wings-some-garlic-spices-grey-surface_181624-23572.jpg",
imageAlt: "Chicken Nuggets",
rating: 4,
}, },
]} ]}
title="Notre Menu Appétissant" title="Notre Menu Appétissant"
@@ -171,50 +117,20 @@ export default function LandingPage() {
useInvertedBackground={false} useInvertedBackground={false}
testimonials={[ testimonials={[
{ {
id: "t-1", id: "t-1", name: "Amira Benali", handle: "@amirabenali", testimonial: "Des burgers incroyables et une livraison super rapide. Mon nouveau fast-food préféré !", rating: 5,
name: "Amira Benali", imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiley-business-man_23-2148514859.jpg", imageAlt: "Amira Benali"},
handle: "@amirabenali",
testimonial: "Des burgers incroyables et une livraison super rapide. Mon nouveau fast-food préféré !",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiley-business-man_23-2148514859.jpg",
imageAlt: "Amira Benali",
},
{ {
id: "t-2", id: "t-2", name: "Khaled Mansour", handle: "@khaled.dz", testimonial: "La pizza était chaude et délicieuse. Le service client est au top. Je recommande vivement !", rating: 5,
name: "Khaled Mansour", imageSrc: "http://img.b2bpic.net/free-photo/blond-man-surprised_1194-2887.jpg", imageAlt: "Khaled Mansour"},
handle: "@khaled.dz",
testimonial: "La pizza était chaude et délicieuse. Le service client est au top. Je recommande vivement !",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/blond-man-surprised_1194-2887.jpg",
imageAlt: "Khaled Mansour",
},
{ {
id: "t-3", id: "t-3", name: "Samira Haddad", handle: "@samira_h", testimonial: "Leurs tacos sont les meilleurs de la ville ! Toujours frais et pleins de saveur.", rating: 5,
name: "Samira Haddad", imageSrc: "http://img.b2bpic.net/free-photo/smiling-autumn-woman-portrait-natural_1150-1608.jpg", imageAlt: "Samira Haddad"},
handle: "@samira_h",
testimonial: "Leurs tacos sont les meilleurs de la ville ! Toujours frais et pleins de saveur.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/smiling-autumn-woman-portrait-natural_1150-1608.jpg",
imageAlt: "Samira Haddad",
},
{ {
id: "t-4", id: "t-4", name: "Yacine Belkacem", handle: "@yacine.b", testimonial: "J'adore la variété du menu et la qualité constante. Fast Food DZ ne déçoit jamais.", rating: 4,
name: "Yacine Belkacem", imageSrc: "http://img.b2bpic.net/free-photo/smiley-young-man-looking-camera_23-2148289280.jpg", imageAlt: "Yacine Belkacem"},
handle: "@yacine.b",
testimonial: "J'adore la variété du menu et la qualité constante. Fast Food DZ ne déçoit jamais.",
rating: 4,
imageSrc: "http://img.b2bpic.net/free-photo/smiley-young-man-looking-camera_23-2148289280.jpg",
imageAlt: "Yacine Belkacem",
},
{ {
id: "t-5", id: "t-5", name: "Nour El Houda", handle: "@nour_h", testimonial: "La commande est arrivée très vite et tout était parfait. Un excellent rapport qualité-prix.", rating: 5,
name: "Nour El Houda", imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-beautiful-sportive-girl-sunrise-seaside_176420-6314.jpg", imageAlt: "Nour El Houda"},
handle: "@nour_h",
testimonial: "La commande est arrivée très vite et tout était parfait. Un excellent rapport qualité-prix.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-beautiful-sportive-girl-sunrise-seaside_176420-6314.jpg",
imageAlt: "Nour El Houda",
},
]} ]}
showRating={true} showRating={true}
title="Ce que disent nos clients" title="Ce que disent nos clients"
@@ -225,33 +141,24 @@ export default function LandingPage() {
<div id="commander" data-section="commander"> <div id="commander" data-section="commander">
<ContactSplitForm <ContactSplitForm
useInvertedBackground={false} useInvertedBackground={false}
title="Valider Votre Commande" title="Informations de Contact"
description="Remplissez le formulaire ci-dessous pour finaliser votre livraison. Un récapitulatif de votre panier sera inclus dans la commande." description="Pour toute question ou demande spéciale, n'hésitez pas à nous contacter directement."
inputs={[ inputs={[
{ {
name: "fullName", name: "fullName", type: "text", placeholder: "Nom et Prénom", required: true,
type: "text",
placeholder: "Nom et Prénom",
required: true,
}, },
{ {
name: "phoneNumber", name: "email", type: "email", placeholder: "Votre Email", required: true,
type: "tel",
placeholder: "Numéro de Téléphone (0XXXXXXXXX)",
required: true,
}, },
{ {
name: "address", name: "message", type: "textarea", placeholder: "Votre Message", required: true,
type: "text",
placeholder: "Adresse de Livraison (Commune, Quartier, N° de porte)",
required: true,
}, },
]} ]}
imageSrc="http://img.b2bpic.net/free-photo/3d-rendering-sushi_23-2151301239.jpg" imageSrc="http://img.b2bpic.net/free-photo/3d-rendering-sushi_23-2151301239.jpg"
imageAlt="Image de fond pour le formulaire de commande" imageAlt="Image de fond pour le formulaire de contact"
mediaAnimation="none" mediaAnimation="none"
mediaPosition="right" mediaPosition="right"
buttonText="Confirmer la commande" buttonText="Envoyer le Message"
/> />
</div> </div>
@@ -259,54 +166,33 @@ export default function LandingPage() {
<FooterBase <FooterBase
columns={[ columns={[
{ {
title: "Catégories", title: "Catégories", items: [
items: [
{ {
label: "Burgers", label: "Burgers", href: "/client#menu-section"},
href: "/#menu",
},
{ {
label: "Pizzas", label: "Pizzas", href: "/client#menu-section"},
href: "/#menu",
},
{ {
label: "Tacos", label: "Tacos", href: "/client#menu-section"},
href: "/#menu",
},
{ {
label: "Boissons", label: "Boissons", href: "/client#menu-section"},
href: "/#menu",
},
], ],
}, },
{ {
title: "Aide", title: "Aide", items: [
items: [
{ {
label: "Commander", label: "Commander", href: "/client#commander-section"},
href: "/#commander",
},
{ {
label: "Contact", label: "Contact", href: "/contact"},
href: "/contact",
},
{ {
label: "FAQ", label: "FAQ", href: "/faq"},
href: "/faq",
},
], ],
}, },
{ {
title: "Légal", title: "Légal", items: [
items: [
{ {
label: "Politique de Confidentialité", label: "Politique de Confidentialité", href: "/politique-confidentialite"},
href: "/politique-confidentialite",
},
{ {
label: "Conditions de Service", label: "Conditions de Service", href: "/conditions-service"},
href: "/conditions-service",
},
], ],
}, },
]} ]}

View File

@@ -10,15 +10,15 @@
--accent: #ffffff; --accent: #ffffff;
--background-accent: #ffffff; */ --background-accent: #ffffff; */
--background: #ffffff; --background: #1a1a1a;
--card: #f9f9f9; --card: #2a2a2a;
--foreground: #120a00e6; --foreground: #f5f5f5;
--primary-cta: #E34400; --primary-cta: #e43b2f;
--primary-cta-text: #ffffff; --primary-cta-text: #ffffff;
--secondary-cta: #f9f9f9; --secondary-cta: #ff7b00;
--secondary-cta-text: #120a00e6; --secondary-cta-text: #120a00e6;
--accent: #e2e2e2; --accent: #facc15;
--background-accent: #E34400; --background-accent: #e43b2f;
/* text sizing - set by ThemeProvider */ /* text sizing - set by ThemeProvider */
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem); /* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);