Android Native project
FreddyFridge
A smart household utility for tracking food, managing expiration dates, and making daily kitchen organization easier.

Overview
FreddyFridge
FreddyFridge is a native Android application designed to help users reduce food waste by tracking food stored at home, monitoring expiration dates, and delivering timely reminders before products expire.
Users can add products manually or through optional speech input, organize them by status, and quickly review food that is expiring today, coming up next, already consumed, or expired.
Color-coded lists keep urgent items immediately recognizable, while local persistence makes the core experience available without a backend connection.
The latest release refreshes navigation and screen transitions, introduces reactive list updates after product changes, and strengthens reminder reliability.
It also expands regression coverage, modernizes the app and Play Store branding, and improves the repeatability of release validation and store publication.
Additional capabilities include:
- Configurable expiration reminders with adjustable lead time and daily notification frequency.
- Optional speech recognition for fast product entry, with manual input always available.
- Product lifecycle tracking across expiring, consumed, and expired states.
- Notification deep links that open the relevant product view directly.
- Local-first storage for food records and reminder preferences.
- English and Italian localization for the complete user experience.
- Runtime permission handling for notifications and microphone access without blocking core food management.
- GDPR and advertising consent management integrated into the application lifecycle.
Architecture
The project follows a feature-oriented Clean MVVM architecture with clear separation between presentation, domain, and data responsibilities.
- Presentation layer built with Jetpack Compose, screen-specific ViewModels, and reactive UI state.
- Domain layer organized around use cases for product management, status transitions, preferences, and reminder scheduling.
- Data layer centered on repositories and local Room persistence.
- Dependency injection managed with Hilt.
- Reactive state powered by Kotlin Coroutines, Flow, and lifecycle-aware collection.
- Navigation handled with Compose Navigation 3 and state-preserving destinations.
- Reminder delivery isolated behind dedicated scheduling and notification components.
This structure keeps Compose screens focused on rendering and interaction while persistence, reminder calculations, status updates, and navigation state remain encapsulated in reusable and testable layers.
Project Strategies
- Feature-based organization to keep food lists, product entry, settings, reminders, credits, and shared utilities maintainable.
- Repository and use-case patterns to separate business rules from Android framework and UI concerns.
- Reactive database-driven lists that update consistently after adding, editing, consuming, or expiring products.
- Local-first behavior so product management and reminder settings remain usable offline.
- Lifecycle-safe reminder handling with tested scheduling, rescheduling, and notification flows.
- Contextual permission requests that preserve manual input and core app functionality when access is denied.
- Reusable Compose components for consistent navigation, lists, forms, dialogs, and feedback states.
- Regression-focused validation across navigation, database operations, reminders, permissions, localization, and upgrade paths.
- Fastlane-based Play Store management for synchronized metadata, localized listings, screenshots, release notes, and repeatable publication workflows.
Core Technologies
- Kotlin
- Android SDK
- Jetpack Compose
- Material 3
- Android ViewModel
- Compose Navigation 3
- Hilt
- Room
- Kotlin Coroutines and Flow
- AlarmManager and Notification APIs
- Android Speech Recognition
- Runtime Permissions
- Google Play In-App Review
- Google Mobile Ads and UMP consent flow
- Gradle Kotlin DSL
- JUnit and AndroidX UI testing
- Fastlane


