My main goal was to make a pleasant-looking app, that has some small, unique functionality I didn't find in other weather apps in the Play Store:
- getting info about postcodes in search results for the same-named places (other apps can put the region, but quite often it's not enough in my area to recognize which place I should choose from the list, some places can be named the same while being in the same region)
✅ current, hourly and daily weather data
✅ air pollution data
✅ sun and moon data
✅ searching for places
✅ offline-first functionality
✅ getting data from the device location
✅ handling location permissions
✅ handling lacking location, lacking internet and server error responses
✅ pull to refresh
✅ managing saved places
✅ settings screen
✅ screen for a detailed daily forecast
✅ periodic background updates
✅ support for the Polish language
✅ light/dark mode and dynamic themes support
✅ edge-to-edge design
✅ horizontal responsive widget
Instrumental tests
Settings data module (WorkManager)
Unit tests
Weather data module
Weather domain module
UI tests
Weather presentation module
- Multi-module
- Extra layer modules inside feature modules
- Gradle convention plugins
- Use cases and repositories
- Coroutines for async programming
- Kotlin flows for reactive programming
- Unidirectional data flow
- Dependency injection with inversion of control
- Kotlin, Jetpack Compose including Canvas and Glance, Material 3, Ktor, Room, Koin, WorkManager, Preferences DataStore, JUnit5, Mockk
- Firebase Crashlytics, KSP, Location Services, Accompanist, Kotlin Serialization, Turbine, Timber, LeakCanary
api_key_openweathermap=OpenWeatherMap API
api_key_geoapify=Geoapify API
add google-services.json to /app dir (create new Firebase project)
