Sommaire
L'essentiel
- Trois parties reliées au même serveur : appli client, caisse AA Caisse (téléphone, tablette, PC) et panneau Restaurant.
- La caisse sonne à chaque commande même appli fermée ou écran verrouillé, avec la sonnerie choisie.
- Suivi de la commande en direct et notifications au client à chaque étape.
- Le serveur revérifie chaque commande sous verrou : prix, disponibilité, promotions, points, sans doublon.
- Impression automatique des tickets et mises à jour à distance sans passer par les stores.
AA Foods permet aux clients d'un restaurant de commander depuis leur téléphone, et au restaurant de recevoir, préparer et livrer ces commandes sans rien rater. Le projet compte trois parties qui parlent au même serveur : l'appli client pour iPhone, iPad et Android, l'appli de caisse AA Caisse pour téléphone, tablette et PC Windows, et un panneau Restaurant dans le logiciel AA Foods Gestion. J'ai tout conçu et développé seul, du serveur aux écrans.
Pour qui, et pour quoi faire
Le projet est pensé pour des restaurants en Côte d'Ivoire : prix en FCFA, heure d'Abidjan, paiement à la livraison ou au retrait, en espèces ou en mobile money. Le client choisit un restaurant, compose sa commande et la suit jusqu'à la remise au livreur. Au restaurant, le téléphone de caisse sonne à chaque commande. La direction pilote tout depuis son ordinateur : menu, promotions, vitrine, caisses, clients et statistiques.
Le but était simple à dire et difficile à tenir : une appli client agréable comme celles des grandes plateformes de livraison, et une caisse qui ne laisse jamais une commande sans réponse.
Le parcours du client
- Choisir un restaurant. L'accueil montre l'adresse de livraison, la recherche, les promotions qui défilent seules et les restaurants en cartes photo, avec leur état (ouvert, fermé, en pause).
- Composer sa commande. Le menu est rangé par rubriques. Chaque plat peut avoir des options : taille, accompagnement obligatoire, sauces au choix, suppléments payants, avec un nombre de choix minimum et maximum.
- Passer commande. Livraison ou à emporter, adresse, repère, position facultative, code promo, points de fidélité. Le compte (numéro de téléphone et code à 4 chiffres) n'est demandé qu'à ce moment-là : on peut regarder les menus sans compte.
- Suivre en direct. Envoyée, acceptée et en cuisine, prête, remise au livreur, avec l'heure de chaque étape. Le suivi se rafraîchit toutes les 8 secondes, et une notification prévient le client quand la commande est acceptée, prête ou refusée (avec le motif).
- Donner son avis. Quelque temps après la remise, une page d'avis s'ouvre une seule fois : une question à la fois, puis un mot facultatif.



Ce que fait l'appli client
- Recherche sans accents ni majuscules dans les plats, les restaurants et les promotions, avec recherches récentes et plats populaires tirés des vrais menus.
- Barre de recherche animée qui écrit « Envie de… » suivi d'un plat qui existe vraiment au menu.
- Produit épuisé affiché grisé et impossible à commander : les menus se rafraîchissent toutes les 30 secondes, sans relancer l'appli.
- Promotions variées : pourcentage, montant, prix spécial, « X achetés = Y offerts », livraison offerte, réservées ou non à la première commande, avec ou sans code.
- Portefeuille de points (1 point = 1 FCFA) commun à tous les restaurants : « Payer avec mes points », le reste se règle à la livraison.
- Historique « Mes commandes » avec le statut de chaque commande.
- Version iPad dédiée : barre latérale avec la navigation, la ville, le panier et la commande en cours ; suivi en deux colonnes.
- En-têtes qui s'étirent quand on tire la page, animés côté natif ; police Plus Jakarta Sans ; respect du mouvement réduit.
- Suppression du compte depuis l'appli : les commandes sont anonymisées.
AA Caisse : la commande qui sonne, même appli fermée
Une commande qui attend sans réponse, c'est un client perdu. La caisse a donc été construite autour d'une règle : le téléphone doit sonner, même quand l'appli est en arrière-plan ou l'écran verrouillé.
- Notifications à distance. À chaque nouvelle commande, le serveur prévient tous les téléphones de caisse actifs du restaurant, par Firebase Cloud Messaging, envoyé directement depuis le serveur, sans intermédiaire payant. Les clients reçoivent leurs notifications de suivi de la même façon, par Firebase sur Android et par le service d'Apple sur iPhone.
- Canal Android dédié. Priorité maximale, visible sur l'écran verrouillé, vibration, et autorisé à passer le mode « Ne pas déranger ».
- Sonnerie au choix. Six sons, dont une annonce vocale de la commande. Sur Android, le son d'un canal ne peut plus changer une fois créé : il y a donc un canal par sonnerie, et le serveur envoie la commande sur le canal choisi par chaque téléphone.
- En boucle tant que personne ne répond. Appli ouverte, la sonnerie tourne jusqu'à ce qu'un caissier réagisse, et l'écran ne se met jamais en veille.
- Alarme d'ouverture. Programmée sur le téléphone lui-même, elle sonne à l'heure d'ouvrir, appli fermée et même sans Internet. Rien ne s'ouvre jamais tout seul : le caissier appuie sur « Ouvrir » ou programme l'ouverture.
Le caissier accepte la commande ou la refuse avec un motif que le client voit dans son appli. Il la marque prête pour prévenir le client, puis la transmet au livreur par WhatsApp, SMS ou copie du texte, avec un lien Google Maps si le client a partagé sa position. Depuis le menu de la caisse, un produit passe en épuisé ou masqué en un geste, et les commandes peuvent être mises en pause avec un message aux clients.



