Kitchen Kit - Android Kitchen Inventory Management App

Android, Kotlin, Firebase, Firestore, Authentication, CRUD, Mobile Development

View This Project on GitHub

Figma Design Project Documentation

Project Description

Kitchen Kit is an Android mobile application designed to help users manage their kitchen inventory and discover recipes based on available ingredients. Built as a team project for CSSE483 (Android Application Development) at Rose-Hulman Institute of Technology, the app provides a comprehensive solution for tracking ingredients, browsing recipes, and maintaining personalized favorites.

The application leverages Firebase for cloud-based data synchronization, enabling users to access their kitchen inventory across multiple devices in real-time.

Team Members: Allen Liu, Ray Fang

System Architecture

graph TB
    subgraph Android["Android Application<br/>Kotlin"]
        UI["User Interface<br/>Fragments + RecyclerView"]
        LOGIC["Business Logic<br/>ViewModels + Adapters"]
        AUTH["Firebase Auth<br/>User Management"]
    end

    subgraph Firebase["Firebase Backend"]
        FIRESTORE["Cloud Firestore<br/>NoSQL Database"]
        STORAGE["Firebase Storage<br/>Image Files"]
        FAUTH["Authentication<br/>Email/Password"]
    end

    subgraph Data["Data Models"]
        INGREDIENT["Ingredient<br/>Name, Quantity, Expiry"]
        RECIPE["Recipe<br/>Title, Instructions, Image"]
        PROFILE["User Profile<br/>Preferences, Favorites"]
    end

    UI --> LOGIC
    LOGIC --> AUTH
    AUTH --> FAUTH
    LOGIC --> FIRESTORE
    LOGIC --> STORAGE
    INGREDIENT --> FIRESTORE
    RECIPE --> FIRESTORE
    PROFILE --> FIRESTORE

    style UI fill:#e1f5ff
    style FIRESTORE fill:#fff4e1
    style FAUTH fill:#d4edda

Application Features

flowchart TD
    START([Launch App]) --> SPLASH[Splash Screen]
    SPLASH --> AUTH{Authenticated?}

    AUTH -->|No| LOGIN[Login / Register]
    AUTH -->|Yes| MAIN[Main Navigation]
    LOGIN --> MAIN

    MAIN --> INGREDIENTS[My Ingredients]
    MAIN --> RECIPES[Recipe Browser]
    MAIN --> PROFILE[User Profile]

    subgraph IngredientMgmt["Ingredient Management"]
        INGREDIENTS --> VIEW_ING[View All Ingredients]
        INGREDIENTS --> ADD_ING[Add New Ingredient]
        INGREDIENTS --> EDIT_ING[Edit Ingredient]
        ADD_ING --> SAVE_ING[Save to Firestore]
        EDIT_ING --> SAVE_ING
    end

    subgraph RecipeMgmt["Recipe Features"]
        RECIPES --> BROWSE[Browse Recipes]
        BROWSE --> DETAIL[View Recipe Details]
        DETAIL --> FAVORITE[Add to Favorites]
    end

    subgraph ProfileMgmt["Profile Features"]
        PROFILE --> VIEW_PROFILE[View Profile]
        PROFILE --> EDIT_PROFILE[Edit Profile]
        PROFILE --> FAVORITES[My Favorites]
    end

    style SPLASH fill:#e1f5ff
    style MAIN fill:#fff4e1
    style SAVE_ING fill:#d4edda
    style FAVORITE fill:#d4edda

Key Features:

  • Ingredient Tracking: Add, edit, and delete kitchen ingredients with details like name, quantity, and expiration date
  • Recipe Browser: Discover recipes with detailed instructions and ingredient lists
  • User Authentication: Secure login and registration via Firebase Authentication
  • Favorites System: Save favorite recipes for quick access
  • Cloud Sync: Real-time data synchronization across devices via Firestore
  • Image Support: Upload and display photos for recipes and ingredients
  • User Profiles: Personalized user profiles with customizable settings

Technical Implementation

Module Architecture

