# mohamad-abuzaid/kotlin-mvvm-clean-koin-compose architecture

> Architecture diagram of the GitHub repository mohamad-abuzaid/kotlin-mvvm-clean-koin-compose, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose
- Repository: https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose

## Overview

This is a modular Android Compose starter centered on authentication: users enter the authentication flow, can select a language, and proceed through user, VIP, or VVIP login against remote services. The app separates UI/navigation, domain contracts and use cases, and data implementations; preferences and token refresh support local session state. The README also advertises theme support, coroutines/Flow, and Retrofit. Some wiring is inferred only from module structure, so uncertain screen-to-view-model and use-case calls are omitted.

Main entry points: [`app/src/main/java/com/compose/clean/navigation/authentication/AuthNavGraph.kt`](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/navigation/authentication/AuthNavGraph.kt) (Authentication navigation), [`app/src/main/java/com/compose/clean/ui/authentication/AuthenticationActivity.kt`](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/authentication/AuthenticationActivity.kt) (Authentication activity), [`app/src/main/java/com/compose/clean/navigation/main/MainNavGraph.kt`](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/navigation/main/MainNavGraph.kt) (Main navigation), [`data/src/main/java/com/compose/clean/data/network/service/authentication/LanguageApiService.kt`](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/network/service/authentication/LanguageApiService.kt) (Language API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App UI"]
  node_auth_activity["Authentication activity"]
  node_auth_nav["Authentication navigation<br/>[AuthNavGraph.kt]"]
  node_splash["Splash screen<br/>[SplashScreen.kt]"]
  node_language_screen["Language selection"]
  node_login_screen["Login screen<br/>[LoginScreen.kt]"]
  node_main_activity["Main activity<br/>[MainActivity.kt]"]
  node_main_nav["Main navigation<br/>[MainNavGraph.kt]"]
  node_home["Home screen<br/>[HomeScreen.kt]"]
  node_bottom_nav["Bottom navigation"]
  node_theme["App theme<br/>[Theme.kt]"]
end

subgraph group_domain["Domain"]
  node_language_usecase["Language use case<br/>[LanguageUseCase.kt]"]
  node_login_usecases["Login use cases"]
  node_language_contract["Language repository contract"]
  node_login_contract["Login repository contract<br/>[LoginRepository.kt]"]
end

subgraph group_data["Data access"]
  node_language_repo["Language repository"]
  node_login_repo["Login repository"]
  node_language_api["Language API"]
  node_login_api["Login API<br/>[LoginApiService.kt]"]
  node_token_manager["Token manager<br/>[TokenManager.kt]"]
  node_token_api["Token API<br/>[TokenApiService.kt]"]
  node_preferences[("Preferences storage")]
end

subgraph group_di["Dependency injection"]
  node_services_di["Service bindings<br/>[ServicesModules.kt]"]
  node_repositories_di["Repository bindings"]
  node_usecases_di["Use-case bindings<br/>[UsecasesModule.kt]"]
end

node_user(("User"))
node_backend{{"Remote API"}}

node_user -->|"opens"| node_auth_activity
node_auth_activity -->|"starts"| node_auth_nav
node_auth_activity -->|"applies"| node_theme
node_auth_nav -->|"routes"| node_splash
node_auth_nav -->|"routes"| node_language_screen
node_auth_nav -->|"routes"| node_login_screen
node_user -->|"selects language"| node_language_screen
node_user -->|"submits credentials"| node_login_screen
node_user -->|"opens"| node_main_activity
node_main_activity -->|"starts"| node_main_nav
node_main_nav -->|"routes"| node_home
node_main_nav -->|"routes"| node_bottom_nav
node_language_repo -->|"calls"| node_language_api
node_login_repo -->|"calls"| node_login_api
node_language_api -->|"requests languages"| node_backend
node_login_api -->|"submits login"| node_backend
node_token_manager -->|"refreshes token"| node_token_api
node_token_api -->|"requests refresh"| node_backend
node_token_manager -->|"reads and writes"| node_preferences
node_repositories_di -->|"binds"| node_language_repo
node_repositories_di -->|"binds"| node_login_repo
node_services_di -->|"provides"| node_language_api
node_services_di -->|"provides"| node_login_api
node_usecases_di -->|"provides"| node_language_usecase
node_usecases_di -->|"provides"| node_login_usecases

click node_auth_activity "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/authentication/AuthenticationActivity.kt"
click node_auth_nav "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/navigation/authentication/AuthNavGraph.kt"
click node_splash "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/authentication/screens/splash/SplashScreen.kt"
click node_language_screen "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/authentication/screens/language/LanguageSelectScreen.kt"
click node_login_screen "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/authentication/screens/login/LoginScreen.kt"
click node_main_activity "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/main/MainActivity.kt"
click node_main_nav "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/navigation/main/MainNavGraph.kt"
click node_home "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/main/screens/home/HomeScreen.kt"
click node_bottom_nav "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/main/screens/bottom_navigation/BottomNavigationScreen.kt"
click node_theme "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/theme/Theme.kt"
click node_language_usecase "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/domain/src/main/java/com/compose/clean/domain/authentication/usecases/language/LanguageUseCase.kt"
click node_login_usecases "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/tree/master/domain/src/main/java/com/compose/clean/domain/authentication/usecases/login"
click node_language_contract "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/domain/src/main/java/com/compose/clean/domain/authentication/repositories/language/LanguageRepository.kt"
click node_login_contract "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/domain/src/main/java/com/compose/clean/domain/authentication/repositories/login/LoginRepository.kt"
click node_language_repo "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/repositories/authentication/languages/LanguageRepositoryImpl.kt"
click node_login_repo "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/repositories/authentication/login/LoginRepositoryImpl.kt"
click node_language_api "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/network/service/authentication/LanguageApiService.kt"
click node_login_api "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/network/service/authentication/LoginApiService.kt"
click node_token_manager "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/storage/TokenManager.kt"
click node_token_api "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/network/service/authentication/TokenApiService.kt"
click node_preferences "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/storage/PreferencesStorage.kt"
click node_services_di "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/di/src/main/java/com/compose/clean/di/ServicesModules.kt"
click node_repositories_di "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/di/src/main/java/com/compose/clean/di/RepositoriesModules.kt"
click node_usecases_di "https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/di/src/main/java/com/compose/clean/di/UsecasesModule.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_auth_activity,node_auth_nav,node_splash,node_language_screen,node_login_screen,node_main_activity,node_main_nav,node_home,node_bottom_nav,node_theme,node_user toneBlue
class node_language_usecase,node_login_usecases,node_language_contract,node_login_contract toneAmber
class node_language_repo,node_login_repo,node_language_api,node_login_api,node_token_manager,node_token_api,node_preferences,node_backend toneMint
class node_services_di,node_repositories_di,node_usecases_di toneRose
```

## Components

### App UI

- [Authentication activity](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/authentication/AuthenticationActivity.kt): `app/src/main/java/com/compose/clean/ui/authentication/AuthenticationActivity.kt`
- [Authentication navigation](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/navigation/authentication/AuthNavGraph.kt): `app/src/main/java/com/compose/clean/navigation/authentication/AuthNavGraph.kt`
- [Splash screen](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/authentication/screens/splash/SplashScreen.kt): `app/src/main/java/com/compose/clean/ui/authentication/screens/splash/SplashScreen.kt`
- [Language selection](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/authentication/screens/language/LanguageSelectScreen.kt): `app/src/main/java/com/compose/clean/ui/authentication/screens/language/LanguageSelectScreen.kt`
- [Login screen](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/authentication/screens/login/LoginScreen.kt): `app/src/main/java/com/compose/clean/ui/authentication/screens/login/LoginScreen.kt`
- [Main activity](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/main/MainActivity.kt): `app/src/main/java/com/compose/clean/ui/main/MainActivity.kt`
- [Main navigation](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/navigation/main/MainNavGraph.kt): `app/src/main/java/com/compose/clean/navigation/main/MainNavGraph.kt`
- [Home screen](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/main/screens/home/HomeScreen.kt): `app/src/main/java/com/compose/clean/ui/main/screens/home/HomeScreen.kt`
- [Bottom navigation](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/main/screens/bottom_navigation/BottomNavigationScreen.kt): `app/src/main/java/com/compose/clean/ui/main/screens/bottom_navigation/BottomNavigationScreen.kt`
- [App theme](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/app/src/main/java/com/compose/clean/ui/theme/Theme.kt): `app/src/main/java/com/compose/clean/ui/theme/Theme.kt`

### Domain

- [Language use case](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/domain/src/main/java/com/compose/clean/domain/authentication/usecases/language/LanguageUseCase.kt): `domain/src/main/java/com/compose/clean/domain/authentication/usecases/language/LanguageUseCase.kt`
- [Login use cases](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/tree/master/domain/src/main/java/com/compose/clean/domain/authentication/usecases/login): `domain/src/main/java/com/compose/clean/domain/authentication/usecases/login`
- [Language repository contract](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/domain/src/main/java/com/compose/clean/domain/authentication/repositories/language/LanguageRepository.kt): `domain/src/main/java/com/compose/clean/domain/authentication/repositories/language/LanguageRepository.kt`
- [Login repository contract](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/domain/src/main/java/com/compose/clean/domain/authentication/repositories/login/LoginRepository.kt): `domain/src/main/java/com/compose/clean/domain/authentication/repositories/login/LoginRepository.kt`

### Data access

- [Language repository](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/repositories/authentication/languages/LanguageRepositoryImpl.kt): `data/src/main/java/com/compose/clean/data/repositories/authentication/languages/LanguageRepositoryImpl.kt`
- [Login repository](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/repositories/authentication/login/LoginRepositoryImpl.kt): `data/src/main/java/com/compose/clean/data/repositories/authentication/login/LoginRepositoryImpl.kt`
- [Language API](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/network/service/authentication/LanguageApiService.kt): `data/src/main/java/com/compose/clean/data/network/service/authentication/LanguageApiService.kt`
- [Login API](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/network/service/authentication/LoginApiService.kt): `data/src/main/java/com/compose/clean/data/network/service/authentication/LoginApiService.kt`
- [Token manager](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/storage/TokenManager.kt): `data/src/main/java/com/compose/clean/data/storage/TokenManager.kt`
- [Token API](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/network/service/authentication/TokenApiService.kt): `data/src/main/java/com/compose/clean/data/network/service/authentication/TokenApiService.kt`
- [Preferences storage](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/data/src/main/java/com/compose/clean/data/storage/PreferencesStorage.kt): `data/src/main/java/com/compose/clean/data/storage/PreferencesStorage.kt`

### Dependency injection

- [Service bindings](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/di/src/main/java/com/compose/clean/di/ServicesModules.kt): `di/src/main/java/com/compose/clean/di/ServicesModules.kt`
- [Repository bindings](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/di/src/main/java/com/compose/clean/di/RepositoriesModules.kt): `di/src/main/java/com/compose/clean/di/RepositoriesModules.kt`
- [Use-case bindings](https://github.com/mohamad-abuzaid/kotlin-mvvm-clean-koin-compose/blob/master/di/src/main/java/com/compose/clean/di/UsecasesModule.kt): `di/src/main/java/com/compose/clean/di/UsecasesModule.kt`

### Other components

- **User**
- **Remote API**

## Connections

- User → Authentication activity: opens
- Authentication activity → Authentication navigation: starts
- Authentication activity → App theme: applies
- Authentication navigation → Splash screen: routes
- Authentication navigation → Language selection: routes
- Authentication navigation → Login screen: routes
- User → Language selection: selects language
- User → Login screen: submits credentials
- User → Main activity: opens
- Main activity → Main navigation: starts
- Main navigation → Home screen: routes
- Main navigation → Bottom navigation: routes
- Language repository → Language API: calls
- Login repository → Login API: calls
- Language API → Remote API: requests languages
- Login API → Remote API: submits login
- Token manager → Token API: refreshes token
- Token API → Remote API: requests refresh
- Token manager → Preferences storage: reads and writes
- Repository bindings → Language repository: binds
- Repository bindings → Login repository: binds
- Service bindings → Language API: provides
- Service bindings → Login API: provides
- Use-case bindings → Language use case: provides
- Use-case bindings → Login use cases: provides
