FlowNote is a high-performance task and notes management application built to demonstrate modern Android development standards. It focuses on clean code, scalability, and a robust architectural foundation using Clean Architecture and MVVM.
- Reactive Data Flow: Real-time synchronization with
Roomdatabase usingKotlin Flow. - Advanced Search & Filtering: Optimized
case-insensitivesearch at the SQLite level and instant filtering by task status (All/Active/Completed). - Unified State Management: Centralized handling of Loading, Success, Error, and Empty states
using the
ViewStatepattern. - Modern UI/UX: Material 3 components, smooth Lottie animations for empty states, and full Light/Dark mode support.
- Type-Safe Navigation: Secure data passing between fragments using
Jetpack NavigationandSafe Args.
The project follows the Clean Architecture principles, strictly decoupling business logic from UI and data sources:
- Entities: Core business models (
Task,FilterType). - Use Cases: Isolated business logic for each operation (
GetTasksUseCase,DeleteTaskUseCase, etc.) following the Single Responsibility Principle. - Repository Interfaces: Abstractions to keep the domain layer independent of data implementations.
- Room Database: Local persistence implementation.
- Repository Implementation: Management of data logic and mapping.
- Mappers: Converters between
Data EntitiesandDomain Models.
- ViewModel: Managing UI State and interacting with Use Cases.
- State & Events:
StateFlowfor persistent UI state andSharedFlowfor one-time UI events ( Navigation, Toasts). - Data Binding: Two-way binding between XML layouts and ViewModels for cleaner Fragments.
| Category | Technologies |
|---|---|
| Language | Kotlin + Coroutines & Flow |
| Dependency Injection | Hilt |
| Jetpack Components | Navigation, ViewModel, Room, Data Binding |
| UI | Material 3, Lottie, ConstraintLayout |
| Architecture | Clean Architecture, MVVM, ViewState Pattern |
- Reactive Search: Implemented using
combineandflatMapLatestoperators to ensure search and filter changes are processed efficiently without blocking the main thread. - Error Handling: Database operations are wrapped in a custom
Resultsealed class, ensuring that exceptions are caught at the data layer and handled gracefully in the UI. - List Optimization: Used
ListAdapterwithDiffUtilto ensure only modified items are re-rendered, providing a buttery-smooth scrolling experience.
| Task List | Task Detail | Add/Edit Task |
|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Clone the repository:
git clone (https://github.com/doseyenc/flownote.git)
- Open the project in Android Studio.
- Wait for the Gradle sync to complete.
- Run the application on an emulator or physical device (Min SDK 24).





