In 2022, 19% of all food produced globally was wasted across the retail, food service, and household sectors, with 60% of the waste coming from households.
Dissertation Project
A mobile application designed to reduce household food waste through barcode scanning, expiration monitoring, visual organisation, and recipe suggestions.
View GitHub Repository
In 2022, 19% of all food produced globally was wasted across the retail, food service, and household sectors, with 60% of the waste coming from households.
The aim of this project was to design and develop a mobile application that allows users to track their grocery items and use-by-dates through barcode scanning, receive notifications when items are nearing expiration, and view recipe suggestions based on the items in their food list.
Scan the barcodes of your grocery items to add them into the database with their expiration dates.
Add and remove items from your database by scanning and swiping respectively.
Receive notifications the day before and the day of an items expiration date, to remind you to use them.
The application uses the OpenFoodFacts.org API, a community-maintained database of food products and nutritional information.
The application provides recipe suggestions based on what items you have scanned into your list using a rule-based system.
Technical Implementation
Android Studio and Kotlin were chosen to develop the application as a native Android experience. Kotlin provided a modern and readable programming language with strong support for Android development, while Android Studio offered a comprehensive set of tools for interface design, debugging, and testing. As I owned an Android device, features could be tested directly on physical hardware throughout development, allowing functionality and usability to be validated under real-world conditions rather than relying solely on an emulator.
Retrofit2 was used to handle communication with the OpenFoodFacts API, enabling the application to retrieve product information from community-contributed food databases. The library was chosen for its strong Kotlin support, simplified API request handling, and automatic JSON deserialization, reducing development complexity while maintaining clean and maintainable networking code.
Room was selected as the application's persistence layer to store inventory data locally on the device. By abstracting many of the complexities of SQLite, Room provided type-safe database access, structured data models, and maintainable query management. This allowed food items and expiration information to remain available between sessions while supporting efficient data retrieval throughout the application.
Android WorkManager was used to execute background checks on the Room database in order to create expiration reminders. The worker collects food items that have been stored, checks their expiration dates against the current date, and automatically creates alerts for products that are about to expire.
Google ML Kit was used to provide on-device barcode recognition through the device camera. The library was chosen for its reliable scanning performance and straightforward Android integration. Once a barcode is successfully detected, the application uses the resulting product identifier to query the OpenFoodFacts API and retrieve relevant food information automatically. This approach reduced user input requirements while improving the speed and accuracy of product registration.