Portfolio
Water Tracker
Here is the release of a small hydration tracker, made with Compose Multiplatform (CMP). It is a lightweight, high-performance utility app for Android and iOS.
The goal was to create a seamless, reactive experience while keeping the UI layer entirely decoupled from business logic: the "Dumb UI" pattern, or more professional sounding: Unidirectional Data Flow (UDF).
To ensure the UI remains a pure projection of the state, I moved all logical operations—including orientation-based grid calculations (rows/cols), date formatting, and accessibility strings—into the ViewModel. Even the layout math, like chunking the list of 8 glasses into rows, is handled in the ViewModel. This makes the Composables "dumb" and easy to preview, while the entire user experience becomes unit-testable without an emulator.
The app uses Room for local persistence, leveraging its new Kotlin Multiplatform capabilities. A database factory handles path differences between Android’s internal storage and iOS’s document directory through the expect/actual pattern. Koin ensures dependency injection.
To match the new requirement of Android SDK 36+, the UI is adaptive to ensure a pleasant experience both in portrait and lanscape modes. The glass shape is drawn using the Canvas API, and I played with a few simple animations to smooth the state changes.
I also experimented with custom semantic roles and state descriptions, to fully support screen readers like TalkBack and VoiceOver.
Comments
No comment yet.
A remark, a suggestion? Do not hesitate to express yourself below. Just be courteous and polite, please.