App per la dispensa di una famiglia o di una casa condivisa: si scansiona il codice a barre, la scadenza si sceglie con un tocco, e dispensa e lista della spesa sono le stesse sui telefoni di tutti, anche senza rete. Quello che finisce entra in lista da solo, e la sera prima arriva il promemoria di cosa scade.
**Dispensa** è l'app che una casa usa per sapere cosa ha, cosa scade e cosa manca. Ognuno la apre sul suo telefono o sul computer, nel browser; sull'iPhone si mette nella schermata Home e funziona come un'app. È un progetto personale per le case che invito, e chi arriva da qui la prova senza account in una casa inventata, Casa Ginestra, con la dispensa già piena.
**Che cosa fa**
- **Il codice a barre con la fotocamera.** Nel browser lo legge l'API BarcodeDetector dove c'è, altrimenti ZXing-C++ compilato in WebAssembly, che è la strada di Safari sull'iPhone. Se il codice non si legge, il prodotto si scrive a mano, con i suggerimenti della casa e del catalogo. - **Nome e foto da Open Food Facts**, la banca dati libera dei prodotti alimentari, con l'attribuzione che chiede la sua licenza. - **La scadenza in un tocco**, con i giorni suggeriti per ogni prodotto e la differenza fra «da consumare entro» e «da consumarsi preferibilmente entro». - **La lista della spesa condivisa**, in tempo reale e anche senza campo al supermercato. Quello che finisce ci entra da solo. - **Il promemoria della sera prima**, una notifica push all'ora che sceglie la casa; sull'iPhone arriva con Dispensa nella schermata Home. - **La casa su invito**: chi la gestisce dà un codice che vale 48 ore e una volta sola, e senza un invito non ci si iscrive.
**La parte difficile: due telefoni senza rete.** Se due persone mangiano l'ultimo yogurt mentre sono offline, la dispensa non deve perdere niente. Le quantità non si sovrascrivono: ogni gesto è un movimento, e i movimenti si sommano in qualunque ordine arrivino al server. Il resto si fonde con regole scritte una volta, uguali sul telefono e sul server; l'unica scelta che l'app chiede alle persone è fra due date di scadenza diverse per la stessa confezione.
**L'altra: i limiti di Open Food Facts.** I telefoni non lo chiamano mai: chiedono al server, che tiene una cache comune a tutte le case, legge al massimo 12 prodotti al minuto con una coda, e intanto lascia salvare il prodotto, che riceve il nome appena possibile.
**Quello che manca.** L'app per Android, con Capacitor e lo scanner di Google, è nel codice ma non è ancora distribuita. «Cosa cucino?» abbina sul telefono, anche senza rete, le ricette a quello che sta per scadere, ma il ricettario, che scrivo dal pannello, è ancora vuoto.
Vue 3 e TypeScript, Fastify e PostgreSQL, in Docker sul mio server: l'app e il database stanno sotto i 250 MB di memoria, e a riposo ne usano circa 120. Ogni modifica passa da 336 prove automatiche.
Progettazione, sviluppo full-stack e pubblicazione · 2026
Vue.js, Fastify, PostgreSQL, IndexedDB