Roommates is the ultimate household management app that simplifies tracking groceries, meal planning, and chore division. With features like AI-powered meal suggestions, chore reminders, and easy food item tracking, Roommates ensures a well-organized and harmonious living environment for both families and roommates.
The Roommates app helps users track groceries and expiring food, meal plan based on groceries, and fairly divide up chores. Anyone looking for an easy, consolidated way to manage their household chores, whether living alone or with roommates/family, can use the Roommates app to get timely notifications on things like groceries running low or expiring, or chores that need to be done. The app stores data related to user profile information, groups, calendar details, and fridge contents. With this data, users will be able to create and manage their household group and individual account, create and interact with events and chores in the calendar (including sending chore reminders to roommates), and add and remove fridge and grocery items. Some additional functionality may include a budgeting section (like splitwise) where users can divide expenses between members of their household, or AI image recognition for fridge items to help with the meal planning expiration tracking.
In our project, HTML, CSS, and JavaScript played crucial roles in building the core of our application. JavaScript, in particular, was leveraged for dynamic functionalities such as interactive chore reminders and real-time grocery tracking. We adhered to best practices in coding style to ensure clean and maintainable code. JavaScript's features like dynamic typing and asynchronous operations allowed us to create a responsive and interactive user experience.
We utilized React to build a dynamic and efficient user interface. React's component-based architecture enabled us to develop reusable and modular components, reducing code redundancy and simplifying frontend logic. Redux was employed for centralized state management, which helped in maintaining a consistent and predictable state across the application. By managing state globally, Redux reduced the complexity associated with passing props through multiple layers of components, making the codebase easier to maintain and scale.
Node.js and Express were instrumental in setting up our application server. Express handled API requests for critical functionalities such as user authentication, calendar events, and chore management. User authentication was managed through API calls to Auth0, which provided a secure and scalable authentication solution. We implemented secure practices by restricting data access based on user roles and ensuring sensitive information was protected.
MongoDB was chosen for its flexible and scalable data storage capabilities. It stored essential data like user profiles, household groups, and grocery lists. MongoDB's NoSQL nature allowed for dynamic schema design, which was advantageous for handling varying data structures. We used Mongoose to enforce data validation and schema constraints, ensuring data consistency and integrity across the application.
For continuous integration and deployment, we relied on GitHub Actions to automate our build, test, and deployment processes. This setup ensured that every code change was tested and deployed smoothly, reducing manual effort and minimizing errors. By automating these processes, we maintained a reliable deployment pipeline, which facilitated consistent updates and improvements to the application.
The application was deployed to Render, a cloud-based platform that provided scalable hosting and easy deployment. Render's deployment process seamlessly integrated with our CI/CD pipeline, allowing us to push updates and ensure high availability for users with minimal downtime.
We integrated OAuth through Auth0, which hosts universal login and signup pages, and provides social login options. In our app, we allow users to login with Google, providing flexibility for users who don't want to have to create a new account and store a new password just to use Roommates. It would have been much easier to keep our own signup and login pages and then encrypt passwords using something like bycrypt, but we wanted to go above and beyond in terms of security.
We used generative AI with the OpenAI API in 2 places: the grocery receipt scanner and meal planner.\ While we have the functionality for users to input every grocery item individually, we wanted to make it easier to add bulk items. When the user makes a grocery trip, they can easily add all the items they just purchased by uploading a photo of the receipt. AI will analyze the items on the receipt and show a preview with the name and any other field it is able to populate. Users are then able to edit any information before adding the items to the grocery table.\ We knew that coming up with recipes can be challenging, so we added a feature that utilized the grocery table and AI to create custom recipes. Users can select any item on the grocery table to add to the recipe generator. AI will then take into account the items added and the quantity to generate a recipe with other ingredients that are likely already around the kitchen.
Going forward, we'd like to add the budgeting page we originally had as a stretch requirement, where groups can track and split costs for groceries and other items (similar to splitwise). We'd also like to add some functionality to the profile settings page (e.g. changing email/password, deleting an account). In terms of design, we're planning on revamping the landing page so it's a bit more engaging and improving the responsivness of all of the pages.