Skip to content

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 BarcodeDetector with 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