A list that cannot handle an empty shelf is not finished. Suggested swaps, parked items, and telling the person who asked.
The moment every list app gives up
You are in the shop with the household’s list. Rice, five kilos, the brand your daughter will actually eat. The shelf is empty. What does the list do?
In every app we tried, the answer was nothing. The item sits there. You can tick it, which is a lie, or leave it, which means the next person who opens the list does not know you looked. Either way the information that mattered, that the shelf was empty and someone needs to decide what to do, is lost the moment you walk away.
We came to think of this as the point where a shopping list stops being a list and starts being a tool. So we built the whole feature around it.
What happens instead
When you mark an item as out of stock in KinHolo, three things happen.
The item is carried forward, intact. It moves to the next list with its brand, its amount and its store still attached. Nobody has to remember what it was or re-type it. The stock-out is recorded against the store, so the household can see that this shop has been out of that rice twice this month.
The person who asked for it is told. Not the whole household, and not with an alarm. The list’s creator sees that the item was sold out and that a decision is waiting.
A sensible swap is offered. This is the part that took the longest to get right. The suggestion comes first from the household’s own buying history: the brand of rice you bought the last time this one was out, the size you usually take. Only if the household has no history for that item does the app fall back to a generic mapping. The swap is offered to the person who asked, to accept or answer in one tap, and nothing on the list changes until they do.
Why the person who asked decides
We tried letting the shopper decide. It seemed efficient. In testing it caused exactly the argument we were trying to avoid: the shopper picked a substitute, the person who asked did not want it, and both felt the other had been careless. Putting the decision with the person who wrote the item down, and making the swap a suggestion rather than a change, removed the friction almost entirely. The shopper still gets an answer quickly, often before they have left the aisle, because the request lands as a notification and takes one tap.
The parts that had to be boring
None of this works unless the ordinary list is excellent, so most of the work went there. Items have a name, a brand, a quantity with a unit, a store and notes. Lists are grouped by category, and the household keeps a staples list it can reuse without creating duplicates. Ticks appear on every phone in the household within moments, and the whole thing works offline, with changes merged deterministically when the shopper comes back into signal. Items can be added by voice or by scanning a barcode, and a meal plan can push its missing ingredients straight onto the list.
What we will not do with it
A household’s shopping history is a detailed picture of how it lives. We use it for one thing, suggesting a swap to that household, and for nothing else. It is keyed to the household in every query, it is never pooled across households, and there is no path in the product by which it could reach an advertiser or a retailer. A list that quietly sold your habits would not be sensible about an empty shelf. It would be sensible about something else entirely.
Want the next one?