Lunch came up in Slack every day: someone asked where to eat, someone opened a few restaurant sites, then the same thing happened again tomorrow. LunchBot was my small attempt to stop that.
One command, all menus
The bot does three things:
- Fetches local restaurant menus.
- Pulls out the useful parts.
- Posts them in Slack.
Slack was the right place for it because that was already where the question was being asked. Nobody needed another app or another tab.
The boring technical bits
The bot runs on Node.js. I used Cheerio to parse restaurant HTML and Slack’s API to post the result.
Each restaurant needed its own parser because every site had a different structure. Some menus were clean lists; others buried the useful text among weekly notes, prices, and layout markup. async/await kept fetching several sources readable, and Slack formatting took a bit of trial and error.
What it became
The first version was useful because it stayed narrow. It put the answer where people already were.
It also showed the limits of scraping raw text. Different languages, missing prices, and odd site structures made the output uneven. That became PasiLunch, where normalising the data became a proper part of the project instead of an afterthought.

The original LunchBot posting daily menus to Slack.