Efficiently order and track your group's shared lunches, vote on restaurants, and manage menu links
Ruby JavaScript Shell
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 4 commits ahead of mrflip:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


(Demo available at http://lunchladydemo.heroku.com — do whatever you like over there; secret passphrase is “opensesame”)

At infochimps, we buy lunch for everyone in the office(†), and it’s always a pain to wrangle everyone’s order in on time. Hooray weekend app!

Lunchlady will

  • Help you know which restaurants are the best-loved, or overpriced, or haven’t been ordered from in a while
  • Remember everyone’s past orders, if they don’t get one in on time
  • Make your office manager happy, which is the secret to a successful business

You can try it out here — thanks Heroku!

(† One of many reasons you should come work with us — there is such a thing as a free lunch!)


To run the app

  cd lunchlady
  bundle install
  cp config/database.yml.example config/database.yml  # and edit if desired
  rake db:migrate
  rake db:seed    # optional: loads a bunch of restaurants so you can play around. Editdb/seeds.rb and db/seeds/*.tsv to suit
  rails server

You will want to set a signup shibboleth by editing config/app_config.yml. On heroku, you can instead set an environment variable:
heroku config:add SIGNUP_SHIBBOLETH=your_watchword


As a visitor to the homepage

  • I should be invited to sign in or sign up if I’m not logged in.
  • If I am logged in, I should be able to quickly place my order and know that it was received.

As a person placing an order

  • It’s easy to find the restaurant’s menu
  • It’s straightforward to type in a new order and its price
  • I can call up an old order if I always get the same thing
  • I can enter an order for another person
  • I’m prevented from creating two orders for the same person and meal

As a Lunchmeister organizing a meal

  • I can create a new meal efficiently
  • I get a few good robo-suggestions for the restaurant, but have absolute supreme unquestioned authority to choose any restaurant
  • I can change the restaurant for a meal
    – It should be possible (but difficult) to do this once any orders have been set.
    – changing the restaurant should delete all current orders

As a Lunchmeister finalizing a meal

  • I can see
    – the phone number and other details of the restaurant
    – all the orders that have been placed
    – the total expected cost and the suggested tip
    – whether orders from people who typically order lunch are missing
  • I can enter a “best-guess” order for somebody who hasn’t ordered
  • I can see metrics on each restaurant to ask for a discount, and to make sure any minimum monthly order target is hit.

As a team optimizing for overall joy

  • We can see
    – actual overall price per person for each restaurant
    – how long it’s been since we ordered from the restaurant
    – how much people love the restaurant
  • We can make sure everyone’s favorite restaurant is cycled through, even if it’s not the team consensus
  • So that metrics are accurate, I should not be able to edit a past meal or order, and should not be able to create ones in the unrealistic future
  • restaurant votes are fair:
    – each user’s votes are adjusted to their mean
    – only include regulars

So that we can have visitors over

  • I can invite a guest to the office and pay out-of-pocket for their meal
  • We can have visitors over who will pay for their own meal.
  • Correct accounting for team, company guests and co-paid guests

As a team that is efficient and open, but not too open

  • I should be able to place an order for another person
  • If I’m logged in I can do anything, but am discouraged from doing stupid things
  • It’s easy for a guest to sign up given a minimal token
  • It’s difficult for a griefer to get an account
  • If I am not logged in, the only pages I can view are
    – the homepage, which shows only some stuff
    – the login, signup, and password recovery pages


  • list all users:
    – all users (with link), email, avatar, number of orders, is_local
  • show any user:
    – user info
    – user metrics
    – rated restaurants
    – past orders
  • log out:
    – link on top when I’m signed in, not when I’m signed out.
  • log in:
    – link on top when I’m signed out, not when I’m signed in.
  • register new account:
    – link on top when I’m signed out, not when I’m signed in.
    – prompts for full name, email, is_local,
  • edit my account:
    – name, email, is_local
    – change password


  • Stats:
    – Average per-head order price of restaurant
    – ‘unfairness’ rating of restaurants (Joe likes X a 5, everyone else a 2, how often should it cycle thru)
  • Time of day vs. lunchtime vs. weekends
  • Do we want to be able to say “out of office”?
  • Meals other than lunch
  • -add restaurant inspections-2 from infochimps—
  • -make it so you have to type a magic word into the signup box to create a new account-
  • -validations-
  • -Remember past orders for restaurant and suggest them to user (rails part works, but need javascript to inject into text field)-
  • -Vote for a restaurant-
  • -How long since we last ordered from a restaurant-
  • -consensus rating-

heroku console Rails.cache.clear —app lunchlady