Impression des tickets et caisse sur PC
La caisse imprime le ticket automatiquement à l'acceptation (ou à l'arrivée, au choix), une seule fois par commande et par appareil, avec un ticket cuisine sans prix en option. Les réglages vont loin : papier 58 ou 80 mm, compatibilité ESC/POS ou Star, coupe, modèle de ticket, éléments affichés, marges, aperçu et impression de test. Toute commande se réimprime depuis l'historique, une journée à la fois, jusqu'à un an en arrière.
Sur téléphone Android, l'impression passe par une imprimante Bluetooth ou réseau grâce à un module natif écrit en Kotlin. Sur PC, AA Caisse pour Windows reprend exactement le même code que l'appli mobile : seuls quelques fichiers propres au PC changent (impression Windows, notification Windows, fenêtre ramenée devant à chaque commande, démarrage avec Windows, mises à jour automatiques au moment calme).
Le panneau Restaurant pour piloter le tout
Dans le logiciel AA Foods Gestion, l'onglet Restaurant réunit tout ce que la direction gère :
- commandes du jour et des jours passés, montant, commandes en attente et clients en ligne ;
- produits, catégories et groupes d'options avec leurs suppléments ;
- promotions et codes promo ;
- vitrine de chaque établissement : photos, présentation, horaires, livraison, vente à emporter, frais, minimum, pause ;
- caisses appairées, clients, points de fidélité, avis et médias ;
- statistiques maison : en direct, chiffre d'affaires, parcours menu → panier → commande, paniers abandonnés, clients nouveaux, fidèles ou perdus, produits vendus et regardés.
Le menu se modifie même sans Internet : il part au serveur à la synchronisation suivante.

Les difficultés techniques, et comment elles ont été résolues
Le serveur a toujours le dernier mot
Entre le moment où le client remplit son panier et celui où il valide, un produit peut être coupé ou un prix changer. Le serveur revérifie donc tout dans une seule transaction, sous verrou : restaurant ouvert, mode proposé, produit actif et disponible, composition, prix affiché. Si un article vient d'être coupé, rien n'est enregistré : l'appli corrige le panier et explique pourquoi. Une commande renvoyée après une coupure réseau ou un double appui n'est enregistrée qu'une fois.
Des promotions sans faille
Le calcul des promotions existe deux fois, à l'identique : en PHP sur le serveur et en TypeScript dans l'appli, pour afficher le bon total tout de suite. Les deux sont vérifiés par les mêmes cas de test. Les règles évitent les cumuls abusifs : une seule promotion par unité d'article, une seule sur la commande, une remise jamais supérieure au sous-total. Le serveur recalcule toujours au moment de la commande, avec les compteurs d'utilisation à jour.
Des actions simultanées
Le client peut annuler tant que la commande n'est pas acceptée. Si l'annulation et l'acceptation arrivent en même temps, une seule passe. Le paiement par points est retiré sous verrou et rendu automatiquement, une seule fois, si la commande est refusée ou annulée.
Appairer une caisse à distance
Le logiciel affiche un code à 8 chiffres, valable 15 minutes et utilisable une seule fois, que le caissier tape dans AA Caisse. Le serveur fait le lien : l'ordinateur peut être loin du restaurant. Après 10 codes faux depuis une même connexion, l'appairage est bloqué une heure.
Des mises à jour sans passer par les stores
Les deux applis reçoivent leurs corrections à distance : le code est publié signé, l'appli le télécharge et le propose. Le script de publication refuse d'envoyer si un élément natif a changé, car celui-ci exigerait une nouvelle version complète de l'appli.

Pile technique et savoir-faire
- Applis mobiles : React Native et Expo (Expo Router, expo-notifications, expo-updates), TypeScript.
- Impression Android : module natif maison en Kotlin (Bluetooth et réseau).
- Caisse sur PC et logiciel de gestion : Electron, React, TypeScript.
- Serveur : API PHP et MySQL, notifications Firebase Cloud Messaging et Apple Push Notification service envoyées directement.
AA Foods couvre toute la chaîne d'un service de commande en ligne : une appli client soignée, une caisse fiable sur trois types d'appareils, un outil de gestion complet et un serveur qui garde les données justes quand tout arrive en même temps. Tout a été conçu et développé par une seule personne, ce qui garantit des pièces qui s'emboîtent sans perte entre les équipes.
Vous avez un projet similaire, une appli de commande, une caisse ou un outil métier relié à une appli mobile ? Me contacter. Vous pouvez aussi voir toutes les captures du projet.
Questions fréquentes
Le restaurant peut-il recevoir les commandes sur un ordinateur plutôt qu'un téléphone ?
Oui. AA Caisse existe sur téléphone et tablette Android et sur PC Windows, avec le même code. Plusieurs caisses peuvent fonctionner ensemble pour un même restaurant.
Que se passe-t-il si un plat est épuisé pendant qu'un client commande ?
Le caissier le coupe en un geste depuis la caisse. L'appli client l'affiche grisé, et si le client l'avait déjà dans son panier, le serveur refuse la commande, corrige le panier et explique pourquoi.
Peut-on modifier l'appli sans repasser par l'App Store ou Google Play ?
Pour les corrections de code, oui : les deux applis reçoivent des mises à jour à distance signées. Un changement natif, comme un nouveau module, demande en revanche une nouvelle version publiée sur les stores.