GELATO STOCK.
Inventory control built for gelato and ice cream shops: a real multi-tenant web app, still shipping its first version.
Why it exists.
Before software, I spent a stretch of years in Germany working jobs that had nothing to do with code. Selling gelato was one of them: restocking flavors, noticing what ran out first before a weekend rush, figuring out what to reorder, all of it done by memory and paper, the way most small shops still run today.
Gelato Stock is an attempt to fix that exact problem. It's a proper inventory system for gelato and ice cream shops: what's in stock, what's about to run out, and a clean, auditable record of every delivery that comes through the door. Built to replace the notebook, not add another app on top of it.
It's built as a real product, not a prototype: a multi-tenant Next.js application with a PostgreSQL database, transactional stock movements that never go negative, and a permission system that separates what an owner can do from what staff on the floor can do.
Engineering choices
Stock updates are transactional so a movement cannot leave a negative balance. Owner and staff permissions separate administrative work from day-to-day operations. The next step is connecting recipes to stock movements; recipe registration currently remains a catalog operation.
The stock, at a glance.
RECREATED FROM THE LIVE APP, SAMPLE DATA
What v1 does.
- 01Dashboard with live stock metrics and automatic reorder alerts
- 02Product catalog with a minimum-stock threshold per item
- 03Manual stock entries and exits: transactional, never negative
- 04Purchase list generated automatically from low-stock items
- 05Two-step receiving: draft a delivery, then confirm it into stock
- 06Private photo/PDF vault for delivery notes, tied to each receipt
- 07Full audit history of every movement, filterable and paginated
- 08Role-based team access: Owner, Manager, Operator, Viewer
- 09Per-shop settings: locale, timezone, reorder threshold
- 10A weather widget on the home screen, a hint at demand before it hits
- 11Recipe cards: catalog each flavor's ingredients and quantities against the stock
Under the hood.
- 01Next.js App Router + TypeScript
- 02PostgreSQL with Prisma ORM, fixed-precision decimals
- 03Zod validation at every input boundary
- 04Role-based auth and permissions
- 05Multi-tenant: one isolated workspace per shop
- 06Deployed on Vercel, database on Neon
Always shipping the next version.
Recipe cards already exist: each flavor gets a name, a yield, and a list of ingredients pulled straight from the stock, no duplicate products and no separate spreadsheet. But as the app itself says on that screen today: registering a recipe doesn't move the stock yet. It's a catalog, not an engine.
Two things turn it into one. An AI reading layer for delivery notes: instead of retyping every item from a supplier's paper note, a photo of it is read automatically and turned into stock entries. And recipes that actually drive the stock: define what's being produced today, and the system checks it against the recipes and the current stock, then deducts everything it used, on its own.
Here's a projection of that screen, built in the app's own visual language. Not live yet, but exactly how it will look.
✓ Ingredientes disponíveis: estoque será descontado automaticamente.
PROJECTION IN THE APP'S REAL VISUAL LANGUAGE, NOT YET BUILT
Gelato Stock is still on its first version, and it already replaces the notebook-and-memory system most small shops run on. The next steps carry it from record-keeping into real automation: reading a delivery note instead of retyping it, and letting a day's production plan settle the stock count on its own. Same instinct that started it: noticing something in a real shop that was harder than it needed to be, and building the fix.