{"id":20760221,"url":"https://github.com/yassineabou/weather","last_synced_at":"2026-04-21T11:36:37.210Z","repository":{"id":194603347,"uuid":"603164976","full_name":"yassineAbou/Weather","owner":"yassineAbou","description":"This android app provides weather info for multiple cities, including current, 48h, and 8d forecasts. It can also detect user's location for accurate local weather.","archived":false,"fork":false,"pushed_at":"2025-07-20T00:16:31.000Z","size":13762,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-25T23:37:07.494Z","etag":null,"topics":["android","android-architecture-components","baseline-profiles","data-binding","datastore","google-play-services","hilt","kotlin","kotlin-coroutines","kpermissions","moshi","mvvm","retrofit2","room","sdp","secrets-gradle-plugin","stateflow","viewmodel","viewpager2","weather"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yassineAbou.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-02-17T18:52:50.000Z","updated_at":"2025-07-20T00:16:35.000Z","dependencies_parsed_at":"2025-01-18T05:33:36.235Z","dependency_job_id":null,"html_url":"https://github.com/yassineAbou/Weather","commit_stats":null,"previous_names":["yassineabou/weather"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yassineAbou/Weather","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yassineAbou%2FWeather","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yassineAbou%2FWeather/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yassineAbou%2FWeather/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yassineAbou%2FWeather/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yassineAbou","download_url":"https://codeload.github.com/yassineAbou/Weather/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yassineAbou%2FWeather/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32090428,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T11:25:29.218Z","status":"ssl_error","status_checked_at":"2026-04-21T11:25:28.499Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-architecture-components","baseline-profiles","data-binding","datastore","google-play-services","hilt","kotlin","kotlin-coroutines","kpermissions","moshi","mvvm","retrofit2","room","sdp","secrets-gradle-plugin","stateflow","viewmodel","viewpager2","weather"],"created_at":"2024-11-17T10:12:26.283Z","updated_at":"2026-04-21T11:36:37.190Z","avatar_url":"https://github.com/yassineAbou.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e  \n  \u003cimg src=\"https://i.imgur.com/RSSAkFv.png\" alt=\"Weather\" style=\"width: 100px; height: 100px; object-fit: contain; margin-right: 10px;\"\u003e  \n \u003ch1 style=\"display: inline-block; margin: 0; vertical-align: middle;\"\u003eWeather\u003c/h1\u003e  \n\u003c/div\u003e  \n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://kotlinlang.org/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Kotlin-1.8.21-blue?logo=kotlin\" alt=\"Kotlin version 1.8.21\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://gradle.org/releases/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Gradle-8.0.2-white?logo=gradle\" alt=\"Gradle version 8.0.2\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://developer.android.com/studio\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Android%20Studio-Flamingo-orange?logo=android-studio\" alt=\"Android Studio Flamingo\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://developer.android.com/studio/releases/platforms#7.0\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Android%20min%20version-7-brightgreen?logo=android\" alt=\"Android min version 7\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\nUsers can view and add weather information for multiple cities of their choice with this app.  \nIt provides a 48-hour forecast, an 8-day forecast, and current weather conditions.  \nThe program can also detect the user’s location to provide accurate local weather information.\n\n\u003cp align=\"center\"\u003e  \n  \u003ca href=\"https://play.google.com/store/apps/details?id=com.yassineabou.weather\"\u003e\u003cimg alt=\"Get it on Google Play\" src=\"https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png\" height=\"80px\"/\u003e\u003c/a\u003e  \n\u003c/p\u003e   \n\n\n## Screenshots\n\n\u003cdiv style=\"display:flex; flex-wrap:wrap;\"\u003e  \n  \u003cimg src=\"https://i.imgur.com/NTDBQRX.png\" style=\"flex:1; margin:5px;\" height=\"450\"\u003e  \n \u003cimg src=\"https://i.imgur.com/JWAsVQ6.png\" style=\"flex:1; margin:5px;\" height=\"450\"\u003e  \n \u003cimg src=\"https://i.imgur.com/Gw0vnrb.png\" style=\"flex:1; margin:5px;\" height=\"450\"\u003e  \n \u003cimg src=\"https://i.imgur.com/Odc7Gic.png\" style=\"flex:1; margin:5px;\" height=\"450\"\u003e  \n\n\u003c/div\u003e\n\n\n# API\nThis project uses the [Open-Meteo](https://open-meteo.com/) API to fetch weather data.\n\n\n\n## Architecture\nThe architecture of this application relies and complies with the following points below:\n* A single-activity architecture, using the [ViewPager2](https://developer.android.com/develop/ui/views/animations/screen-slide-2) to display a collection of fragments in a scrollable, swipeable interface.\n* Pattern [Model-View-ViewModel](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel)(MVVM) which facilitates a separation of development of the graphical user interface.\n* [Android architecture components](https://developer.android.com/topic/libraries/architecture/) which help to keep the application robust, testable, and maintainable.\n\n\u003cp align=\"center\"\u003e\u003ca\u003e\u003cimg src=\"https://raw.githubusercontent.com/mayokunthefirst/Instant-Weather/master/media/final-architecture.png\" width=\"700\"\u003e\u003c/a\u003e\u003c/p\u003e  \n\n## Package Structure\n```  \ncom.yassineabou.weather        # Root package  \n├── data                   # For data modeling layer  \n│   ├── local              # Local persistence database  \n|   ├── model              # Model classes  \n│   ├── remote             # Remote data source  \n│   └── repository         # Repositories for single source of data  \n|  \n├── di                     # Dependency injection modules  \n│  \n├── ui                     # Activity / Fragment / ViewModel  \n│   ├── addLocation        # Allows user to add new locations\n│   ├── currentWeather     # Presents current weather details\n|   ├── dailyForecast      # Showcases daily weather forecast\n|   ├── hourlyForecast     # Illustrates hourly weather forecast  \n|   ├── listLocations      # Lists saved locations\n|   ├── PagerAdapter       # Adapter for viewPager2  \n|   ├── MainActivity       # Single activity  \n│   └── MainViewModel      # Shared viewModel  \n|  \n├── utils                  # Utility classes / Kotlin extensions  \n└── WeatherApplication     # Application  \n  \n```  \n\n\n## Built With 🧰\n\n- [Baseline Profiles](https://developer.android.com/topic/performance/baselineprofiles/overview) (Performance optimization tool)\n- [ViewPager2](https://developer.android.com/develop/ui/views/animations/screen-slide-2) (Swipeable pager)\n- [Dots Indicator](https://github.com/tommybuonomo/dotsindicator) (Material view pager dots indicator)\n- [Data Binding](https://developer.android.com/topic/libraries/data-binding) (Bind views)\n- [StateFlow](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow) (State observable)\n- [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel) (Store and manage UI-related data)\n- [Kotlin Coroutine](https://developer.android.com/kotlin/coroutines) (Light-weight threads)\n- [Google Play services](https://developers.google.com/android/guides/setup) (Google service integration)\n- [Moshi](https://github.com/square/moshi) (JSON serialization)\n- [Hilt](https://dagger.dev/hilt/) (Dependency injection for android)\n- [Retrofit2](https://github.com/square/retrofit) (HTTP client for APIs)\n- [Room](https://developer.android.com/topic/libraries/architecture/room) (Abstraction layer over SQLite)\n- [Sdp](https://github.com/intuit/sdp) (Scalable size unit)\n- [DataStore](https://developer.android.com/topic/libraries/architecture/datastore) (Key-value storage)\n- [Ssp](https://github.com/intuit/ssp) (Scalable size unit for texts)\n- [Kpermissions](https://github.com/fondesa/kpermissions) (Coroutines based runtime permissions)\n\n\n## Contribution\nWe welcome contributions to our project! Please follow these guidelines when submitting changes:\n\n- Report bugs and feature requests by creating an issue on our GitHub repository.\n- Contribute code changes by forking the repository and creating a new branch.\n- Ensure your code follows our coding conventions.\n- Improve our documentation by submitting changes as a pull request.\n\nThank you for your interest in contributing to our project!\n\n## License\n```\nCopyright 2023 Yassine Abou \n  \nLicensed under the Apache License, Version 2.0 (the \"License\");  \nyou may not use this file except in compliance with the License.  \nYou may obtain a copy of the License at  \n  \n    http://www.apache.org/licenses/LICENSE-2.0  \n  \nUnless required by applicable law or agreed to in writing, software  \ndistributed under the License is distributed on an \"AS IS\" BASIS,  \nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  \nSee the License for the specific language governing permissions and  \nlimitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyassineabou%2Fweather","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyassineabou%2Fweather","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyassineabou%2Fweather/lists"}