Blank queries can return thousands of rows but are still fast
Any food item can be added as a favorite or searched on google
The main query page
Favorites can be easily tapped from the 'settings' page to search for their next appearance instantly
Labels on the bottom identify whether items are gluten free, vegan, or vegetarian (or a mix!)
There's a lot of "rare foods" at MSU that are hard to find in the dining halls, such as Mac 'n Cheese bites, Mozzarella sticks, and Char Siu Bao. There's no easy way to find them aside from having to sift between three meals a day for ten dining halls across campus for every single day.
What it does
There's three components to the app
- A web API that scrapes data from the MSU dining halls website in batches, and parses it into JSON readable data (from a raw HTML request where all data must be manually parsed with DOM manipulation).
- A backend service that pulls data from this web api, uploads it to mongodb, and has endpoints for querying
- A client app running on Android that actually queries the data from the backend service
How I built it
- The web API Is written entirely in TypeScript and Node.JS, using serverside jQuery for easy DOM traversal.
- The backend is written in TypeScript and Node.JS again, with express.js as the primary webserver runner.
- The client app is written in Flutter (a dart-based application) so that it can be easily spun up and could be theoretically ported to iOS very easily
Challenges I ran into
- I had set up the backend to work with Google Cloud Platform (in part for the GCP challenge), but it was near impossible to query substrings which is very unfortunate. I had to go back and refactor the database handling to use a local instance of mongodb
- Time was a really big challenge since I am alone in developing this app
Accomplishments that I'm proud of
- The fact that it works! I've been wanting to do it for months, and I'm glad I got the opportunity to do it.
What I learned
- A lot about indexes and querying on mongo documents, especially with TypeScript
- Some more advanced flutter techniques like Slivers and Stacks
What's next for Spartan Foods
- Integration with my separate MSU helper app so that people don't have to go to separate apps for dining hall menus and such
- Push notifications for favorite foods being available soon