Efficiently order and track your group's shared lunches, vote on restaurants, and manage menu links
Ruby JavaScript Shell
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
config added database.yml template for local install, + instructions in READ… Jan 28, 2012
db fixed migration file Sep 6, 2011
lib/tasks Initial commit. Feb 6, 2011
public layout fixed in ratings Sep 6, 2011
script Initial commit. Feb 6, 2011


(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