hey.food

Watch a menu, not a webpage

Menu Watch checks a restaurant's menu on a schedule. It compares menu items and prices, not raw webpage code, so a redesigned website does not look like a new menu. New font, same croissant.

heyfood ask "Show me this week's menu at Abby Jane Bakeshop in Dripping Springs, Texas"

The Abby Jane example

Abby Jane Bakeshop inspired the feature: a rotating bakery menu in Dripping Springs, Texas should not require someone to remember to check every Thursday. During testing, the main website did not expose the menu cleanly. hello.food followed the restaurant's links to its Toast ordering page and preserved the current menu's complete item, section, and price data.

heyfood --json ask "Show me this week's menu at Abby Jane Bakeshop in Dripping Springs, Texas"

heyfood watch add 0c1cb790-9203-4530-894e-3d6f1ac565f8 \
  --weekday thursday \
  --hour 9 \
  --notify \
  --menu-url https://www.toasttab.com/local/order/abby-jane-bakeshop \
  --confirm-menu-url

heyfood watch show
heyfood watch remove <watch-id>

Those are the supported non-interactive commands in heyfood v0.9.0. The restaurant ID comes from the structured result returned by the first command. The Thursday check runs at 9:00 AM in the restaurant's local time, including across daylight-saving changes.

How a watch works

  1. 01

    Locate the current menu

    Identify the restaurant, check likely menu sources, discard bad matches, and read the best available menu.

  2. 02

    Make sure it is the right restaurant

    Keep the evidence that connects the menu to the restaurant. A strong match can proceed automatically, an uncertain match needs confirmation, and a wrong match is rejected.

  3. 03

    Run on the restaurant's clock

    Save the restaurant's time zone and schedule checks in local time, so daylight-saving changes do not move a 9:00 AM watch to 8:00 AM.

  4. 04

    Avoid duplicate downloads

    When several jobs need the same menu, fetch it once. Scheduled checks use their own limits so they do not crowd out live requests.

  5. 05

    Save and compare menu versions

    The first successful check becomes the starting point. Later versions show added, removed, changed, and repriced items.

  6. 06

    Report only real changes

    If the menu is unchanged, Menu Watch stays quiet. When something changes, it saves a short update plus the before-and-after menu versions.

API

POST   /v1/menu/watch
GET    /v1/menu/watch
DELETE /v1/menu/watch/{watch_id}

{
  "restaurant_id": "…",
  "cadence": { "weekday": 3, "hour": 9 },
  "notify": true,
  "confirm_menu_url": true
}

Each watch belongs to a signed-in account or device. CLI sessions need the menu:watch permission. A watch stores the restaurant, its time zone, the next check, notification preference, and the menu source that was approved.

What counts as a change

EventBehavior
First successful checkSaves the starting menu and sends no update.
Menu unchangedKeeps the existing version and sends no update.
Menu changedSaves the new version and records added, removed, changed, and repriced items.
System is busyReschedules the check instead of dropping it.