Notes is a simple note taking app built with KMP(Kotlin Multiplatform), formerly known as KMM (Kotlin Multiplatform Mobile). The app is supported on both iOS and Android.
- Demo
- Screenshots
- Tech Stack
- Notable Features
- High-level Architecture Diagram
- Source code and architecture
Notes-Android-Emulator-Demo.mp4
Notes-IOS-Simulator-Demo.mp4
- Kotlin Coroutines for threading.
- Kotlinx-coroutines-test for testing coroutines.
- Kotlin Flows for creating reactive streams.
- SQLDelight for local database.
- Kotlinx Date-Time API for date/time operations.
- Manual dependency injection on both platforms.
- Jetpack Compose for UI and navigation on Android.
- SplashScreen API for displaying a splashscreen in a backwards compatible way.
- Work Manager for background tasks.
- Swift UI for UI and navigation on IOS.
- Auto save 🪄
- The app automatically saves the changes made to a note in an efficient manner. This precludes the need for the user to click a save button after every change, thus, significantly improving the UX of the app.
- Instant search 🔍
- The app instantly starts to search for notes that match the provided search term, as the search term is being typed, in an efficient manner. It not only looks for matches to the title of the notes but also checks for matches to the contents of the notes as well. This ensures that search results are returned to the user as soon as possible.
- Native UI 🔮
- The UI looks and feels native on each supported paltform - Android and IOS. This is because the the UI is built completely using UI tool kits that are native to each platform. This ensures that the user gets a native looking app on both the platforms.
- Themed splash screen 🎨
- In Android 12 and above, the background color of the splash screen matches the system theme. This minor detail, helps in improving the synergy of the app with the rest of the system from the moment the app is launched.
- Themed App Icon 🦄
- The app also supports the "Themed Icons" feature available on Android 13 and later. If the user has opted in for the feature on a device that is running Android 13 and higher, the app's icon will be tinted to inherit the coloring of the user’s chosen wallpaper and other themes.
- Uses MVVM architecture.
- All concrete implementations in the common module are prefixed by the term “Default”.
- Commit messages follow the Conventional Commits specification.
- The module structure is heavily based on the guidance mentioned in the "Guide to architecture article" posted on the offical android developers website.
I am primarily an Android developer and I learnt Swift and Swift UI on the fly, while I was developing the app. I am not familiar with ios development atall, so, there might be some slight issues with code quality on the ios side of things. My focus was to get the ios app, up and running as soon as possible with the very limited amount of knoweldge that I had on Swift.