Skip to content

Tech Stack

Category Technology
Language Kotlin
UI Framework Jetpack Compose (Material 3)
Architecture MVVM + Clean Architecture
Dependency Injection Hilt
Async Kotlin Coroutines & Flow
Database Room
Preferences DataStore
Navigation Navigation Compose
Maps Google Maps Compose
Location Play Services Location
Bluetooth Android BLE (BluetoothGatt, BluetoothLeScanner)
Testing JUnit 4, MockK, Turbine, Roborazzi, Robolectric
Observability Firebase Crashlytics, Firebase Performance, Timber
Performance Baseline Profiles, Macrobenchmarks
Code Quality Detekt
Coverage Kover
Build Gradle, AGP, R8
Min SDK 24 (Android 7.0)
Target SDK 36
CI GitHub Actions
Dependencies Update Dependabot

Database

Room is used as the local database, centralized in the app module (AppDatabase):

  • DestinationDao — cycling POI data
  • LocaleDao — language/locale settings
  • PairedDeviceDao — paired BLE devices
  • ProfileDao — rider profile data
  • SessionDao — session and track points

DAO conventions: @Dao interfaces with suspend functions for one-shot operations and Flow for observable queries.

Data Persistence

Storage Purpose
Room Destinations, sessions, track points, locale, profile, paired devices
DataStore User preferences (theme, language, profile, stats display configuration)