hey.food

A grocery list with dietary context

Grocery ships in the Rust CLI. Reading a list is immediate. Every change comes back as a preview and waits for your confirmation.

heyfood grocery list

Make and confirm a change

heyfood grocery list --json

heyfood grocery add \
  --list-id LIST_UUID --version 7 \
  --intended-for "Maya" \
  "red lentils" "yellow onion" "garlic" \
  --json > proposal.json

heyfood grocery confirm \
  --decision accept \
  --proposal-stdin < proposal.json

Creating the preview never changes the list. The signed result returns through stdin, not a command argument, which keeps its confirmation token out of shell history and process listings.

Read, prepare, review, confirm

  1. 01

    Read

    Fetch the active list and its current list ID and version.

  2. 02

    Prepare

    Add, remove, and state commands return a signed preview. The list has not changed yet.

  3. 03

    Review

    Check the items, dietary concerns, intended household members, and suggested substitutions.

  4. 04

    Confirm

    Accept or cancel the preview. If the list or a household profile changed meanwhile, start again with fresh data.

Commands

heyfood grocery add --list-id UUID --version N ITEM...
heyfood grocery remove --list-id UUID --version N ITEM...
heyfood grocery state --list-id UUID --version N ITEM active
heyfood grocery export UUID --format markdown
heyfood grocery confirm --decision cancel --proposal-stdin < proposal.json

Remove accepts a stable item UUID or a fresh one-based index such as #2. Item state is active, purchased, or dismissed. Export formats are markdown, text, and json.

An ingredient is not a product label

hello.food can check a known ingredient against the household's dietary profiles and show who a concern affects. It cannot know the recipe, factory, cross-contact practices, or latest label for the product you eventually buy. Check the package before it goes in the cart.