Tendero
Inventory, sales and barcode scanning for a corner store. All from a phone.
A web app that replaces the shop's paper notebook: stock comes in, a sale goes out, and inventory reconciles at the end of the day without anyone counting shelves.
Arroz Diana 500 g
7702001120987
$3.200
18 en stock
Movimientos
- Venta-2
- Entrada+24
- Venta-1
- Ajuste-3
The problem
The shop tracked inventory in a notebook and prices in the owner's head. There was no way to know what was selling, or what had run out, until a shelf was empty. Whatever replaced it had to run on the cheap Android phones the staff already carried — nothing to install, nothing to learn.
Engineering decisions
Scanner in the browser, not a native app
Barcode decoding via WebAssembly against the phone's camera. Nothing to download from an app store, and it behaves the same on a low-end handset as on a new one.
Inventory can't silently drift
Every stock movement is a row in an append-only ledger. A product's quantity is a projection of that ledger, and a reconcile job verifies that SUM(delta) still equals the stored quantity across the whole catalog.
Notebook importer
The catalog that already existed on paper loads into the database in one pass, instead of asking the owner to type in a thousand products before the system is any use.
No API tier
Server Components read Postgres directly and Server Actions write. One less service to deploy, monitor and keep in sync — which matters when the maintenance team is one person.
Stack
Next project
PideBot
A WhatsApp bot that takes the order and collects payment for the restaurant, 24/7.