Une application pour le garde-manger d'une famille ou d'une colocation : on scanne le code-barres, on choisit la date d'un geste, et garde-manger et liste de courses sont les mêmes sur tous les téléphones, même hors ligne. Ce qui est fini s'ajoute seul à la liste, et un rappel de ce qui périme arrive la veille.
**Dispensa** (« garde-manger » en italien) est l'application qu'un foyer utilise pour savoir ce qu'il a, ce qui périme et ce qui manque. Chacun l'ouvre sur son téléphone ou son ordinateur, dans le navigateur ; sur l'iPhone, elle se place sur l'écran d'accueil et fonctionne comme une application. C'est un projet personnel pour les foyers que j'invite, et d'ici on l'essaie sans compte dans une maison fictive, Casa Ginestra, au garde-manger déjà plein.
**Ce qu'elle fait**
- **Le code-barres avec l'appareil photo.** Dans le navigateur, c'est l'API BarcodeDetector qui le lit quand elle existe, sinon ZXing-C++ compilé en WebAssembly, la voie de Safari sur l'iPhone. Si le code ne se lit pas, on saisit le produit à la main, avec les suggestions de la maison et du catalogue. - **Nom et photo depuis Open Food Facts**, la base de données libre des produits alimentaires, avec l'attribution que demande sa licence. - **La date en un geste**, avec les jours suggérés pour chaque produit et la différence entre « à consommer jusqu'au » et « à consommer de préférence avant ». - **La liste de courses partagée**, en temps réel et même sans réseau au supermarché. Ce qui est fini s'y ajoute tout seul. - **Le rappel de la veille**, une notification push à l'heure que choisit le foyer ; sur l'iPhone, elle arrive avec Dispensa sur l'écran d'accueil. - **La maison sur invitation** : qui la gère donne un code valable 48 heures et une seule fois, et sans invitation, pas d'inscription.
**Le plus difficile : deux téléphones sans réseau.** Si deux personnes mangent le dernier yaourt hors ligne, le garde-manger ne doit rien perdre. Les quantités ne s'écrasent pas : chaque geste est un mouvement, et les mouvements s'additionnent dans l'ordre où ils arrivent au serveur. Le reste fusionne selon des règles écrites une fois, identiques sur le téléphone et le serveur ; le seul choix demandé aux gens porte sur deux dates différentes pour un même emballage.
**L'autre : les limites d'Open Food Facts.** Les téléphones ne l'appellent jamais : ils interrogent le serveur, qui garde un cache commun à tous les foyers, lit au plus 12 produits par minute avec une file d'attente, et laisse entre-temps enregistrer le produit, qui reçoit son nom dès que possible.
**Ce qui manque.** L'application Android, avec Capacitor et le scanner de Google, est dans le code mais pas encore distribuée. « Cosa cucino? » (qu'est-ce que je cuisine ?) associe sur le téléphone, même hors ligne, des recettes à ce qui va périmer, mais le livre de recettes, que j'écris depuis le panneau d'administration, est encore vide.
Vue 3 et TypeScript, Fastify et PostgreSQL, dans Docker sur mon serveur : l'application et la base de données restent sous 250 Mo de mémoire et en utilisent environ 120 au repos. Chaque modification passe par 336 tests automatiques.
Conception, développement full-stack et mise en ligne · 2026
Vue.js, Fastify, PostgreSQL, IndexedDB