How does it work?

Before you leave take out your phone and open Transit Takeout. You can either pick your own subway route or let the app try to find new subway routes between your origin and destination to let you explore new options of what is available throughout city. The app will show you all of the options for takeout along that route grouped ether by each subway stop or by cuisine type. Pick a venue and make a takeout order. Then get on the subway, hop off at that stop near the restaurant, pick up your takeout which should be waiting for you and hop back on the subway. Arrive at your final destination and eat!

Where did this idea come from?

This app was inspired from a personal experience. I really like Thai food but there are no Thai restaurants around my home. I have all of NYC available to me and an Unlimited MetroCard so why can't I solve my own problem? There is a world of takeout options available throughout the city so why should we be limited by what is within walking distance.

Who is the target user?

  • Rides the subway to get around the city (NYC only... for now)
  • Often picks up takeout food
  • Is getting bored with the dinning options available within walking/delivery distance (or has dietary restrictions)

How far do I have to walk?

Restaurants – It was assumed that people would not want to walk more than two or three city blocks away from a subway station to pick up their food order.

Subway Stations – In the “Pick an Origin/Destination” process it was assumed that people would be willing to walk a little farther to get to their starting and ending subway stops so the search range for this is more like eight to ten city blocks. This wider range also opens up more possible routes and thus more venue options. For example, to get to from Prospect Heights in Brooklyn to Midtown Manhattan the fastest and closest subway to take is the Q but one could also take the F, which is farther away and has more stops but opens up completely different parts of the city for exploration.

What data / APIs are you using (besides

Static New York City MTA subway data is being used for all of the station locations (latitude / longitude) and subway line route information. Also, the app pulls a live feed from the MTA website for the subway current service status.

It’s probably worth noting that the subways station data required a LOT of cleansing. It comes in a not very helpful or easy to decipher format. (See sample raw data.) It’s also very “quirky”, for example, if a train could stop at a particular station then that station is part of that train’s route data. So, the data for the 79th and Broadway stop says that the 1, 2, & 3 trains stop there because they all COULD stop there but the 2 and 3 trains usually do not because they are express trains.

Is the data “live”? Restaurant Data – Yes. For example, if a restaurant isn’t open right now the app filters it out of the results. (Try using the app late at night / early in the morning and you will see far fewer venues.)

NYC Subway Station Data – No. This data is static and is sitting on a MySQL database on the app’s web server. If a subway is rerouted or a particular station is closed the results from the app will not be altered.

NYC Subway Line Status Data – Yes. This was included this specifically because the station data can’t be updated live. At least you can see what problems there might be on your subway route and change your ordering process accordingly.

How long does my venue history last?

Under the menu button on the upper right there a list of restaurants you have looked at during your current session so you can go back and forth easily between restaurants that you might be considering. Also, so you can pull up the venue page again quickly if you need the info for when you get off the subway. The list will reset when you close your browser. (Usually the entire browser app, not just the tab you were on.)

Why no subway transfers?

You might have noticed in the “Pick an Origin/Destination” process that the app will only find subway lines that connect the two addresses directly. For example, you live in Kensington, Brooklyn and needed to get to Columbia University on the Upper West Side of Manhattan. The only way to get to there requires a line transfer (or two) so using those two addresses in the app would result in no subway lines available to you.

This was done for two reasons:

  1. It would make for an overly complex user experience in the overall flow of the app.
  2. As was mentioned in a previous question, the MTA station data required a lot of cleansing. While it certainly is a possible to figure this out with the cleansed data, there wasn’t time to work out the back-end process required to make this work and it didn’t seem worth the effort given the prior reason.

This was the original reason the “Pick a Subway Line” process was created as an alternative.

If there is enough feedback from users saying that they want this feature it can be included in a later version of the app.

Why can’t I order directly from this app? does have APIs for displaying menus and making orders but since this app isn’t doing anything interesting with the actual ordering process I decided that it wasn’t worth taking away from my already limited time to build that into the app when the mobile site is really quite good. This way time and effort could be focused on the parts of the app that provide a new experience. If there is real interest in the app this functionally can be included in a later version.

Why only NYC?

I live in Brooklyn and I grew up in Manhattan. I'm considering expanding into other areas with open data / APIs for their rapid transit systems. Washington, DC will likely be the next target city.

Other words of advice?

“Being miserable and treating other people like dirt is every New Yorker’s god-given right.” – Mayor Lenny Clotch, Ghostbusters 2

That being said I would suggest two things:

  1. Maybe avoid really smelly food? I don’t want to be responsible for a new trend that stinks up other people’s commutes.
  2. Please don’t actually eat on the subway. Just wait until you get to your destination.

Built With

Share this project: