A modern Android weather application built with Clean Architecture principles and modular design, providing real-time weather information.
This is a production app, you can try it out from Google Playstore
The app follows Clean Architecture principles with a modular structure:
app/
├── core/
│ ├── network/ # Network operations and API interfaces
│ ├── data/ # Data layer, repositories
│ ├── model/ # Domain models
│ ├── domain/ # Use cases, business logic
│ ├── ui/ # Common UI components
│ ├── designsystem/ # Design system, themes
│ ├── common/ # Shared utilities
│ ├── testing/ # Test utilities
│ └── androidtest/ # Android test utilities
│
└── feature/
├── home/ # Home screen with current weather
├── detail/ # Detailed weather information
└── location/ # Location selection
- app: Main application module, depends on all feature modules
- core: Contains all core functionality and shared resources
- feature: Contains all feature modules, each independent of others
- Kotlin: Primary programming language
- Coroutines & Flow: Asynchronous programming
- Hilt: Dependency injection
- Jetpack Compose: Modern UI toolkit
- Material 3: Design system
- Clean Architecture: Architectural pattern
- MVVM: Presentation layer pattern
- Google Maps: Location services
- Location Services: Real-time weather data
- Retrofit: Network requests
- OkHttp: HTTP client
- JUnit 5: Unit testing
- Mockk: Mocking framework
- Turbine: Flow testing
- Compose Testing: UI testing
- Real-time weather information
- Location-based weather data
- 5-day weather forecast
- Detailed weather metrics (humidity, wind speed, visibility)
- Location search with Google Maps integration
- Material 3 theming
- Dark/Light mode support
- Error handling and retry mechanisms
- Location permissions handling
-
Clone the repository
git clone https://github.com/yourusername/celestia-weather.git -
Add your OpenWeather API key in
local.properties: WEATHER_API_KEY=your_weather_api_key -
Add your Google Maps API key in
local.defaults.properties(under the ./gradle): MAPS_API_KEY=your_google_maps_api_key -
Build and run the project in Android Studio
The project uses a custom Gradle plugin for dependency management with version catalogs: kotlin // Example from build.gradle.kts
plugins {
alias(libs.plugins.celestia.android.library)
alias(libs.plugins.celestia.android.library.compose)
alias(libs.plugins.celestia.android.hilt)
alias(libs.plugins.celestia.android.feature)
}
dependencies {
// ...
implementation(libs.androidx.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.bundles.compose)
// ...
}
- Unit Tests: Testing individual components (ViewModels, UseCases, Repositories)
- UI Tests: Testing UI components with Compose Testing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Sevban Buyer - @sevbanBayir






