Sample app showcasing best practices in Android development


The app is a simple tracker of sport results. It allows to enter name, place and duration of the sport results. You can save it locally or remotely and then filter the list based on it.


  • Kotlin
  • Jetpack Compose for all UI (single Activity)
  • Compose Navigation for navigating between screens
  • Material3 theme (color mirrors system from Android 12)
  • Dark mode support
  • Portrait & landscape support, proper handling of orientation changes
  • ViewModels for each composable screen
  • Room database with observing data via Flow
  • Retrofit+Moshi+coroutines for network requests
  • Backend is unauthenticated Firebase Realtime Database (but accessed via REST API, not SDK)
  • Form validation, loading & error handling for new sport result

Further work

I skipped some tech I would normally include in a real production app due to time contraints:

  • Localization (now hardcoded strings)
  • Dependency injection via Hilt (now using Kotlin singleton objects)
  • Modularization (feature/sport-results, feature/new-sport-result, common/storage, common/network, common/ui, app)
  • Unit tests for viewmodels & repositories
  • Screenshot tests
  • Espresso tests
  • CI/CD for pull request validation and releases via Github Actions
  • Error handling, loading indicator and pull-to-refresh for the list of sport results
  • Crashlytics & Analytics
  • Timber library for better logging
  • some authentication so users see only their own data
  • possibility to delete & edit sport results


View Github