WeatherApp is a modern Android weather application built with Jetpack Compose and a Clean Architecture foundation. It features an offline-first approach, scalable modular design, and adheres to best software engineering principles like SOLID and separation of concerns. The project leverages Gradle convention plugins and CI/CD for consistent quality checks and builds.
- Tech Stack
- Features
- Architecture & Modularization
- Offline-First Approach
- Code Quality
- Getting Started
- License
- Kotlin — Primary language
- Jetpack Compose — UI toolkit
- Room — Local data persistence
- Ktor Client — Networking layer
- Koin — Dependency Injection
- Coroutines & Flow — Asynchronous and reactive programming
- Material 3 — UI Components
- Location Services — Geolocation support
- Timber — Structured logging
- Firebase Analytics & Crashlytics — Monitoring and crash reporting
- Fetch and display weather data by city or geolocation
- Offline-first support using Room
- Integrated location permission handling
- Built with scalable, maintainable architecture
- Material 3 theming & custom design system
- Secure token & config management
- Gradle build-logic with convention plugins
The project is based on Clean Architecture principles and modularized into the following layers:
:app— App-specific implementation (UI, DI, ViewModels, screens):core:domain— interfaces, and models:core:ui— Shared UI elements and utilities:core:designsystem— Custom theme, typography, spacing, and components
The app prioritizes cached data. When a user opens the app:
- Local Room DB is queried for the latest weather data
- A background fetch from the API updates the cache
- UI displays cached data instantly, improving UX on poor networks
This model ensures better responsiveness and offline support.
- SOLID Principles enforced throughout architecture
- Gradle Convention Plugins for consistent module configuration
- CI/CD Pipeline for lint checks & build verification (pull requests →
devbranch) - Ktlint for Kotlin code style enforcement
- Android Studio Hedgehog or newer
local.propertiesor.envsetup with:OPEN_WEATHER_BASE_URL, you can use this: http://api.openweathermap.org/data/2.5/OPEN_WEATHER_API_KEYCITY_API
- Note: The city API is currently not in use yet but you can add some dummy api key
git clone https://github.com/ericwafula/WeatherApp.git
cd WeatherAppThis project is licensed under the MIT License.