Introducing GreenPlate

GreenPlate is a sustainable food management system designed to streamline food consumption and shopping practices. By tracking daily calorie intake, managing ingredient inventories, and facilitating efficient grocery shopping, GreenPlate not only enhances dietary habits but also ensures that food waste is reduced and resource use is optimized.

Functionality Demo

Delve into the world of sustainable eating with our comprehensive functionality demo of the GreenPlate app. This video walkthrough showcases how our app simplifies tracking your daily food intake, managing your pantry, and planning your shopping with an eye toward sustainability.

Domain Model

A descriptive text for the image

This domain model represents the classes we have implemented in our app and their respective attributes, offering a comprehensive and easy-to-see view of the structure of our app. Our model consists of a two different 'types' of classes. First, we have the 'entry' type class, or any type of class that can have an instance. This includes the user, recipe, ingredient, and input meal classes, which have individual attributes that depend on user input. The second type of class is the 'database' type class.This includes the user database, meal database, the cookbook (recipes database), the pantry (ingredients database), and the shopping list. These databases are structured using Firebase to store instances of the 'entry' type class accordingly. The domain model shows the relationship between these classes using arrows, multiplicities, and verbs.


System Diagram

A descriptive text for the image

The sequence diagram is a model that shows a specific user-system interaction based on one use case. This sequence diagram shows a scenario where a user wants to add an ingredient entry into their pantry. First, the user must use the navigation bar to click on the ingredients section, which is facilitated by Main Activity. From there, the user is able to click the add ingredient button, which calls the addIngredient method, displaying a pop up that allows the user to enter the name, quantity, calories per serving, and expiration date of the ingredient. The system attempts to write this to the ingredient database using Firebase, and this can lead to one of two outcomes: onFail or onSuccess. OnFail is called when adding the ingredient was unsuccessful, due to reasons such as the ingredient being a duplicate, the user entering only whitespace, etc. This will then return an error message to the user describing the issue. OnSuccess is called when adding the ingredient is successful, which then allows the pop up screen to close, and the ingredient to be added to the database.


Design Class Diagram

A descriptive text for the image

The Design Class Diagram can be thought of as a more detailed, rigorous extension of the idea of the domain model. In the design class diagram, classes are represented as a box with two sections, the top section being attributes of the class, and the bottom section being methods of the class. The visibility of the attributes and methods are defined by the -, #, or + symbol before them. - represents private, # is protected, and + is public. Defining the visibility in this way provides an easy way to determine how classes are working in interaction with each other. Similar to the domain model, this diagram also uses verbs and multiplicities to describe the relationship, but also includes the directionality. The lines and arrows of the diagram also define the relationship between classes. For example, the dotted open arrow connecting the ingredients database and the ingredients fragment indicates a dependency relationship, while the white diamond arrow from recipes fragment to recipes activity indicates an aggregational relationship. Thus, the DCD provides a comprehensive view into the intricate details of the app's classes.

UI Highlights

Project Outcomes

Over the past 16 weeks, we proudly worked on and finished our semester-long project: GreenPlate. Our team of six met for the first time at the beginning of the semester, eager to design and implement our app.

Sprint 1 : App Framework

Sprint 2 : Implementing Specific Features

Sprint 3 : Heavy Use of Firebase Database

Sprint 4 : Fullstack Features

Our Impact

Project Challenges

Throughout the four sprints of our GreenPlate project, our team encountered and overcame several challenges that shaped our journey and helped us grow.

Sprint 1 : Overlooking Requirements

Sprint 2 : Unrealistic Goals

Sprint 3 : Feature Interdependency

Sprint 4 : Improvement Plan

Reflections

Contributions & Learnings

Profile of Allison Vu
Allison Vu
This project taught me how to translate client's needs to technical TODOs for my team, roadmap a timeline to ensure we deliver the requirements, and work with my team to identify bottlenecks in the workflow. I used Jira to track Sprint TODOs. I also worked on the front-end (e.g. I created the navigation bar using Fragments, form validation, form-entry modals using Dialogs, and the splash screen), reviewed code + fixed bugs for my team, and created our demo site using React.
Profile of Rhoney Lee
Rhoney Lee
I learned the importance of communication, how to coordinate meetings, and checked in with my team members frequently. It was my first time using Android Studio, and I learned so much including but not limited to coding JUnits, creating buttons + entry forms, how to use version control, and how to design a Domain Model, Design Class Diagram, + Sequence Digram. I oversaw the design diagrams throughout the semester and updated them each Sprint.
Profile of Keon Sanavandi
Keon Sanavandi
I integrated a recipes database and refined data synchronization with Firebase, learning to implement SOLID and GRASP principles for robust back-end functionality. I honed my skills in data validation and structured our database for efficiency, ensuring coding standards with Checkstyle. My work on establishing a meal database and input functionality expanded my understanding of system architecture and user data handling. Through debugging and test development, I've learned to build a more reliable and user-friendly application.
Profile of Michael Manchiraju
Michael Manchiraju
This project taught me how to translate a client’s needs into specific requirements that our team can implement and develop into a final product. Along this journey, I learned how to utilize the Agile development toolkit, such as sprint planning, scrum, and sprint review meetings, and use tools such as Jira to manage the product backlog. Additionally, I was introduced to the Git version control system and learned how to effectively and efficiently utilize Git to ensure the integrity of our project through suitable employment of Pull Requests and managing merge conflicts using industry-specific best practices. I also worked with the Firebase database management platform and learned to integrate front-end UI elements with the real-time database. I played an essential role as a mediator within our group, ensuring group morale remained high, everyone’s opinions were heard respectfully and professionally, and issues were solved effectively and professionally.
Profile of Brendan Thomasson
Brendan Thomasson
This project had me dive elbows deep into a practical, real-world Agile development environment. I learned how to interface with GitHub - how to coordinate with team members to keep the project modular and operating as its parts were engineered and plugged in. I learned valuable lessons in how best to operate within a group, ensuring my code would assimilate with the others cleanly. I worked to integrate the front and back-end of the project, polling asynchronous information from Firebase and using it to update scrollable lists, calculate for numeric displays, and build objects. Bugfixing was an endless journey, but that process helped build the skills of reading other's code to gain a wholistic understanding of all the project's moving parts. Throughout development, I learned the ins-and-outs of Android Studio, including how to make scrollable lists, manipulate individual elements of a list, create buttons, create dialogues, and how to push and pull from Firebase.
Profile of Seong Won Park
Seong Won Park
Through this project, I gained a deep appreciation for the importance of communication within a team. By utilizing Jira, we were able to enhance our team's efficiency significantly. Employing the Agile Scrum methodology allowed us to experience real-life app development, which illuminated how databases interact with user interfaces. Additionally, I acquired hands-on experience in app creation using Android Studio. I was responsible for designing the front-end elements such as creating buttons on the input meal screen and compiling lists for the shopping list. Additionally, I developed functions within the database to support these features.