Aplicação para a despensa de uma família ou de uma casa partilhada: digitaliza-se o código de barras, o prazo escolhe-se com um toque, e despensa e lista de compras são as mesmas nos telemóveis de todos, mesmo sem rede. O que acaba entra sozinho na lista, e na véspera chega o lembrete do que expira.
A **Dispensa** («despensa» em italiano) é a aplicação que uma casa usa para saber o que tem, o que expira e o que falta. Cada pessoa abre-a no telemóvel ou no computador, no navegador; no iPhone põe-se no ecrã principal e funciona como uma aplicação. É um projeto pessoal para as casas que convido, e daqui experimenta-se sem conta numa casa inventada, a Casa Ginestra, com a despensa já cheia.
**O que faz**
- **O código de barras com a câmara.** No navegador lê-o a API BarcodeDetector onde existe e, se não, o ZXing-C++ compilado em WebAssembly, que é o caminho do Safari no iPhone. Se o código não se lê, o produto escreve-se à mão, com as sugestões da casa e do catálogo. - **Nome e fotografia do Open Food Facts**, a base de dados livre de produtos alimentares, com a atribuição que a sua licença pede. - **O prazo com um toque**, com os dias sugeridos para cada produto e a diferença entre «consumir até» e «consumir de preferência antes de». - **A lista de compras partilhada**, em tempo real e mesmo sem rede no supermercado. O que acaba entra sozinho. - **O lembrete da véspera**, uma notificação push à hora que a casa escolhe; no iPhone chega com a Dispensa no ecrã principal. - **A casa por convite**: quem a gere dá um código que vale 48 horas e uma só vez, e sem convite não há registo.
**A parte difícil: dois telemóveis sem rede.** Se duas pessoas comerem o último iogurte sem rede, a despensa não pode perder nada. As quantidades não se sobrepõem: cada gesto é um movimento, e os movimentos somam-se seja qual for a ordem em que chegam ao servidor. O resto funde-se com regras escritas uma vez, iguais no telemóvel e no servidor; a única escolha que a aplicação pede às pessoas é entre duas datas diferentes para a mesma embalagem.
**A outra: os limites do Open Food Facts.** Os telemóveis nunca o chamam: perguntam ao servidor, que guarda uma cache comum a todas as casas, lê no máximo 12 produtos por minuto com uma fila, e entretanto deixa guardar o produto, que recebe o nome logo que possível.
**O que falta.** A aplicação Android, com o Capacitor e o leitor da Google, está no código mas ainda não é distribuída. «Cosa cucino?» (o que cozinho?) associa no telemóvel, mesmo sem rede, as receitas ao que está a expirar, mas o livro de receitas, que escrevo a partir do painel de administração, ainda está vazio.
Vue 3 e TypeScript, Fastify e PostgreSQL, em Docker no meu servidor: a aplicação e a base de dados ficam abaixo dos 250 MB de memória e em repouso usam cerca de 120. Cada alteração passa por 336 testes automáticos.
Conceção, desenvolvimento full-stack e publicação · 2026
Vue.js, Fastify, PostgreSQL, IndexedDB