https://github.com/muazdev26/notsi
Notes Android App with SqlDelight & Migrations
https://github.com/muazdev26/notsi
database-migrations flow hilt hilt-android kotlin kotlin-android kotlin-coroutines kotlinflows migrations navigation-component sqldelight sqldelight-sample sqldelight2 stateflow stateflow-android stateflow-sample viewbinding viewbinding-android viewmodel
Last synced: 16 days ago
JSON representation
Notes Android App with SqlDelight & Migrations
- Host: GitHub
- URL: https://github.com/muazdev26/notsi
- Owner: muazdev26
- Created: 2022-10-24T12:14:21.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2026-05-01T16:19:38.000Z (about 1 month ago)
- Last Synced: 2026-05-01T18:20:56.095Z (about 1 month ago)
- Topics: database-migrations, flow, hilt, hilt-android, kotlin, kotlin-android, kotlin-coroutines, kotlinflows, migrations, navigation-component, sqldelight, sqldelight-sample, sqldelight2, stateflow, stateflow-android, stateflow-sample, viewbinding, viewbinding-android, viewmodel
- Language: Kotlin
- Homepage:
- Size: 212 KB
- Stars: 0
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Notsi
A reactive, modern Notes Android application built with SQLDelight and Clean Architecture principles.
[](https://github.com/muazdev26/Notsi/actions)
[](http://kotlinlang.org)
[](https://www.android.com)
[](https://developer.android.com/studio/releases/gradle-plugin)
---
## ๐ฑ Screenshots

---
## ๐ Tech Stack & Architecture
Notsi follows **Modern Android Development (MAD)** practices and uses **MVVM** with **Clean Architecture**.
- **Language:** [Kotlin](https://kotlinlang.org/)
- **Local Database:** [SQLDelight](https://github.com/cashapp/sqldelight) - Type-safe SQL for Kotlin.
- **Dependency Injection:** [Hilt](https://developer.android.com/training/dependency-injection/hilt-android)
- **Asynchronous Programming:** [Coroutines](https://developer.android.com/kotlin/coroutines) & [Flow](https://developer.android.com/kotlin/flow)
- **Jetpack Libraries:**
- [Navigation Components](https://developer.android.com/guide/navigation)
- [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel)
- [ViewBinding](https://developer.android.com/topic/libraries/view-binding)
- [Lifecycle](https://developer.android.com/topic/libraries/architecture/lifecycle)
---
## ๐งช Testing Strategy
The project is heavily tested across all layers to ensure stability and correctness:
### 1. Unit Tests (`app/src/test`)
- **ViewModel Tests:** Validates UI logic and state using `InstantTaskExecutorRule`.
- **Data Source Tests:** In-memory integration tests for SQLDelight queries using Robolectric.
- **Mappers:** Ensures data conversion between layers is accurate.
- **Libraries:**
- [JUnit4](https://junit.org/junit4/) - The fundamental testing framework.
- [Truth](https://truth.dev/) - Fluent assertions for Kotlin/Java.
- [Turbine](https://github.com/cashapp/turbine) - A small testing library for Kotlin Flow.
- [Robolectric](https://robolectric.org/) - Industry-standard unit testing framework for Android.
- [Mockito](https://site.mockito.org/) - Mocking framework for unit tests.
### 2. Instrumented Tests (`app/src/androidTest`)
- **Fragment Isolation Tests:** Testing UI components in isolation using a custom Hilt container.
- **End-to-End (E2E) Tests:** Full user flow verification from adding a note to seeing it in the list.
- **Libraries:**
- [Espresso](https://developer.android.com/training/testing/espresso) - Native UI testing framework.
- [Hilt Testing](https://developer.android.com/training/dependency-injection/hilt-testing) - For dependency injection in instrumented tests.
- [Mockito-Android](https://github.com/mockito/mockito) - Mockito support for Android instrumented tests.
---
## ๐ CI/CD Pipeline
The project uses **GitHub Actions** for automation:
- **Continuous Integration:** Every pull request/manual trigger triggers a full test suite run (`./gradlew testDebugUnitTest`).
- **Continuous Deployment:** On successful build and test completion, the debug APK is automatically distributed to **Firebase App Distribution** for testers.