BillBuddy
BillBuddy is a powerful and intuitive bills and expense management application built using the Multi-Module architecture. With its easy-to-use interface, BillBuddy allows users to keep track of their expenses and bills in a smart and efficient way. With BillBuddy, users can monitor their spending, track their bills and payments, and get reminders when payments are due.
Tech stack & Open-source libraries
- Minimum SDK level 21
- Kotlin - First class and official programming language for Android development.
- Jetpack
- Lifecycle: Observe Android lifecycles and handle UI states upon the lifecycle changes.
- ViewModel: Manages UI-related data holder and lifecycle aware. Allows data to survive configuration changes such as screen rotations.
- Room: Constructs Database by providing an abstraction layer over SQLite to allow fluent database access.
- Jetpack Compose - Jetpack Compose is Android’s modern toolkit for building native UI
- Coroutines - For asynchronous and more..
- Flow - A cold asynchronous data stream that sequentially emits values and completes normally or with an exception.
- Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps.
- ViewModel - Stores UI-related data that isn't destroyed on UI changes.
- Dependency Injection -
- Hilt-Dagger - Standard library to incorporate Dagger dependency injection into an Android application.
- Hilt-ViewModel - DI for injecting
ViewModel
.
Firebase Authentication - Firebase Authentication provides backend services, easy-to-use SDKs.
- Coil - An image loading library for Android backed by Kotlin Coroutines.
Modularization
NoteApp adopted modularization strategies below:
- Reusability: Modulizing reusable codes properly enable opportunities for code sharing and limits code accessibility in other modules at the same time.
- Parallel Building: Each module can be run in parallel and it reduces the build time.
- Strict visibility control: Modules restrict to expose dedicated components and access to other layers, so it prevents they're being used outside the module
- Decentralized focusing: Each developer team can assign their dedicated module and they can focus on their own modules.
For more information, check out the Guide to Android app modularization.