Features¶
A guided tour of what Homestead can do. Each page links to the code so you can see exactly what's happening behind the screenshot.
-
Storage — pantry, fridge, freezer, custom locations. Expiry warnings. "Used N" decrement + freeform amount. Scan-to-add kiosk for bulk unloading.
-
Grocery list — freeform shopping items OR linked to tracked products. Bring! two-way sync. Mark-purchased-by-barcode at the till.
-
Barcode scanning — native
BarcodeDetectorwith ZXing fallback. Lookup falls back to Open Food Facts / Open Products Facts / Marktguru. Attach EANs to existing products by scanning. -
Receipt OCR — upload JPEG/PNG/HEIC/PDF, Tesseract + heuristic parser extracts store, date, total and line items. Per-line confirmation UI with editable amount.
-
Recipes & meal plan — Chefkoch URL import, "used" button per ingredient decrements storage, "add missing to grocery list" bulk action. Weekly meal-plan suggester with soft DGE health guidelines and 4-week cooldown.
-
Offers — daily sync from Marktguru, kaufDA, MeinProspekt, Flaschenpost. Per-household allow-list, keyword-based categorisation, watchlist.
-
Todos — shared task list with three states, member assignment, follow, comments, an in-app notification bell and PWA Web Push.
-
Calendar — server-rendered month/agenda/day views, todo due-date projection, and German date-detection that suggests events from comments.
-
Calendar sync — two-way Google Calendar sync, one connection per instance, set up through the UI with your own OAuth client.
-
Inbound email — IMAP poller pulls receipt attachments from configured mailboxes. Trigger on-demand via
POST /api/v1/inbound_emails/poll.
How the pieces fit together¶
graph TB
subgraph Inputs
photo[Receipt photo / PDF]
imap[Inbound email]
barcode[Barcode scan]
manual[Manual entry]
chefkoch[Chefkoch URL]
end
subgraph Processing
ocr[Tesseract OCR + parser]
lookup[Barcode lookup: local + OpenFoodFacts + Marktguru]
importer[Recipe importer]
end
subgraph Storage["Homestead's catalog"]
products[(Products)]
stores[(Stores)]
prices[(Prices)]
synonyms[(Synonyms)]
storage_items[(Storage items)]
grocery[(Grocery list)]
recipes[(Recipes)]
end
subgraph Sync
bring[Bring! 2-way sync]
offers[Daily offer feed]
end
photo --> ocr --> products & stores & prices
imap --> ocr
barcode --> lookup --> products
manual --> products & storage_items & grocery
chefkoch --> importer --> recipes
products -.->|name match + synonyms| ocr
recipes -->|use ingredient| storage_items
grocery <-->|2-way| bring
offers -->|matches by product_id| grocery