MotoStock
Gestion de stock de pièces moto qui fonctionne intégralement hors ligne. Deux appareils se synchronisent sans jamais produire de conflit — grâce à un journal d'événements immuables plutôt qu'à des valeurs écrasables.
MotoStock équipe une boutique de pièces moto qui vend depuis deux appareils à la fois (un téléphone au comptoir, un ordinateur en réserve) là où le réseau coupe en permanence. L'enjeu : garder un stock juste sans jamais rien perdre ni écraser, même quand deux appareils travaillent hors ligne en même temps.
L'application ne stocke pas des valeurs, mais des faits. Elle n'écrit jamais « stock = 25 » : elle enregistre « sortie de 3 unités » dans un journal d'événements immuables, et recalcule le stock à partir de ce journal. Synchroniser deux appareils revient alors à faire l'union de leurs deux journaux — une opération qui, par construction, ne peut mathématiquement rien perdre. Il n'existe donc nulle part dans le code la moindre ligne de résolution de conflit.
Côté technique, le frontend est une PWA (Vite + React + SQLite compilé en WebAssembly et stocké dans OPFS) qui tourne à 100 % hors ligne ; le backend est un hub de synchronisation Laravel sur VPS qui ne fait qu'échanger des journaux. Le tout vit dans un monorepo, parce que le format d'événement est un contrat partagé entre les deux moitiés : un dépôt unique force le front et le hub à évoluer dans le même commit.