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
- Only pages that look like a specific restaurant's menu, such as the restaurant's own menu page, its online ordering page, a menu PDF, or a public listing of its menu. It does not crawl whole sites.
- HTML pages and PDF menus. Pages that draw their menu with JavaScript are rendered in a headless browser, which loads that page's own scripts and resources; every one of those requests is signed too.
- It never logs in, submits forms, places orders, or tries to get around CAPTCHAs, paywalls or other access controls. If a site blocks it, it stays blocked.
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].