Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Akvo

Akvo is a native Android water reminder. It helps users set a daily hydration goal, turn it into a balanced routine, log water intake, review history, and receive actionable reminders.

The project focuses on a calm, functional Material Design 3 experience backed by a small, explicit, and testable architecture.

Highlights

  • Material Design 3 UI built entirely with Jetpack Compose
  • Guided onboarding that generates a balanced hydration plan from a goal and routine window
  • Quick water logging, progress tracking, and daily history with entry deletion
  • Local notifications with Drank and Snooze actions
  • Reminder restoration after device restart and app update
  • Runtime notification-permission handling for Android 13+
  • Persistent settings with DataStore and hydration history with Room
  • Light and dark theme support, plus Compose previews for key states

Tech stack

  • Kotlin
  • Jetpack Compose and Material 3
  • AndroidX Lifecycle and ViewModel
  • Kotlin Coroutines and Flow
  • Room with schema export and migration tests
  • DataStore Preferences
  • AlarmManager, BroadcastReceiver, and NotificationCompat
  • KSP for Room code generation
  • JUnit 4, kotlinx-coroutines-test, Room Testing, Espresso, and Compose UI Testing

Architecture

The app uses a deliberately small, dependency-injected layered architecture. Dependencies are assembled manually in AppContainer, keeping setup transparent without adding a DI framework for a single-module app.

Compose UI / ViewModels
          |
     Application use cases
          |
 Domain models, ports, and services
          |
Android adapters: Room, DataStore, AlarmManager, notifications

Key design choices:

  • Domain-first contracts: repositories, clock, time zone, reminder scheduler, and notification-permission checker are interfaces owned by the domain.
  • Explicit side effects: scheduling and notification concerns live in Android adapters, outside UI and business rules.
  • Testability: time, IDs, persistence, scheduling, and permissions can be replaced with fakes in tests.
  • Safe reminder reconciliation: settings changes replace or cancel schedules consistently; scheduling failures leave reminders disabled and retry cleanup.
  • Coroutine correctness: cancellation is never presented to the user as an operation failure.

Project structure

app/src/main/java/com/probablyworks/Akvo/
├── domain/       # Models, repository contracts, and business services
├── application/  # Use cases and reminder coordination
├── data/         # Room, DataStore, alarms, notifications, and receivers
├── ui/           # Compose screens, ViewModels, state, and design system
└── di/           # Manual application container

Requirements

  • Android Studio
  • JDK 11 or newer
  • Android SDK with API 37 installed
  • Android 13 (API 33) or newer device/emulator

Run the app

  1. Clone the repository and open it in Android Studio.
  2. Let Gradle sync the project.
  3. Select a device or emulator running Android 13+.
  4. Run the app configuration.

From the command line:

./gradlew installDebug

Testing

Run local unit tests:

./gradlew test

Run Android Lint:

./gradlew lintDebug

Run instrumented tests on a connected device/emulator:

./gradlew connectedDebugAndroidTest

Notes

Akvo is a portfolio project and does not provide medical guidance. Daily goals are user-defined; the app only distributes that goal across the selected routine.

About

Native water reminder app built with kotlin and Jetpack Compose

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages