# nauhalf/rick-n-morty architecture

> Architecture diagram of the GitHub repository nauhalf/rick-n-morty, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nauhalf/rick-n-morty
- Repository: https://github.com/nauhalf/rick-n-morty

## Overview

Rick-n-Morty is an Android character browser: users view the first page of characters, select one, and see biographical details and episode information. The graph follows the documented list/detail workflow and the sampled repository and detail-screen implementation. Main-screen and ViewModel wiring is inferred from the named modules and documented behavior; unsampled internal calls are not expanded beyond that evidence.

Main entry points: [`app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailActivity.kt`](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailActivity.kt) (Character detail), [`app/src/main/java/com/nauhalf/ricknmorty/view/main/MainActivity.kt`](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/main/MainActivity.kt) (Character list), [`app/src/main/java/com/nauhalf/ricknmorty/data/character/implementation/repository/CharacterRepositoryImpl.kt`](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/character/implementation/repository/CharacterRepositoryImpl.kt) (Character repository), [`app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailViewModel.kt`](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailViewModel.kt) (Detail ViewModel)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Screens and presentation"]
  node_main["Character list<br/>[MainActivity.kt]"]
  node_mainvm["List ViewModel<br/>[MainViewModel.kt]"]
  node_detail["Character detail<br/>[DetailActivity.kt]"]
  node_detailvm["Detail ViewModel<br/>[DetailViewModel.kt]"]
  node_characterui["Detail presentation"]
  node_characteradapter["Character list adapter"]
  node_detailadapter["Detail list adapter"]
end

subgraph group_domain["Domain actions"]
  node_allcharacters["Fetch all characters"]
  node_character["Fetch character"]
  node_episode["Fetch episode"]
end

subgraph group_data["Character and episode data"]
  node_characterrepo["Character repository"]
  node_episoderepo["Episode repository"]
  node_charactermodel["Character model<br/>[Character.kt]"]
  node_episodemodel["Episode model<br/>[Episode.kt]"]
end

subgraph group_network["Network integration"]
  node_characterapi["Character API client"]
  node_episodeapi["Episode API client"]
  node_networkmodule["Network setup<br/>[NetworkModule.kt]"]
  node_glide["Image loading<br/>[MyGlideModule.kt]"]
end

node_user(("User"))
node_api{{"Rick and Morty API"}}
node_images{{"Character image host"}}

node_user -->|"opens list"| node_main
node_main -->|"requests list"| node_mainvm
node_mainvm -->|"fetches characters"| node_allcharacters
node_allcharacters -->|"requests all"| node_characterrepo
node_characterrepo -->|"calls client"| node_characterapi
node_characterapi -->|"fetches list"| node_api
node_characterrepo -->|"maps response"| node_charactermodel
node_main -->|"shows characters"| node_characteradapter
node_user -->|"selects character"| node_main
node_main -->|"opens selection"| node_detail
node_detail -->|"requests details"| node_detailvm
node_detailvm -->|"fetches character"| node_character
node_character -->|"requests character"| node_characterrepo
node_detailvm -->|"loads episode"| node_episode
node_episode -->|"requests episode"| node_episoderepo
node_episoderepo -->|"calls client"| node_episodeapi
node_episodeapi -->|"fetches episode"| node_api
node_episoderepo -->|"maps response"| node_episodemodel
node_detail -->|"submits detail list"| node_detailadapter
node_detail -->|"builds detail rows"| node_characterui
node_detail -.->|"loads image"| node_glide
node_glide -.->|"retrieves image"| node_images
node_networkmodule -->|"provides client"| node_characterapi
node_networkmodule -->|"provides client"| node_episodeapi

click node_main "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/main/MainActivity.kt"
click node_mainvm "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/main/MainViewModel.kt"
click node_detail "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailActivity.kt"
click node_detailvm "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailViewModel.kt"
click node_characterui "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/CharacterDetailUiModel.kt"
click node_characteradapter "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/main/CharacterAdapter.kt"
click node_detailadapter "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/CharacterDetailAdapter.kt"
click node_allcharacters "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/domain/character/usecase/FetchAllCharacterUseCase.kt"
click node_character "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/domain/character/usecase/FetchCharacterUseCase.kt"
click node_episode "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/domain/episode/usecase/FetchEpisodeUseCase.kt"
click node_characterrepo "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/character/implementation/repository/CharacterRepositoryImpl.kt"
click node_episoderepo "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/episode/implementation/repository/EpisodeRepositoryImpl.kt"
click node_charactermodel "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/character/api/model/Character.kt"
click node_episodemodel "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/episode/api/model/Episode.kt"
click node_characterapi "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/character/implementation/remote/api/CharacterApiService.kt"
click node_episodeapi "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/episode/implementation/remote/api/EpisodeApiService.kt"
click node_networkmodule "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/core/network/module/NetworkModule.kt"
click node_glide "https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/di/MyGlideModule.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_main,node_mainvm,node_detail,node_detailvm,node_characterui,node_characteradapter,node_detailadapter,node_user toneBlue
class node_allcharacters,node_character,node_episode toneAmber
class node_characterrepo,node_episoderepo,node_charactermodel,node_episodemodel,node_api toneMint
class node_characterapi,node_episodeapi,node_networkmodule,node_glide toneRose
class node_images toneIndigo
```

## Components

### Screens and presentation

- [Character list](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/main/MainActivity.kt): `app/src/main/java/com/nauhalf/ricknmorty/view/main/MainActivity.kt`
- [List ViewModel](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/main/MainViewModel.kt): `app/src/main/java/com/nauhalf/ricknmorty/view/main/MainViewModel.kt`
- [Character detail](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailActivity.kt): `app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailActivity.kt`
- [Detail ViewModel](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailViewModel.kt): `app/src/main/java/com/nauhalf/ricknmorty/view/detail/DetailViewModel.kt`
- [Detail presentation](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/CharacterDetailUiModel.kt): `app/src/main/java/com/nauhalf/ricknmorty/view/detail/CharacterDetailUiModel.kt`
- [Character list adapter](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/main/CharacterAdapter.kt): `app/src/main/java/com/nauhalf/ricknmorty/view/main/CharacterAdapter.kt`
- [Detail list adapter](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/view/detail/CharacterDetailAdapter.kt): `app/src/main/java/com/nauhalf/ricknmorty/view/detail/CharacterDetailAdapter.kt`

### Domain actions

- [Fetch all characters](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/domain/character/usecase/FetchAllCharacterUseCase.kt): `app/src/main/java/com/nauhalf/ricknmorty/domain/character/usecase/FetchAllCharacterUseCase.kt`
- [Fetch character](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/domain/character/usecase/FetchCharacterUseCase.kt): `app/src/main/java/com/nauhalf/ricknmorty/domain/character/usecase/FetchCharacterUseCase.kt`
- [Fetch episode](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/domain/episode/usecase/FetchEpisodeUseCase.kt): `app/src/main/java/com/nauhalf/ricknmorty/domain/episode/usecase/FetchEpisodeUseCase.kt`

### Character and episode data

- [Character repository](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/character/implementation/repository/CharacterRepositoryImpl.kt): `app/src/main/java/com/nauhalf/ricknmorty/data/character/implementation/repository/CharacterRepositoryImpl.kt`
- [Episode repository](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/episode/implementation/repository/EpisodeRepositoryImpl.kt): `app/src/main/java/com/nauhalf/ricknmorty/data/episode/implementation/repository/EpisodeRepositoryImpl.kt`
- [Character model](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/character/api/model/Character.kt): `app/src/main/java/com/nauhalf/ricknmorty/data/character/api/model/Character.kt`
- [Episode model](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/episode/api/model/Episode.kt): `app/src/main/java/com/nauhalf/ricknmorty/data/episode/api/model/Episode.kt`

### Network integration

- [Character API client](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/character/implementation/remote/api/CharacterApiService.kt): `app/src/main/java/com/nauhalf/ricknmorty/data/character/implementation/remote/api/CharacterApiService.kt`
- [Episode API client](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/data/episode/implementation/remote/api/EpisodeApiService.kt): `app/src/main/java/com/nauhalf/ricknmorty/data/episode/implementation/remote/api/EpisodeApiService.kt`
- [Network setup](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/core/network/module/NetworkModule.kt): `app/src/main/java/com/nauhalf/ricknmorty/core/network/module/NetworkModule.kt`
- [Image loading](https://github.com/nauhalf/rick-n-morty/blob/master/app/src/main/java/com/nauhalf/ricknmorty/di/MyGlideModule.kt): `app/src/main/java/com/nauhalf/ricknmorty/di/MyGlideModule.kt`

### Other components

- **User**
- **Rick and Morty API**
- **Character image host**

## Connections

- User → Character list: opens list
- Character list → List ViewModel: requests list
- List ViewModel → Fetch all characters: fetches characters
- Fetch all characters → Character repository: requests all
- Character repository → Character API client: calls client
- Character API client → Rick and Morty API: fetches list
- Character repository → Character model: maps response
- Character list → Character list adapter: shows characters
- User → Character list: selects character
- Character list → Character detail: opens selection
- Character detail → Detail ViewModel: requests details
- Detail ViewModel → Fetch character: fetches character
- Fetch character → Character repository: requests character
- Detail ViewModel → Fetch episode: loads episode
- Fetch episode → Episode repository: requests episode
- Episode repository → Episode API client: calls client
- Episode API client → Rick and Morty API: fetches episode
- Episode repository → Episode model: maps response
- Character detail → Detail list adapter: submits detail list
- Character detail → Detail presentation: builds detail rows
- Character detail → Image loading: loads image
- Image loading → Character image host: retrieves image
- Network setup → Character API client: provides client
- Network setup → Episode API client: provides client
