What it does
Look & Cook is the solution to all your food problems. The days where you look into your fridge and not know what to whip up for a meal are now gone! Just input the ingredient, category, quantity, and expiration date, utilizing the easy-to-use Add Ingredient screen, and Look & Cook will suggest recipes that use whatever ingredients you have! Breakfast, lunch, dinner, midnight snacks -- we've got you covered. Forgot what ingredients you need to restock your pantry with after that huge dinner you made? No worries, ingredients that you've used up from previous recipes are added to your shopping list; all you have to do is pull up your Look & Cook shopping list on your phone.
How we built it
We built a rough api for a 'get-recipes-given-whats-in-your-fridge'. We used the recipe database dump from openrecipes. For Instructions on download that refer to: https://github.com/fictivekin/openrecipes/issues/218
As recipes state their ingredients used in latural language we used the CRF model to extract ingredients from the phrases from https://github.com/NYTimes/ingredient-phrase-tagger
We used that model to extract the ingredients of each recipe from openrecipes and constructed an inverted index for efficient retrieval. A pre-computed index is part of this repository. However, if you want to adapt this to your own recipes or are curious how we did it have a look into the (still messy) extract_ingredients_and_build_index.ipynb notebook.
We then built a small flask server to serve a RESTful api. For further instructions see below.
We have a mobile application, built on Swift, that allows the user to create a shopping list of ingredients he or she needs to purchase, as well as a separate list of ingredients he or she currently owns in their pantry. The tab bar at the bottom of the application lets the user access the two lists with ease.
From both screens, the user has an add button on the top right corner in the navigation bar that leads the user to a separate screen with customized fields to store information about the ingredient needed. The user is able to go back and forth from these two screen utilizing the back button that is located on the left side of the navigation bar.
In the shopping list, in particular, the user has swiping left abilities in order to delete an entry or mark an entry as purchased.
Challenges we ran into
There were a number of challenges that were presented to our team. Coming into this weekend, none of us had developed an iOS app before. One of the team members had invested some time in learning the syntax of Swift, but that was the most advanced that any of us were in iOS development at the beginning of this project. Secondly, we unfortunately ran out of time to implement the customized food API and recipe API with the front-end of our application. We were able to get a front-end and back-end running separately, but did not have time to combine the two. The biggest challenge we faced was when the team member who was working on the UI for the "My Pantry" section of the app had their laptop refuse to build a project due to limited disk space on their computer. Because of this, they had to exit XCode in order to be able to access the files, as XCode got stuck in a persistent "building" phase, without actually building her UI. She did have a fully functioning UI for the "My Pantry" section of our app right before this happened. So, another team member had to build a very rudimentary UI for the "My Pantry" section at the last minute in order to incorporate it into the final project.
Accomplishments that we're proud of
This team started this project with little to no knowledge of Swift but are all finishing the project have learned a lot about the different objects, methods, and functionality of both the language and IDE. Combine this with the challenge of having half of the UI stop functioning properly due to an unforeseen XCode issue on one of our team member's laptop, we are very proud that we were able to scrape together a final UI for that section of the interface, even though it is very simple and bare bones in the final build that we published.