graph TB
    subgraph App["KitchenKit Application"]
        MAIN["MainActivity.kt<br/>Navigation Host"]
        SPLASH["SplashFragment.kt<br/>App Entry Point"]
        UTILS["Utils.kt / Constants.kt<br/>Helpers"]
    end

    subgraph Ingredient["ingredient/"]
        ING_MODEL["Ingredient.kt<br/>Data Model"]
        ING_STORED["StoredIngredient.kt<br/>Firestore Model"]
        ING_LIST["MyIngredientsFragment.kt<br/>List View"]
        ING_ADD["AddIngredientFragment.kt<br/>Create"]
        ING_EDIT["EditIngredientFragment.kt<br/>Update"]
        ING_ADAPTER["IngredientsAdapter.kt<br/>RecyclerView"]
        ING_VH["IngredientsViewHolder.kt<br/>Item View"]
    end

    subgraph Recipe["recipe/"]
        REC_MODEL["Recipe.kt<br/>Data Model"]
        REC_BROWSER["RecipeBrowserFragment.kt<br/>Browse"]
        REC_DETAIL["RecipeDetailFragment.kt<br/>Details"]
        REC_ADAPTER["RecipeAdapter.kt<br/>RecyclerView"]
        REC_VH["RecipeViewHolder.kt<br/>Item View"]
    end

    subgraph Profile["profile/"]
        PRO_FRAG["ProfileFragment.kt<br/>View Profile"]
        PRO_EDIT["EditProfileFragment.kt<br/>Edit"]
        PRO_INFO["Information.kt<br/>Data Model"]
        FAV_ADAPTER["FavoritesAdapter.kt<br/>Favorites List"]
        FAV_VH["FavoritesViewHolder.kt<br/>Item View"]
    end

    MAIN --> SPLASH
    SPLASH --> ING_LIST
    SPLASH --> REC_BROWSER
    SPLASH --> PRO_FRAG

    ING_LIST --> ING_ADAPTER
    ING_ADAPTER --> ING_VH
    ING_LIST --> ING_ADD
    ING_LIST --> ING_EDIT

    REC_BROWSER --> REC_ADAPTER
    REC_ADAPTER --> REC_VH
    REC_BROWSER --> REC_DETAIL

    PRO_FRAG --> PRO_EDIT
    PRO_FRAG --> FAV_ADAPTER
    FAV_ADAPTER --> FAV_VH

    style MAIN fill:#e1f5ff
    style ING_MODEL fill:#fff4e1
    style REC_MODEL fill:#fff4e1
    style PRO_INFO fill:#fff4e1

CRUD Operations

The application implements full CRUD (Create, Read, Update, Delete) operations for ingredients:

Operation Component Firebase Method
Create AddIngredientFragment collection.add()
Read MyIngredientsFragment collection.get() with listeners
Update EditIngredientFragment document.update()
Delete IngredientsAdapter document.delete()

Data Flow

sequenceDiagram
    participant User
    participant Fragment as Fragment/UI
    participant Adapter as Adapter
    participant Firestore as Cloud Firestore

    User->>Fragment: Add New Ingredient
    Fragment->>Fragment: Validate Input
    Fragment->>Firestore: collection("ingredients").add(data)
    Firestore-->>Fragment: Success Callback
    Fragment->>Adapter: notifyDataSetChanged()
    Adapter-->>User: Display Updated List

    Note over User,Firestore: Real-time Sync
    Firestore-->>Fragment: onSnapshot() Update
    Fragment->>Adapter: Update Data
    Adapter-->>User: Refresh UI

Demo

Technical Stack

graph TB
    subgraph Core["Core Technologies"]
        KOTLIN["Kotlin<br/>Primary Language"]
        ANDROID["Android SDK<br/>Target API 29+"]
        GRADLE["Gradle<br/>Build System"]
    end

    subgraph Firebase["Firebase Services"]
        FAUTH["Authentication<br/>User Management"]
        FSTORE["Cloud Firestore<br/>NoSQL Database"]
        FSTORAGE["Cloud Storage<br/>File Storage"]
    end

    subgraph UI["UI Components"]
        RECYCLER["RecyclerView<br/>List Display"]
        FRAGMENTS["Fragments<br/>Screen Navigation"]
        MATERIAL["Material Design<br/>UI Components"]
    end

    KOTLIN --> ANDROID
    ANDROID --> GRADLE
    ANDROID --> Firebase
    ANDROID --> UI

    style KOTLIN fill:#7f52ff,color:#fff
    style FSTORE fill:#ffca28
    style MATERIAL fill:#e1f5ff
Component Technology Purpose
Language Kotlin Primary development language (99.2% of codebase)
Platform Android Native mobile application
Build System Gradle Dependency management and build automation
Database Cloud Firestore Real-time NoSQL cloud database
Authentication Firebase Auth User login and registration
Storage Firebase Storage Image and file storage
UI Pattern Fragment + RecyclerView Modern Android UI architecture
Design Material Design Google’s design system for Android

Project Structure

KitchenKit/
├── app/
│   └── src/main/java/edu/rosehulman/fangr/kitchenkit/
│       ├── MainActivity.kt           # Main entry point
│       ├── SplashFragment.kt          # Splash screen
│       ├── Constants.kt               # App constants
│       ├── Utils.kt                   # Utility functions
│       ├── BitmapUtils.kt             # Image processing
│       ├── ingredient/
│       │   ├── Ingredient.kt          # Ingredient model
│       │   ├── StoredIngredient.kt    # Firestore model
│       │   ├── MyIngredientsFragment.kt
│       │   ├── AddIngredientFragment.kt
│       │   ├── EditIngredientFragment.kt
│       │   ├── IngredientsAdapter.kt
│       │   └── IngredientsViewHolder.kt
│       ├── recipe/
│       │   ├── Recipe.kt              # Recipe model
│       │   ├── RecipeBrowserFragment.kt
│       │   ├── RecipeDetailFragment.kt
│       │   ├── RecipeAdapter.kt
│       │   └── RecipeViewHolder.kt
│       └── profile/
│           ├── Information.kt         # User info model
│           ├── ProfileFragment.kt
│           ├── EditProfileFragment.kt
│           ├── FavoritesAdapter.kt
│           └── FavoritesViewHolder.kt
├── build.gradle
└── README.md