L'app tablette
Le client choisit un montant et paie sur place. L'app a été reprise, fiabilisée et testée, sans changer la façon dont l'équipe s'en sert.
Une app tablette reprise, puis une plateforme construite autour pour que le pourboire arrive jusqu'à l'équipe.
Voir le site Onetip →



Il y avait déjà une app tablette, posée sur le comptoir pour recevoir les pourboires. Je l'ai reprise telle qu'elle était, avec son code et ses habitudes.
Autour de la tablette, une série d'outils branchés sur le même serveur. Chacun sert une personne précise.
Le client choisit un montant et paie sur place. L'app a été reprise, fiabilisée et testée, sans changer la façon dont l'équipe s'en sert.
Chaque membre de l'équipe suit les pourboires reçus, partage son QR code, renseigne son compte bancaire et se fait verser son dû. Elle existe sur iOS et Android.
Le client approche son téléphone d'un tag, choisit la personne à remercier et paie, sans rien installer. Il peut aussi laisser un avis Google juste après.
Gestion de l'équipe, des tablettes et des tags, suivi des pourboires et réglages de l'établissement.
Comptes, établissements, abonnements, commissions et suivi des paiements, pour piloter la plateforme au quotidien.
Une seule API pour les tablettes, les apps mobiles, la page NFC et les deux back-offices. C'est elle qui parle à Stripe et qui répartit les versements.
Le parcours d'un pourboire, du client jusqu'à l'équipe.
Une plateforme où passe de l'argent ne pardonne pas les erreurs de calcul ni les doublons. Voici cinq problèmes réels, avec leur cause et ce qui a été fait.
Pendant les premiers jours du mois, certains comptes étaient débités de plus que prévu.
Le calcul du mois d'abonnement se trompait de période et comptait certains paiements plusieurs fois. J'ai écrit les tests qui figent le comportement attendu, corrigé le calcul sur le fuseau de Paris, puis vérifié sur un vrai compte en production.
En ajoutant quelqu'un à l'équipe, un double appui sur le bouton créait deux fiches.
Une transaction ne suffit pas ici, car le SDK client ne sait pas lire une requête en transaction. Chaque fiche a désormais un identifiant calculé à partir de la personne et de l'établissement, et l'ajout se fait en une seule écriture groupée.
Après l'un de mes correctifs, la tablette démarrait sans demander l'accès dont elle a besoin pour encaisser.
Ma règle attendait que l'app soit au premier plan, mais Android ne l'indique pas encore au démarrage. La caisse restait muette. Je l'ai vu et corrigé le jour même, en retirant cette condition.
Sur iPhone, ouvrir le sélecteur de photo bloquait l'écran.
L'app ouvrait le sélecteur pendant qu'une fenêtre était encore en train de se fermer, et iOS refuse cette superposition. L'action attend désormais que la fenêtre soit fermée. Android n'était pas concerné.
Après la validation chez la banque, la page restait ouverte ou affichait une erreur de route.
La bibliothèque de paiement ne recevait jamais l'adresse de retour sur iOS. J'ai branché l'écoute de ce lien moi-même et fait en sorte que l'app l'absorbe sans changer d'écran. Le parcours est validé sur iOS et Android.
React Native avec Expo pour les apps tablette et mobile, Next.js pour les deux back-offices et la page de paiement NFC, Firebase pour la base, l'authentification et les fonctions serveur en Node et TypeScript, Stripe et Stripe Connect pour les paiements et les versements. Les règles d'argent du serveur sont couvertes par des tests automatisés.