Nous ne remplaçons ni votre boutique,
ni votre ERP, ni vos coursiers.
DITOCO est l'orchestrateur qui manque entre eux. Shopify encaisse, Odoo dit la vérité du stock, Onfleet roule. Nous décidons quel nœud sert quelle ligne, à quelle heure, et nous en gardons la trace — ligne par ligne, événement par événement.
- 14 ms
- service tarifaire, 95ᵉ centile mesuré au banc
- 6
- écrans codés — tout le reste est natif
- 0
- champ de statut : l'état se déduit du journal
Positionnement
Trois systèmes savent déjà faire leur métier. Aucun ne parle aux deux autres.
C'est le seul endroit où nous apportons quelque chose — et c'est le seul endroit où nous écrivons du code.
Shopify
Encaisse et déclencheLe checkout reste le sien. Nous répondons à son service tarifaire — un créneau, un tarif — et nous écoutons ses webhooks. Aucune extension d'interface : elles sont réservées à Shopify Plus, et un sélecteur maison serait une régression.
Odoo
Dit la vérité du stockUn entrepôt par nœud. Odoo maîtrise le physique, nous maîtrisons le réservé — jamais dans la même transaction. Le commerçant, lui, n'a aucun compte Odoo : il ne verra jamais ce mot.
Onfleet
Affecte et rouleNous posons une paire de tâches — retrait, remise — et nous écoutons. L'affectation, l'ETA, la preuve de livraison, le SMS à la cliente : natifs. Aucune ligne de code de tournée chez nous.
La ligne verte
La vie d'une unité, de l'annonce d'envoi jusqu'au retour.
C'est le seul parcours qui traverse tous les mondes : site de la marque, webhook, trottoir, écran opérateur, ERP, checkout. Il faut posséder toute la chaîne pour le faire tenir.
- 1
La marque annonce
la marqueRéférence, quantité, numéro de lot. C'est la seule porte d'entrée du lot dans tout le système : sans lui, plus rien n'est traçable en aval.
- 2
L'exploitation place
nousLe système suggère une répartition, un humain décide autre chose et dit pourquoi. Le couple suggestion / décision / motif est l'actif qui s'accumule.
- 3
La cliente choisit
la clienteOnze créneaux de deux heures, plus un « 2 h glissant ». Rien n'est réservé à l'affichage : le service tarifaire est en lecture seule.
- 4
Le paiement réserve
l'orchestrateurÀ orders/create, et là seulement : stock et minutes-coursier pris dans une seule transaction. Deux commandes sur la dernière unité ne peuvent pas gagner ensemble.
- 5
Le nœud prépare
l'opérateurAprès 90 secondes de latence — une annulation dans cette fenêtre n'a mobilisé personne. Deux scans : l'article, puis l'étiquette. Rien d'autre.
- 6
Le coursier livre
OnfleetOnfleet affecte, roule, prouve. La cliente suit sa commande aux couleurs de la marque, et nous n'apparaissons nulle part sur cet écran.
- 7
Le retour revient à pied
l'opérateurCinq minutes de marche jusqu'au nœud. Trois boutons pour l'opérateur, l'humain tranche, et l'unité conforme est de nouveau vendable dans l'heure.
Le périmètre
Six écrans codés. Tout le reste est natif.
Chaque acteur ne voit qu'un seul monde. La cliente ne voit que la marque, l'opérateur ne voit que sa file, le coursier ne voit qu'Onfleet. Personne n'a besoin de comprendre le système entier pour tenir son rôle — c'est ce qui rend un commerçant opérationnel en une heure.
Annoncer un envoi
la marqueUn formulaire, rien d'autre. Seule porte d'entrée du numéro de lot.
Décider un placement
l'exploitationVolontairement manuel. La trace vaut plus que la répartition.
La file du nœud
l'opérateurTriée par heure limite. Deux scans, et un bouton « indisponible ».
Le constat de retour
l'opérateurTrois boutons, un humain, aucun automatisme.
La chronologie
la marqueLecture seule du journal. Deux filtres : état, nœud. C'est tout.
Le stock, trois niveaux
la marqueAu hub, dans les nœuds, en transfert. La somme fait toujours le total.
Ce qui n'est pas là est délibéré : pas de checkout maison, pas de page de suivi, pas d'application coursier, pas de tableau de bord de résultats. Six surfaces, pas un produit SaaS complet.
Ce qui ne se négocie pas
Six règles qui décident de tout le reste.
Le journal fait foi
L'état d'une ligne n'est pas un champ qu'on écrit : c'est une projection de la suite de ses événements. Le journal est ajout seul — rien ne s'y réécrit, jamais.
Rien n'est réservé à l'affichage
Le service tarifaire est en lecture seule. La réservation attend le paiement. La contrepartie — une commande acceptée puis non servable — est mesurée, pas cachée.
La capacité se compte à l'heure
En minutes-coursier par heure, jamais par créneau. Un créneau de 14 h à 16 h consomme l'heure de 14 et celle de 15. C'est ce compteur qui empêche de vendre deux fois la même heure.
L'étiquette est la seule clé physique
Entre un sac sur une étagère et une ligne d'exécution, il n'y a qu'elle. Aucune ligne ne se clôture sans elle, et le coursier scanne le même objet que l'opérateur.
Panne et régulation ne se mélangent pas
Une panne est un dysfonctionnement : elle est seuillée, elle alerte. Une régulation est un fait d'exploitation : elle est observée. Les confondre, c'est cesser de lire les deux.
Les hypothèses restent des hypothèses
Cycle coursier, latence, marge de fin de créneau : toutes ces valeurs vivent en base avec leur drapeau. Un chiffre codé en dur devient une vérité que personne n'ose plus remettre en cause.
Sous le capot
Le journal est le livrable durable.
Il survit à l'orchestrateur qui l'a produit. Une ligne par événement, exportable en entier, sans passer par nous.
14:02 ligne_allouee noeud N1 · lot L2601 · stock_ville [N1 12, N2 4] 14:02 option_retenue creneau ditoco_creneau_14 · tarif 690 14:04 notification_noeud noeud N1 14:04 tournee paire_creee · retrait + remise liés 14:21 scan_preparation etiquette DIT-004512 · regle 15 min respectée 14:21 geste_remunerable preparation_aboutie 14:49 scan_enlevement coursier K. · physique et réservé baissent ensemble 15:37 remise preuve photo J+3 retour_declare remboursement Shopify · aucun mouvement de stock J+3 retour_constate conforme · réintégré au lot L2601
Next.js 16 · React 19
Server Components par défaut
PostgreSQL · Prisma
Réservation conditionnelle atomique
Europe/Paris
Tout horodatage ancré, serveur en UTC
Une unité, du hub au trottoir, et retour.
Les comptes de démonstration du banc sont ouverts : la marque, l'exploitation et les quatre nœuds.