Weather App is a single-page client–server Android application that displays a 3-day weather forecast for a given location.
The application determines the user's location using three different approaches:
-
Initial location detection
An approximate location is determined based on the user's IP address. -
Manual location input
The user can enter a location name, which is resolved using the Google Geocode API. -
Current device location
The precise location is obtained using the Fused Location Provider Client.
The application gracefully handles error scenarios by displaying appropriate notifications and allowing the user to retry requests.
The app follows an Offline First approach.
This allows access to locally cached data when network requests fail.
The application also supports pull-to-refresh functionality to explicitly request updated weather data from the server.
The project follows Clean Architecture principles and Google-recommended Android best practices:
- Business logic is isolated in domain layers
- Data layers contain concrete implementations of repositories and data sources
- Domain entities are aggregated into components that expose use cases
- Features represent the presentation layer and operate on use cases to manage UI state and user interactions
Application entry point. Sets up dependency injection, navigation, and connects feature modules.
Core modules shared across the application.
Common data-layer implementations and abstractions used across features.
Core business logic. Defines domain models, use cases, and repository contracts.
Shared presentation utilities, base UI components, and common presentation logic.
Navigation contracts and feature entry points.
Domain-specific business logic and its data-layer implementations.
Weather forecast domain models, use cases, and data implementations.
Location-related domain models and data implementations.
Domain models and data implementations for Google Geocode API results.
Application-level components that aggregate domain logic and expose use cases.
Weather forecast data orchestration component.
Location input and geolocation handling component.
UI features of the application.
Each feature consists of:
:ui— visual implementation:definition— feature identifier used for navigation and decoupling
Main screen displaying the weather forecast.
Location input and device geolocation feature.
Shared Gradle convention plugins and build configuration.
Shared build logic for the project.
- Android SDK
- Kotlin
- Jetpack Compose
- Material Design 3
- Location Services
- Fused Location Provider Client
- Google Geocode API
- Retrofit
- Moshi
- Coroutines / Flow
- DataStore
- Koin
- Coil
- MVI
- Clean Architecture
- Gradle Multimodule architecture
- Detekt










