Aller au contenu
Elian Maamer

Tous les projets05Dev & IA2026

Servio

Application de prise de commande en salle — en production

J'ai travaillé dans ce restaurant avant d'en écrire la moindre ligne. J'y ai vu ce qu'on pouvait mieux organiser, et ce qu'une salle mieux tenue fait gagner. Servio remplace le carnet papier et les allers-retours vers la caisse par un téléphone. Le but n'a pas changé depuis : se faciliter la tâche.

1:28
Contexte
Mon premier client : un restaurant bruxellois, dont je tiens toute l'informatique — réseau, imprimantes, caisse, commandes en ligne, site et application.
Rôle
Conception, développement, base de données, déploiement, support. Projet solo, avec assistance IA.
Année
2026
Équipe
Solo, avec assistance IA (revue de schéma, migrations)
Durée
8 mois de travail (OperaApp puis Servio)
Statut
En production dans un restaurant bruxellois depuis le 13 juin 2026 · publication App Store en cours
Outils
FlutterDartSupabasePostgreSQLRealtimeEdge FunctionsStripe ConnectESC/POSHiveSentryNext.js

Intention

Je viens de l'image : à la HEAJ, je fais de la 3D et des effets visuels. Servio est ce qui arrive quand cette curiosité tombe sur un vrai problème — j'ai appris Flutter, PostgreSQL et le protocole des imprimantes de restaurant parce qu'il fallait que ça tienne un service. Le film en haut de cette page vient de la même main que l'application : 88 secondes rendues image par image en Python, et une bande-son synthétisée sans un seul échantillon.

IA

L'IA est utilisée comme assistant de développement (revue de schéma, migrations, relecture). L'architecture, les choix et la responsabilité du code sont les miens.

Process

Étape 01

L'application

Le serveur saisit la commande sur son téléphone ; le ticket sort en cuisine dans la seconde.

  • Plan de salle

    Plan de salle

  • Prise de commande

    Prise de commande

  • Options et cuissons

    Options et cuissons

  • Historique du service

    Historique du service

  • Réservations

    Réservations

  • Réglages

    Réglages

  • Mode plein soleil

    Mode plein soleil

Étape 02

En production, pas en démonstration

Mesuré le 11 septembre 2026 sur la base de production, après trois mois de service continu.

Mesuré le 11/09/2026 · exploitation depuis le 13/06/2026Un restaurant à Bruxelles

Production réelle

3 234
tickets imprimés
cuisine · bar · caisse
1 771
commandes envoyées
4 859
articles commandés
88
services ouverts
midi et soir

Code (Flutter / Dart)

116 020
lignes de Dart
360 fichiers
185
fichiers de test
≈ 30 % du code
63
écrans
143
commits

Base de données (Supabase / PostgreSQL)

76
tables PostgreSQL
RLS activée sur 76 / 76
113
policies RLS
28
tables en temps réel
261
fonctions SQL

Étape 03

Sous le capot

Flutter pour iOS et Android, Supabase pour les données et le temps réel, impression ESC/POS sur le réseau du restaurant.

SERVIO — architectureFlutter · Supabase
APP FLUTTER / DARTiOS et Android, un seul code63 écrans · 185 fichiers de testcache local Hive (hors-ligne)file d'attente hors-ligneSUPABASEPOSTGRESQL76 tables · RLS 113 policies261 fonctions SQL · tenant_id partoutREALTIME28 tables synchroniséesAUTHrôles · permissions par personneEDGE FUNCTIONS (5)send-sms · stripe-webhook · stripe-workersend-outbound · delete-accountIMPRIMANTES ESC/POScuisine · bar · caisseTCP 9100 · DLE EOTbail atomique par ticketSTRIPE CONNECTcommande en ligne · charges directesSMS CLIENTSmodèles · envoi automatiqueSENTRYtélémétrie sans données persocommandes · synctickets (réseau local)

Étape 04

Ce que Servio ne fait pas

Pas de fonction fiscale : Servio complète une caisse certifiée, il ne la remplace pas. Aucun paiement ne transite par l'application. Aucune donnée n'est jamais supprimée. Ces trois limites sont volontaires — la prochaine étape est l'examen GKS pour devenir une caisse certifiée en Belgique.

Problèmes rencontrésSolutions

  1. 01 · Problèmes rencontrés

    Ne jamais créer de commande en double sur un WiFi instable : le serveur appuie deux fois, la cuisine reçoit deux fois le plat.

    Solutions

    Identifiant unique généré côté application, passé à la fonction SQL d'envoi avec ON CONFLICT DO NOTHING : un rejeu est sans effet.

  2. 02 · Problèmes rencontrés

    Un envoi TCP réussi ne prouve pas que le papier est sorti : hors papier, capot ouvert, imprimante éteinte.

    Solutions

    Interrogation du statut ESC/POS (DLE EOT) avant de marquer le ticket imprimé, et alerte sur tous les appareils si rien n'est confirmé. Piège corrigé en route : fermer le socket brutalement tronquait les tickets.

  3. 03 · Problèmes rencontrés

    Deux téléphones partageant un compte signaient tout sous la même identité : 718,50 € attribués au mauvais serveur pendant trois semaines, sans que rien ne le signale.

    Solutions

    Découplage de la personne et de l'appareil : code d'invitation nominatif, fusion de fiches journalisée et réversible, preuve de code personnel exigée côté base.

Sous-bois avec cabane en bois dans la brume

Projet suivant · 06

Forêt — temps réel

Vingt-trois secondes de sous-bois rendues en temps réel.