Étude de cas
Keforo App
Le bureau des commandes des équipes e-commerce au MENA : commandes, stock, clients et une Google Sheet qui reste synchronisée.
- Rôle
- Fondateur, ingénieur full-stack
- Année
- 2024
- Stack
- Next.js · Hono · Bun · MongoDB · Redis
Le défi
Ici, les boutiques tournent sur une Google Sheet avant tout le reste. Le bureau des commandes devait lire cette feuille, faire bouger le stock et le statut ensemble, et ne laisser personne faire plus que ce qu’il a le droit de faire.
En chiffres
- 386Routes, chacune déclarée comme une donnée : méthode, chemin, scopes et schéma.
- 68Scopes répartis dans 18 modules, réglés par personne.
- 585Tests backend, contre MongoDB et Redis.
- 7Transitions de commande, un endpoint chacune.
Ce qu’il fait tourner
Un seul tableau pour toutes les commandes.
Un seul tableau pour toutes les commandes, avec un cycle de vie strict, des lignes qu’on peut annuler ou marquer en rupture une par une, des retours partiels qui remettent en stock, et un journal d’activité de 18 types d’entrée.
Le stock vit dans deux compartiments, disponible et engagé. Chaque changement écrit un mouvement de stock qui renvoie à la commande, à l’import ou au retour qui l’a causé.
En arabe, en français et en anglais, avec une vraie mise en page de droite à gauche.
Le cycle de vie
Une commande est une machine à états
Chaque changement de statut passe par un seul service. Il vérifie le mouvement dans une table, applique son effet sur le stock, écrit le nouveau statut et ajoute une ligne au journal, le tout dans une seule transaction MongoDB. Si une partie échoue, rien n’a eu lieu.
En direct
Essayez les transitions
Choisissez un jeton, puis appuyez sur un endpoint. La route refuse un scope manquant avant que le handler ne tourne, le service refuse un mouvement absent de la table, et un mouvement légal change le statut, déplace le stock et écrit le journal.
En direct
Google Sheets
Une feuille, une exécution
Étape 1 sur 6
File
Un job par feuille, lancé par le cron ou par le bouton Synchroniser. Le worker traite un job à la fois, volontairement.
Étape 2 sur 6
Version
Un appel Drive compare la version de la feuille à celle de la dernière exécution. Une feuille inchangée est sautée à cet instant.
Étape 3 sur 6
Mapping
Chaque en-tête mappé doit être encore là. Si l’un a disparu, la feuille est mise en pause et son propriétaire reçoit un e-mail ; rien n’est deviné à l’exécution.
Étape 4 sur 6
Lecture
Les lignes sont lues par pages de 5 000, sous une limite de soixante appels par minute et par organisation.
Étape 5 sur 6
Import
Chaque ligne passe par le même processeur qu’un envoi CSV. Une commande emballée ou plus avancée n’est jamais touchée par une feuille.
Étape 6 sur 6
Compte rendu
L’exécution écrit ses compteurs et un échantillon d’erreurs, et la salle de l’organisation l’apprend en WebSocket. Une exécution se termine toujours ; aucune ne reste « en cours ».
Rejeu
Une synchronisation, rejouée
Le connecteur traite la feuille comme la source et l’application comme le miroir : chaque exécution lit la feuille, et rien n’y est réécrit.
Replay
Connexion
Trois façons de se connecter
Google examine toute application qui demande l’accès à Drive, et l’examen prend du temps. Le connecteur a donc trois portes, et deux d’entre elles n’ont besoin d’aucun examen.
L’assistant
L’assistant ne fait que ce que vous avez le droit de faire
Le chat de la barre latérale est un orchestrateur qui ne possède aucune connaissance métier et un seul outil : delegate. Il confie une sous-tâche à l’un de cinq spécialistes, en parallèle quand une question couvre plusieurs domaines.
La première ligne de chaque outil est une vérification de scope. Les scopes viennent du jeton de l’appelant ; un modèle qui affirme « l’utilisateur est administrateur » ne change rien.
Les écritures attendent une personne. Annuler une commande ou changer un prix crée une action en attente que la personne confirme dans le chat, et le scope est vérifié de nouveau à la confirmation.
Permissions
Chaque outil vérifie l’appelant
Onze outils, chacun déclarant le scope dont il a besoin. Un spécialiste dont les outils exigent des scopes que l’appelant n’a pas est retiré du prompt de l’orchestrateur : le modèle ne peut même pas essayer.
Construit avec
- Bun
- Hono
- MongoDB
- Redis
- BullMQ
- WebSocket
- Next.js
- TanStack
- OpenRouter
- Google Sheets
- Google Drive
Où il en est
En ligne sur app.keforo.com
Commandes, stock, scopes d’équipe, assistant et facturation par virement tournent aujourd’hui, avec Google Sheets comme premier connecteur. À venir : les connecteurs de boutiques, l’écriture vers la feuille, la détection de changement par ligne et le paiement par carte.
Lire comment ça marche- Modèles, chacun portant son organisation.
- 50
- Workers en arrière-plan : synchronisation des feuilles, cron des feuilles, imports et facturation.
- 4