Add a product
Name, SKU, starting quantity and a low-stock level. The opening count becomes the first line of its history.
addProduct("Oat Milk 1L", "OAT-1L", 30, 12)
■ a tiny inventory log · built on BOT Chain
Every restock, sale or correction is stamped on BOT Chain, so your stock history can't be quietly edited.
■ the problem
A stock count in a spreadsheet is only as honest as the last person who edited it.
No sign-up, no backend, no database. Your wallet is your stockroom, and BOT Chain keeps the receipts.
Name, SKU, starting quantity and a low-stock level. The opening count becomes the first line of its history.
addProduct("Oat Milk 1L", "OAT-1L", 30, 12)
Tap + or −, pick a reason, confirm in MetaMask. The quantity updates and the change is logged with its block time.
+12 RESTOCK · qty 30 → 42 · tx ↗
Send your public link. Anyone can open a read-only view of your stockroom and its history — no wallet needed.
?shop=0xABC…
Twelve seconds, start to finish: tap +, set the amount, confirm, and the history has a new line.
■ try it here
This is the whole idea in one box. Each tap adds a line and nothing ever leaves. In the real app the same tap is a BOT Chain transaction you confirm in MetaMask.
ready ░░░░░
Everything a shelf needs and nothing it doesn't. Four things it does well.
Set an alert level per product. When the quantity reaches it, the row turns magenta and the dashboard counts it.
Your wallet address is your shop's address. Send the link to a partner, a supplier or a judge. They see the stock and its history, and can't change a thing.
Four reasons cover a small shop's week. Each one is stored with the change, so the history reads like a story.
One page and one contract. No server to keep alive, no database to back up, no account to forget the password for.
If you can count it and you'd like the count to be believed, it fits.
■ under the hood
The contract is about eighty lines. It keeps a list of products per wallet and a list of changes per product, and it only ever adds to them.
struct Change { int32 delta; // +12 or −3 uint32 qtyAfter; // 42 uint8 reason; // 0 Restock … 3 Correction uint64 at; // block time } function adjustStock(id, delta, reason) { // your own product only if (qty + delta < 0) revert BelowZero(); history[msg.sender][id].push(…); // there is no pop, no edit, no delete }
A spreadsheet can be changed after the fact and nobody would know. Here every restock, sale or correction is a BOT Chain transaction with its own timestamp, so the history only grows. A mistake is fixed by adding a correction, not by rewriting the past.
Everyone. Data on BOT Chain is public, and anyone with your wallet address can open your read-only stockroom. Use demo products or things you're happy to show, and keep personal details out of product names.
Only the wallet that owns the stockroom. The contract writes to the sender's own list, so there is no way to touch someone else's products.
No. Add a new change with the reason "Correction" instead. Both lines stay in the history.
The app is free and takes no payments. Each change is one transaction, so you pay the BOT Chain network fee in BOT. Viewing is free.