Project 4: Cash Control (budget management app)
Channel: Kanan Bashirov
Date: 2023-12-24

This practical expense management app is born from my desire to control spending. Unlike other apps, it uniquely manages your daily budget based on your chosen date frame and spending patterns. Overspend, and your budget decreases the next day; underspend, and it increases.

Although there is no server backend on this project, I have added a user login process with local db just to simulate login.

Each user account can have N number of profiles.

At first, the user creates a new profile and then creates a new date frame. Date Frames consist of the user's budget, main currency (all expenses with different currencies will be converted to this main currency), and most importantly, the date period information in which the user intends to track his or her budget. Based on the user's budget and spending habits, the app calculates a daily limit for the particular day. If the user spends more than the budget and does this occasionally, the app cuts down the limit as a punishment.

Creating identical date frames in a profile is prohibited. For example, if the user wants to add another date frame with the same dates but different budget and currency information, he or she has to create another profile and a new date frame on this profile.

Built with:
Kotlin,
Coroutines - for asynchronous and more..,
Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps,
LiveData - to notify views when the underlying database changes,
Flows - to compute stream of data asynchronously,
ViewModel - to store UI-related data that isn't destroyed on UI changes,
Room - to store searched weather information
Jetpack navigation - to navigate between fragments
MVVM Architecture - to separate the business logic from the UI
Gson library - for JSON serialization/deserialization
Retrofit2 - to build communication between the app (client) and web servers
Dagger-Hilt - to inject dependencies