PennApps XX: Food Hunter
In short, the Food Hunter app connects people who have extra food with people who may be in need of food. Maybe you are a college student who wants to find an event that has food, maybe you cooked extra and don't want the good food go to waste, whatever the situation is, Food Hunter's got you covered. You can be an individual who mistakenly cooked too much food for a meal, has almost-expired food you cannot finish, a business with extra food at the end of the day that would otherwise be thrown away, or you can just simply report an open event with free food! To avoid food waste and help redirect this otherwise-trashed food into the right hands, we made this app to connect people who need food with those who have this extra food.
What it does
The Backend branch contains code for a Node.js Express server that serves as the backend API of the application. It performs functions such as data retrieval, data storage, registration/login/logout, and various useful functions with users, donations, and storage locations. Using Firebase as its storage backend, it relies on a set of web server routes to perform the bulk of its functionality and has much room for improvement. Database interaction functions and web server routes are handled separately, in order to better modularize the API and allow for more efficient and effective pair/partner programming. As this was developed by two people simultaneously, the need for said modularization is critical to ensure productivity on the part of both developers.
The Frontend branch contains code for a React Native application that acts as a wrapper around the backend API and web server routes. Intended to act as a user friendly way to interact with the backend, the total separation of backend and frontend ensures that other developers in the future will be able to make things such as a website, a computer based app, and applications for any number of different platforms that will have the same functionality as this fairly basic React Native application. Facilitating registration, login/logout, submission of data, and connection of different data points, this React Native based frontend application makes use of every single functionality of the backend application to act as the best possible partner to the backend application. Because React Native is able to be compiled into both iOS and Android applications, this application also functions as an easy way to publish a wrapper application onto both popular mobile operating systems.
How we built it
We divvied up tasks amongst ourselves according to who had more experience with what. While two of us managed the frontend React Native app, two others took charge of the backend and the middleware API that connects the two together. Taking this divide and conquer approach to our development allowed us all to play to our strengths to the maximum as well as work more cohesively and efficiently as a team.
Challenges we ran into
We used the Expo development CLI to create our React Native app, which we ran into some obstacles with - those being various different compilation errors, queues to use the virtual simulators, and some difficulties running our apps on our own devices. We ran into some other difficulties in regards to syncing all our work together and making sure all our stuff works together in the best way possible.
Accomplishments that we're proud of
While other teams may have stressed over spending every minute possible to complete their hacks and submit a working project, we emphasized setting our own more comfortable pace, taking breaks when needed, and focusing on learning and making the most out of our time at PennApps over spending every minute possible programming. This allowed for us to all keep a more clear mind with regards to making our project and more accurately and realistically see where we would be in terms of a minimum viable project at the deadline.
What we learned
We learned that, even if we make time for breaks, to go to workshops, and to hang out with friends, we can still make something amazing and be able to learn a whole lot along the way. Most of us didn't have much React Native, Firebase, or Express experience before this, so we were learning and creating on the fly.
What's next for Hunter
- Create an algorithm to recommend food and locations to people who need food, and who need places to store excess food.
- Make use of the Firebase login flow to make login entirely based on Firebase and allow users to login with third party services including Google, Facebook, Twitter, etc.
- More secure storage of sensitive user data, including a databases of locations, food items, people, and more.
- Improve email and phone verification, especially phone verification through Twilio as that has been problematic.
- Improve handling of database related functions, as they are all bunched together into a singular function as of present.
- Improve user interface and flow with more knowledge of React Native.
- More closely integrate functionalities of front and back end.
- Explore the legalities of doing something like this on a wide scale.
- More funtion such as Random Act of Piazza