{"id":24946350,"url":"https://github.com/moatazbadawy/bosta-task","last_synced_at":"2026-05-17T19:34:46.559Z","repository":{"id":214393804,"uuid":"735994235","full_name":"MoatazBadawy/Bosta-Task","owner":"MoatazBadawy","description":"Bosta android-app task. Built with Kotlin, Jetpack Compose. Powered by Retrofit, OkHttp, Coroutines, Android Jetpack, Hilt. Structured by Clean Architecture, MVVM, Repository Pattern.","archived":false,"fork":false,"pushed_at":"2023-12-27T23:26:45.000Z","size":264,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-02T20:27:49.420Z","etag":null,"topics":["android","android-jetpack","clean-architecture","coroutines","hilt","jetpack-compose","kotlin","mvvm","okhttp","repository-pattern","retrofit2"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MoatazBadawy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2023-12-26T17:15:33.000Z","updated_at":"2024-01-03T10:02:31.000Z","dependencies_parsed_at":"2025-02-02T20:35:12.792Z","dependency_job_id":null,"html_url":"https://github.com/MoatazBadawy/Bosta-Task","commit_stats":null,"previous_names":["moatazbadawy/bosta-task"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoatazBadawy%2FBosta-Task","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoatazBadawy%2FBosta-Task/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoatazBadawy%2FBosta-Task/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoatazBadawy%2FBosta-Task/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MoatazBadawy","download_url":"https://codeload.github.com/MoatazBadawy/Bosta-Task/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246085638,"owners_count":20721212,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-jetpack","clean-architecture","coroutines","hilt","jetpack-compose","kotlin","mvvm","okhttp","repository-pattern","retrofit2"],"created_at":"2025-02-02T20:23:55.253Z","updated_at":"2025-10-26T21:09:16.943Z","avatar_url":"https://github.com/MoatazBadawy.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eBosta: Tech Company Task\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://android-arsenal.com/api?level=24\"\u003e\u003cimg alt=\"API\" src=\"https://img.shields.io/badge/API-24%2B-brightgreen.svg?style=flat\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://kotlinlang.org\"\u003e\u003cimg alt=\"Kotlin\" src=\"https://img.shields.io/badge/Kotlin-1.9.xxx-a97bff\"/\u003e\u003c/a\u003e\n  \u003cimg alt=\"Clean Architecture\" src=\"https://img.shields.io/badge/Clean-Architecture-white\"/\u003e\n  \u003cimg alt=\"MVVM\" src=\"https://img.shields.io/badge/MVVM-Architecture-orange\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e  \n📦 Bosta task. Built with Kotlin, Jetpack Compose. Powered by Retrofit, OkHttp, Coroutines, Android Jetpack, and Hilt. Structured by Clean Architecture, MVVM, Repository Pattern.\n\u003c/p\u003e\n\u003c/br\u003e\n\nhttps://github.com/MoatazBadawy/Bosta-Task/assets/63272288/d104ffd7-cf81-4c9a-b192-1e2dbb2e65a0\n\n#### 🌟 Project Overview\nThe app contains the following features\n- [x] Get a random user every time open the app, and display Info and his albums in a list.\n- [x] Use Navigation Compose to navigate between app screens, and send arguments using parcelable. \n- [x] Search for images by title, and use a delay to give space to the user to write what he wants and reduce the number of requests on the API. \n- [x] Display the image on a new screen, and ZoomIn-ZoomOut, and share the image with friends outside the application.\n\n#### 🏗️ Project Architecture\nThe app follows the Clean Architecture structure and MVVM to provide logical simplicity and maintainability. \u003cbr\u003e \n- The domain layer contains UseCases that encapsulate a single, specific task that is part of the application's business logic. \u003cbr\u003e\n- The data layer implements the repository interface defined in the domain layer, providing a single source of truth for data. \u003cbr\u003e\n- The UI layer cnotance view and ViewModel layers, it uses all the components and classes related to the Android framework to get the data from the ViewModel layer and display it on the device.\n\n\u003cimg src=\"https://koenig-media.raywenderlich.com/uploads/2019/06/Clean-Architecture-graph.png\" width=\"500\" /\u003e\n\n#### 🧩 Structure\nThe app is structured by feature, every feature has it is one (data - domain - UI). \n\u003e [!NOTE]\n\u003e This structure is inside the project app (we didn't use Modularization).\n\n      + app/ \n          + di \u003c- handle app dependency injections modules.\n          + main \u003c- contains mainactivity class.\n      + common/ \n          + ui \u003c- the common ui components between the features.\n      + features/\n          + photos/ \n             + data \u003c- implements the repository interface defined in the domain layer\n               - remote \n               - repositories\n             + domain \u003c- contains UseCases that encapsulate the business logic.\n               - entities \n               - repository\n               - usecases\n             + UI \u003c- uses MVVM with ViewModels exposing StateFlow that the UI consumes.\n               - view\n               - viewmodel\n         + profile \u003c- have the same files as the photos feature.\n              \n\n## 🔧 Tech stack \u0026 Open-source libraries\n- Minimum SDK level 24\n- [Kotlin](https://kotlinlang.org/) based, [Coroutines](https://github.com/Kotlin/kotlinx.coroutines) for asynchronous.\n- [Jetpack Compose](https://developer.android.com/jetpack/compose) is Android's recommended by Google modern toolkit for building native UI.\n- Jetpack\n  - Lifecycle: Observe Android lifecycles and handle UI states upon the lifecycle changes.\n  - ViewModel: Manages UI-related data holder and lifecycle awareness. Allows data to survive configuration changes such as screen rotations.\n  - StateFlow: For reactive style programming (from VM to UI). \n  - [Hilt](https://dagger.dev/hilt/): for dependency injection.\n  - [Compose Navigation](https://developer.android.com/jetpack/compose/navigation) - Used to navigate between compose screens\n  - [Material-Components](https://github.com/material-components/material-components-android) - Material design components like ripple animation, cardView.\n- Architecture\n  - Clean Architecture (Data - Domain - UI)\n  - MVVM Architecture (View - DataBinding - ViewModel - Model)\n  - Repository Pattern\n- [Retrofit2 \u0026 OkHttp3](https://github.com/square/retrofit): Construct the REST APIs and paging network data.\n- [Coil](https://coil-kt.github.io/coil/): An image loading library for Android backed by Kotlin Coroutines.\n- [Kotlin-DSL](https://docs.gradle.org/current/userguide/kotlin_dsl.html) - Used to handle gradle dependencies and config versions\n- [ksp](https://github.com/google/ksp): Kotlin Symbol Processing API.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoatazbadawy%2Fbosta-task","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoatazbadawy%2Fbosta-task","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoatazbadawy%2Fbosta-task/lists"}