Blog Introducing Office Lunch App

Published on
Office Lunch App homepage

A group lunch can generate a surprising amount of admin. Someone asks who is in, chases replies, finds the menu, collects orders, and remembers who paid. Office Lunch App puts that work in one place, even when several teams share the account.

Visit officelunch.app to see it in action.

Why we built it

We are a distributed team, but we still share lunch when people are in the office. The food was never the problem. Responses disappeared in chat, restaurant links were pasted twice, and the same few people kept asking, "Who's ordering today?" Now admins set the restaurants and rules once. Everyone else opts in, votes, and saves their usual orders.

Office Lunch App user dashboard
Office Lunch App pricing page

Voting that ends with a decision

Most lunch decisions are long pauses in a chat. Office Lunch App gives everyone a quick voting view so the group can pick a restaurant in under a minute. Admins see the live results, can break ties, and lock in the winner without a follow-up thread.

Cast your vote for lunch
Admin voting results and winner selection

Past winners stay in the history, so the same place does not sneak onto the list four weeks in a row.

Restaurants and saved orders, in one place

Each organization has a restaurant list with menu links, budget tiers, and a "Make Order" button. Employees can save a usual order for each restaurant instead of retyping it every week. Anyone can suggest a new place, and admins review those requests in the app instead of digging through messages.

Restaurant management list
Restaurant requests review screen
Saved order preferences across restaurants
Admin order management for the day's restaurant

On lunch day, the person placing the order sees everyone who opted in and each saved choice in one list. No stitching together direct messages at the last minute.

Separate settings for each team

If you manage more than one office or team, each can have its own restaurants, users, and settings. Administrators can oversee several organizations without mixing up their lunch plans.

Manage multiple organizations
Manage team members and roles
Organization settings

Roles, opt-in defaults, and organization preferences live in settings, so each team can set its own routine.

API access for recurring tasks

We wanted to automate opt-ins from the start. If you always join on Tuesdays, or want a Slack workflow to opt you in on Friday, create an API token and update your status without opening the app.

API tokens for automation

A command-line tool for regular users and admins

On top of the API, we ship an official command-line tool, olm, published on npm as @office-lunch/cli. It lets you opt in, place an order, or run admin tasks without leaving the terminal. It also works in shell aliases, cron jobs, and CI workflows.

Install it globally and configure it once with an API token from your settings:

npm install -g @office-lunch/cli
olm configure
olm status

From there, the day-to-day commands read the way you'd expect:

olm opt-in                                  # opt in for today
olm order set <restaurant-id> "Carnitas bowl, no beans"
olm vote up <restaurant-id>
olm suggest "Shake Shack" "https://shakeshack.com"

Admins get a parallel set of commands for running the lunch itself, including viewing today's opted-in users, approving restaurant suggestions, and locking in the winning restaurant:

olm admin opt-ins --list not-responded
olm admin suggestions approve <id> --notes "Added it!"
olm admin lunch set <restaurant-id>

The CLI uses the same API as the web app. A cron job can opt your team in every Tuesday, or a GitHub Action can post the day's selection to Slack. No one has to open the interface to keep the routine moving.

Less back-and-forth, more lunch

Office Lunch App is the tool we wanted for our own lunches. It handles the repetitive details without prescribing where or how a team eats. If lunch coordination takes more time than lunch, give it a try at officelunch.app.

Have a product idea like this one? Let's talk through what it should do.