LighthouseMenuBot

The crawler behind Lighthouse, an accessibility-first restaurant menu service.

What it is for

Restaurant menus online are often hard to use with a screen reader: menus drawn as images, PDFs, complex layouts, or ordering widgets. Lighthouse finds a restaurant's public menu, turns it into a simple structured list of sections, items and descriptions, and serves it through an API built for accessible apps. The first audience is blind and visually impaired people who want to know what they can order.

How to identify it

User agent
LighthouseMenuBot/0.1 (https://alexhawkins.dev/bot)
Signed requests (Web Bot Auth)
Every request carries an Ed25519 HTTP Message Signature (RFC 9421) with Signature-Agent: "https://api.alexhawkins.dev". A user agent can be copied by anyone; the signature cannot. Requests claiming to be LighthouseMenuBot without a valid signature are not from us.
Public key directory
https://api.alexhawkins.dev/.well-known/http-message-signatures-directory

What it fetches

How often

A restaurant's menu is fetched when someone first looks that restaurant up. After that, the bot checks the menu source occasionally for changes: about a week later, then at growing intervals (14, 30, then 45 days) while the menu stays the same. It uses conditional requests (If-None-Match, If-Modified-Since), so an unchanged page can be answered with 304 Not Modified. A full re-read happens at most about every 90 days.

How the content is used

Menu text is extracted into structured menu data (sections, item names, descriptions, options and, where available, approximate prices), stored with a record of where it came from, and shown to users of accessible menu apps. When the menu cannot be read with ordinary parsing, the page text is sent to an AI model (Google Gemini) to extract the menu. Lighthouse does not use fetched content to train AI models.

Controlling access with robots.txt

LighthouseMenuBot obeys robots.txt (RFC 9309), and checks it for every site and every redirect. If robots.txt cannot be fetched because the server errors or is unreachable, the bot treats the whole site as disallowed.

To block it from your entire site:

User-agent: LighthouseMenuBot
Disallow: /

To block only part of your site:

User-agent: LighthouseMenuBot
Disallow: /private/

Contact

Questions, problems, or a request to stop fetching your site: [email protected].