v0.23.0-beta
Summary
Grocery prices. A Store can now point at a real shop, and Norish shows what the things on your list cost there — as many packs as each line needs, what is sold loose priced by weight, and the shop's deals as the shop presents them — reading the shop's own pages, with no AI provider involved and nothing to pay for.
Features
What your groceries cost
Point a Store at a shop by pasting a link you already have — its homepage, or a
search you just ran there — and Norish works out how to search it. You never
write a template, and the guess is shown to you rather than assumed: the
Search Address appears under the field with {query} marking where a term
goes, and the field stays yours to correct.
- A priced grocery shows its Shelf Price on the row with the shop's own
words for the pack —
€2.99 · 150 gram— and which of the shop's products that price is for. - Adding a grocery never waits on a shop. A name your Store already knows is priced in the same breath; a name it does not goes to a queue, and the price appears the moment it lands — on your housemates' screens too.
- Norish links a grocery to a product by itself only where you would not hesitate. Anything less certain is left to you.
- Which product a grocery is, is a field of the grocery's own panel: it reads what the grocery is linked to now, searches the shop as you type, and drops down what came back with the price beside each one. Your choice is written when you press Save.
- A shop Norish cannot read is not a dead end: the field offers to take a price by hand, and nothing Norish reads will ever overwrite one you typed.
- Prices refresh themselves when they are more than twelve hours old and you are looking at the list.
- Every row carries a Line Cost: as many whole packs as its amount needs
at the Shelf Price —
€5.98 · 2 × 500 gram— with a bare number read as a number of packs, or as pieces when the shop counts the pack in pieces, so "12 eggs" against a box of ten is two boxes. What a shop sells loose is priced by weight, so 700 g of bananas priced per kilo costs seven tenths of it. A line Norish cannot work out still shows a price, with a quiet note that it counted one pack. - The Pack Size Norish read — what one Shelf Price buys — sits under the product in the grocery's panel, and can be corrected there. A Pack Size you set is the last word and no reading overwrites it.
- A Store's heading adds up what is still to buy there: the Line Costs of the rows under it, in the shop's own currency. A row the Store cannot price is left out rather than guessed at. The grouped list prices a group as one purchase from its recipes' amounts added together.
- While the shop is being asked about a name, the row shows a loader where the price will go — on your housemates' screens too — so waiting never looks like failure.
- A Sale is shown as the shop presents it: the regular price struck through beside the Line Cost, a badge, and the shop's own words for the deal after the product name. A deal the shop keeps as words over its regular price, such as "2 voor €5.50", is shown in those words and never worked into the number.
For self-hosting operators: no AI provider is needed and no new environment variables were added. Shop pages are read with a fixed ladder over the structured data shops already publish for search engines, plus a pass over the product cards for the prices. Store visits run on one always-on queue, one visit at a time and paced, and there is no scheduled sweep — Norish never visits a supermarket for a list nobody is shopping.
Fixes and Improvements
-
Grocery prices show the total and amount × price; a Sale reads like a shelf tag, the regular total struck through and the new one beside it with the shop's own words for the deal on hover, and the product name has its own line. The grocery panel links to the product's own page at the shop, and a Store is added or edited in a panel of its own over the store list, like every other editor. The grocery panel lets you adjust the amount to buy without changing the recipe requirement, keeps the recurrence control under the name, and opens the product's details in a panel of their own; a price or currency that is not one is said so before you save, and a product you correct by hand keeps its Sale and its pack. Counts now price correctly even when the shop has no pack-size information.
-
The image-generation queue appears in the job pipeline view The admin job monitor's declared step sequence never listed it, so its jobs rendered without their steps.
Upgrade notes
- Two new tables (
store_products,store_product_links) and two new columns onstoresare added by migration;store_productsfurther gains the Pack Size and Sale columns, andtried_atonstore_product_linksbecomes nullable.groceriesgains a nullablepurchase_amountcolumn (migration 0049). No environment variables changed.
Contributors
Thanks to everyone who reported, tested and contributed to this release.