** Warning, the project is incomplete. Almost none of the features are fully fledged. We encourage you to move on to other projects that are complete. **
We were initially inspired by the difficulty of planning meals and keeping track of grocery items we had in stock, especially during first year. We realized that we could make a simple web app that would not only be able to track our inventory, but would also feature a built-in calendar to plan meals throughout the week, factoring budget, inventory and time taken to make each meal. We also saw past projects and saw several implementations of image recognition, so we decided to try to implement a receipt parser that would extract all grocery items off a user uploaded image and automatically add it to the user inventory (with the option to correct mistakes). We decided to name it after "ambrosia", historically known as the nectar of the gods, with the subconscious hope that our project would also be blessed with big god energy. Having the basic premise, we set off to code.
Design and planning
We decided to use Django weeks prior to the hackathon, but due to a variety of reasons, we were not able to learn the framework to the fullest extent. Similarly, we had only decided to implement image recognition and text parsing last minute, so Keanu volunteered to learn and make the applet for this (as he had experience with machine learning), as well as deploy the actual project on his web server. Juan volunteered to use React and Figma for the frontend design (he had to learn React during the hackathon from scratch), and Jo volunteered to create the REST API from which the user data would be accessed from as well as most of the backend. We then registered https://theambrosia.tech from domain.com and linked it to Cloudflare for the free SSL certificate and easy-to-use DNS management tools.
Admittedly, we had very high expectations in the beginning, which quickly declined as we realized the difficulty of each different thing we had to learn. First of all, we had little practice (comparatively) in Django, so even coding the boilerplate was slow. For example, it took one hour to figure out how to even pull the project from GitHub and test it on the web, let alone deploy it on a dedicated Nginx instance (we still haven't). Second, according to Juan, React is ridiculously complicated (especially after following tutorials for more than 10 hours straight as a first-timer). Lastly, Keanu figured out the hard way that although text recognition is very accurate and easy to implement. parsing the items from the text was a completely different story. We realized we couldn't finish the project, even if we wanted to, at least to the extent that was mentioned. In the end, we only managed to finish the design of the receipt import page and didn't even make the text parser, although the user API and registration/login pages work perfectly. These changes may not be on the website, but they should be on the Github repo.
What's next for Ambrosia
This project idea, however, was a gold mine from the start and a highly ambitious project idea to boot, and so a multitude of improvements could be made to the project itself. These include:
- Switching to Firebase for easy user authentication and to store user data. Django stores user data such as images and files in SQLite databases on the web server itself. If we were to deploy it as an actual product, the storage space could potentially be too much to handle. Furthermore, Firebase authentication is quick and simple, and recruiters like the "API" buzzword anyways.
- Training a text parser; admittedly one could implement a naive text parser that just generalizes based on standard receipt formats using regex (regular expressions) and other python libraries, but it would be cool to involve Tensorflow in this. What kind of monolithic model needed for this is unknown, but again, recruiters like the "Tensorflow", "ML", AI" buzzwords.
- Switching from Django to Node.js: It is uncommon to see Django and React together, but there is already a well established stack (the MERN stack) that we could use for ease of development. Recruiters like "React" in your resume too....okay we'll stop mentioning recruiters now.
Overall, even though our results were comparatively poor, we still had a blast learning about these new skills, which really gave us a good look at what true software engineering is like. We will definitely do better next year, as, Juan, Jo and Keanu plan on pursuing React and Node.js full time while maintaining and improving this project as a dedicated side project.