Dispensa: las caducidades de casa, el código de barras y la lista de la compra compartida, incluso sin conexión

Aplicación para la despensa de una familia o un piso compartido: se escanea el código de barras, la fecha de caducidad se elige con un toque, y despensa y lista de la compra son las mismas en todos los móviles, incluso sin conexión. Lo que se acaba entra solo en la lista, y la noche antes llega el aviso de lo que caduca.

**Dispensa** («despensa» en italiano) es la aplicación que usa una casa para saber qué tiene, qué caduca y qué falta. Cada uno la abre en su móvil o en el ordenador, en el navegador; en el iPhone se pone en la pantalla de inicio y funciona como una app. Es un proyecto personal para las casas que invito, y desde aquí se prueba sin cuenta en una casa inventada, Casa Ginestra, con la despensa ya llena.

**Qué hace**

- **El código de barras con la cámara.** En el navegador lo lee la API BarcodeDetector donde existe y, si no, ZXing-C++ compilado en WebAssembly, que es el camino de Safari en el iPhone. Si el código no se lee, el producto se escribe a mano, con las sugerencias de la casa y del catálogo. - **Nombre y foto de Open Food Facts**, la base de datos libre de productos alimentarios, con la atribución que pide su licencia. - **La caducidad con un toque**, con los días sugeridos para cada producto y la diferencia entre «fecha de caducidad» y «consumir preferentemente antes de». - **La lista de la compra compartida**, en tiempo real e incluso sin cobertura en el supermercado. Lo que se acaba entra solo. - **El aviso de la noche antes**, una notificación push a la hora que elige la casa; en el iPhone llega con Dispensa en la pantalla de inicio. - **La casa por invitación**: quien la gestiona da un código que vale 48 horas y una sola vez, y sin invitación no hay registro.

**Lo difícil: dos móviles sin conexión.** Si dos personas se comen el último yogur sin conexión, la despensa no debe perder nada. Las cantidades no se sobrescriben: cada gesto es un movimiento, y los movimientos se suman en cualquier orden en que lleguen al servidor. Lo demás se fusiona con reglas escritas una vez, iguales en el móvil y en el servidor; la única elección que la app pide a las personas es entre dos fechas de caducidad distintas para el mismo envase.

**Lo otro: los límites de Open Food Facts.** Los móviles nunca lo llaman: preguntan al servidor, que guarda una caché común a todas las casas, lee como mucho 12 productos por minuto con una cola, y mientras tanto deja guardar el producto, que recibe su nombre en cuanto se puede.

**Lo que falta.** La app de Android, con Capacitor y el escáner de Google, está en el código pero aún no se distribuye. «Cosa cucino?» (¿qué cocino?) empareja en el móvil, incluso sin conexión, las recetas con lo que está por caducar, pero el recetario, que escribo desde el panel de administración, todavía está vacío.

Vue 3 y TypeScript, Fastify y PostgreSQL, en Docker en mi servidor: la app y la base de datos se quedan por debajo de 250 MB de memoria y en reposo usan unos 120. Cada cambio pasa por 336 pruebas automáticas.

Diseño, desarrollo full-stack y publicación · 2026

Vue.js, Fastify, PostgreSQL, IndexedDB

Ver el sitio

Andrea Coppetta