Système de Restaurant
Un système de restaurant local full-stack hébergé sur Wi-Fi, conçu pour la rapidité, la simplicité et la confidentialité.
Introduction
Ce projet vise à créer un système complet de gestion de restaurant fonctionnant entièrement sur un réseau Wi-Fi local (LAN).
Lorsqu’un client s’installe, il peut scanner un QR code imprimé sur sa table ; s’il ne le souhaite pas, le serveur peut le faire pour lui et apporter un menu papier à la place.
Le QR code se connecte automatiquement à l’application web locale et encode l’ID de la table, permettant au système de savoir quelle table passe la commande, sans nécessiter Internet.
Tout — du backend au menu web — fonctionne dans le réseau local privé du restaurant.
Aperçu du Système
🖥️ Backend (API)
Un backend léger (FastAPI) constitue le cœur du système, hébergé localement sur un mini-PC ou un ordinateur central connecté au routeur du restaurant.
Il gère :
- Les tables, commandes et menus
- L’authentification du personnel
- La communication entre clients, serveurs et cuisine
- Le stockage via une base de données interne (SQLite pour le moment)
🍽️ Frontend pour Clients
Les clients accèdent au menu via leur navigateur après avoir scanné le QR code (ou via le menu papier si demandé).
Le système charge automatiquement la bonne table et affiche une interface web moderne et adaptée aux mobiles (React), où les clients peuvent :
- Parcourir les plats
- Personnaliser les options
- Passer directement leurs commandes
Aucune installation d’application n’est nécessaire, tout fonctionne instantanément via le LAN.
👨🍳 Communication en Temps Réel
Pour rendre la communication plus rapide et fluide, le système utilise WebSockets entre :
- Les appareils des serveurs (téléphones ou tablettes)
- L’écran de la cuisine
Cela garantit des mises à jour instantanées : dès qu’une commande est passée, la cuisine la voit immédiatement, et lorsqu’elle est prête, le serveur est notifié en temps réel sans recharger les pages.
🧩 Déploiement Facile avec Docker
Tout est conteneurisé via Docker pour simplifier le déploiement.
Le propriétaire du restaurant doit simplement :
- Installer Docker sur un ordinateur local ou un petit serveur.
- Exécuter une commande (
docker-compose up). - Le système configure automatiquement :
- L’API backend
- Le serveur WebSocket
- La base de données
- L’application web frontend
- Insérer les éléments du menu et les articles de base dans la base de données ainsi que les membres du personnel et les tables (les QR codes sont créés automatiquement).
L’objectif est de rendre l’installation aussi simple que de brancher une machine à café ☕ entièrement automatisée et prête à l’emploi.
🧩 Schéma de Base de Données (Diagramme ER)
Ci-dessous le diagramme Entité–Relation complet montrant comment les utilisateurs, commandes et articles sont connectés — y compris les extensions analytiques comme les coûts, promotions et journaux d’inventaire.
🔄 Flux de Données du Système
Ci-dessous le flux de données basé sur les rôles et requêtes pour les clients publics et utilisateurs authentifiés.
🔒 Sécurité et Questions Ouvertes
Même si le système fonctionne localement, plusieurs questions importantes de sécurité se posent :
- Intégration des Paiements :
Les paiements doivent-ils être gérés dans le même système local ou découplés (traités par un terminal ou service externe) ?- Si découpés, comment enregistrer en toute sécurité le statut du paiement dans la base locale ?
- Un point de terminaison API “paiement réussi” est-il suffisant, ou un protocole plus robuste est nécessaire ?
- Isolation Réseau :
Est-il vraiment sûr d’héberger le backend sur un réseau Wi-Fi local accessible aux clients ?- Faut-il séparer le réseau en deux VLANs, un pour le personnel et un pour les clients ?
- Comment prévenir les accès malveillants ou abus d’API si un client tente d’inspecter le trafic réseau (attaque MITM) ?
- Intégrité et Fiabilité des Données :
Que se passe-t-il si le serveur local redémarre aux heures de pointe ?- Faut-il une sauvegarde automatique ou une réplication vers un petit service cloud ?
- Comment garder tout purement local tout en restant sécurisé ?
- Conception de l’API :
La structure actuelle de l’API sépare les routes/products,/orders,/kitchenet/waiters.- Cette structure modulaire est-elle appropriée ou tous les rôles devraient-ils partager un point
/orderscommun avec filtrage basé sur le rôle ? - Comment organiser les canaux WebSocket ? Par rôle, par table ou globalement ?
- Cette structure modulaire est-elle appropriée ou tous les rôles devraient-ils partager un point
J’aimerais avoir des retours de développeurs et architectes système sur ces choix architecturaux et de sécurité.
Vos idées pourraient aider à transformer ce concept en une solution open-source prête pour la production pour les petits restaurants. Merci à tous :D
Code Source
👉 ZeCo Backend sur GitHub
👉 ZeCo Dashboard sur Streamlit