# m4ykey/albly architecture

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

- Interactive diagram: https://gitdiagram.com/m4ykey/albly
- Repository: https://github.com/m4ykey/albly

## Overview

Albly is an Android music-discovery and album-collection app. Users enter through the collection screen, navigate to album search, new releases, saved albums, album details, and lyrics, with navigation wiring shown in NavigationRoot. Album and search repositories mediate remote and local data; lyrics has a separate remote-backed feature. The README documents Discogs and Genius credentials but gives little further product detail. Relationships beyond the indexed references and excerpts are omitted where their implementation is not shown.

Main entry points: [`navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`](https://github.com/m4ykey/albly/blob/main/navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt) (Navigation root), [`album/src/main/java/com/m4ykey/album/data/repository/AlbumRepositoryImpl.kt`](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/repository/AlbumRepositoryImpl.kt) (Album repository), [`search/src/main/java/com/m4ykey/search/presentation/SearchScreen.kt`](https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/presentation/SearchScreen.kt) (Search screen), [`collection/src/main/java/com/m4ykey/collection/presentation/CollectionScreen.kt`](https://github.com/m4ykey/albly/blob/main/collection/src/main/java/com/m4ykey/collection/presentation/CollectionScreen.kt) (Collection screen)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and navigation"]
  node_entry["App entry<br/>[MainActivity.kt]"]
  node_navigation["Navigation root<br/>[NavigationRoot.kt]"]
end

subgraph group_album["Album discovery and library"]
  node_album_screens["Album screens"]
  node_album_viewmodel["Album view models"]
  node_album_usecases["Album use cases"]
  node_album_repository["Album repository"]
  node_album_remote["Album services<br/>[AlbumService.kt]"]
  node_new_releases["New releases"]
  node_album_paging["Release paging"]
  node_album_database[("Album database<br/>[AppDatabase.kt]")]
  node_album_dao["Album DAO<br/>[AlbumDao.kt]"]
  node_album_models["Album storage models<br/>[AlbumEntity.kt]"]
end

subgraph group_search["Search and lyrics"]
  node_search_screen["Search screen<br/>[SearchScreen.kt]"]
  node_search_vm["Search view model<br/>[SearchViewModel.kt]"]
  node_search_usecases["Search use cases"]
  node_search_repository["Search repository"]
  node_search_services["Search services<br/>[SearchService.kt]"]
  node_search_paging["Search paging"]
  node_lyrics_screen["Lyrics screen<br/>[LyricsScreen.kt]"]
  node_lyrics_vm["Lyrics view model<br/>[LyricsViewModel.kt]"]
  node_lyrics_repository["Lyrics repository"]
  node_lyrics_service["Lyrics service"]
end

subgraph group_collection["Collection interface"]
  node_collection_screen["Collection screen"]
  node_collection_vm["Collection view model"]
end

subgraph group_shared["Shared UI and settings"]
  node_settings["Settings<br/>[SettingsScreen.kt]"]
  node_theme["App theme<br/>[Color.kt]"]
end

node_user(("App user"))
node_discogs(("Discogs API"))
node_genius(("Genius API"))

node_user -.->|"opens app"| node_entry
node_entry -->|"starts"| node_navigation
node_navigation -->|"routes to"| node_collection_screen
node_navigation -->|"routes to"| node_search_screen
node_navigation -->|"routes to"| node_album_screens
node_navigation -->|"routes to"| node_lyrics_screen
node_navigation -->|"routes to"| node_settings
node_album_repository -->|"calls"| node_album_remote
node_album_repository -->|"calls"| node_new_releases
node_album_repository -->|"creates"| node_album_paging
node_album_repository -->|"reads and writes"| node_album_dao
node_album_database -->|"defines"| node_album_dao
node_album_database -->|"stores"| node_album_models
node_search_repository -->|"calls"| node_search_services
node_search_repository -->|"creates"| node_search_paging
node_lyrics_repository -->|"calls"| node_lyrics_service
node_search_services -.->|"queries"| node_discogs
node_lyrics_service -.->|"queries"| node_genius
node_search_screen -->|"opens album"| node_album_screens
node_search_screen -->|"opens lyrics"| node_lyrics_screen
node_collection_screen -->|"opens album"| node_album_screens
node_collection_screen -->|"opens search"| node_search_screen

click node_entry "https://github.com/m4ykey/albly/blob/main/app/src/main/java/com/m4ykey/albly/app/MainActivity.kt"
click node_navigation "https://github.com/m4ykey/albly/blob/main/navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt"
click node_album_screens "https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/presentation/detail/AlbumDetailScreen.kt"
click node_album_viewmodel "https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/presentation/detail/AlbumDetailViewModel.kt"
click node_album_usecases "https://github.com/m4ykey/albly/tree/main/album/src/main/java/com/m4ykey/album/domain/usecase"
click node_album_repository "https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/repository/AlbumRepositoryImpl.kt"
click node_album_remote "https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/network/service/AlbumService.kt"
click node_new_releases "https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/network/service/RemoteNewReleaseAlbumService.kt"
click node_album_paging "https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/paging/NewReleasePagingSource.kt"
click node_album_database "https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/database/AppDatabase.kt"
click node_album_dao "https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/local/dao/AlbumDao.kt"
click node_album_models "https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/local/model/AlbumEntity.kt"
click node_search_screen "https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/presentation/SearchScreen.kt"
click node_search_vm "https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/presentation/SearchViewModel.kt"
click node_search_usecases "https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/domain/usecase/SearchAlbumUseCase.kt"
click node_search_repository "https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/data/repository/SearchRepositoryImpl.kt"
click node_search_services "https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/data/network/service/SearchService.kt"
click node_search_paging "https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/data/paging/SearchAlbumPagingSource.kt"
click node_lyrics_screen "https://github.com/m4ykey/albly/blob/main/lyrics/src/main/java/com/m4ykey/lyrics/presentation/LyricsScreen.kt"
click node_lyrics_vm "https://github.com/m4ykey/albly/blob/main/lyrics/src/main/java/com/m4ykey/lyrics/presentation/LyricsViewModel.kt"
click node_lyrics_repository "https://github.com/m4ykey/albly/blob/main/lyrics/src/main/java/com/m4ykey/lyrics/data/repository/LyricsRepositoryImpl.kt"
click node_lyrics_service "https://github.com/m4ykey/albly/blob/main/lyrics/src/main/java/com/m4ykey/lyrics/data/service/RemoteLyricsService.kt"
click node_collection_screen "https://github.com/m4ykey/albly/blob/main/collection/src/main/java/com/m4ykey/collection/presentation/CollectionScreen.kt"
click node_collection_vm "https://github.com/m4ykey/albly/blob/main/collection/src/main/java/com/m4ykey/collection/presentation/CollectionViewModel.kt"
click node_settings "https://github.com/m4ykey/albly/blob/main/settings/src/main/java/com/m4ykey/settings/SettingsScreen.kt"
click node_theme "https://github.com/m4ykey/albly/blob/main/app/src/main/java/com/m4ykey/albly/app/ui/theme/Color.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_entry,node_navigation,node_user toneBlue
class node_album_screens,node_album_viewmodel,node_album_usecases,node_album_repository,node_album_remote,node_new_releases,node_album_paging,node_album_database,node_album_dao,node_album_models toneAmber
class node_search_screen,node_search_vm,node_search_usecases,node_search_repository,node_search_services,node_search_paging,node_lyrics_screen,node_lyrics_vm,node_lyrics_repository,node_lyrics_service,node_discogs,node_genius toneMint
class node_collection_screen,node_collection_vm toneRose
class node_settings,node_theme toneIndigo
```

## Components

### App and navigation

- [App entry](https://github.com/m4ykey/albly/blob/main/app/src/main/java/com/m4ykey/albly/app/MainActivity.kt): `app/src/main/java/com/m4ykey/albly/app/MainActivity.kt`
- [Navigation root](https://github.com/m4ykey/albly/blob/main/navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt): `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`

### Album discovery and library

- [Album screens](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/presentation/detail/AlbumDetailScreen.kt): `album/src/main/java/com/m4ykey/album/presentation/detail/AlbumDetailScreen.kt`
- [Album view models](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/presentation/detail/AlbumDetailViewModel.kt): `album/src/main/java/com/m4ykey/album/presentation/detail/AlbumDetailViewModel.kt`
- [Album use cases](https://github.com/m4ykey/albly/tree/main/album/src/main/java/com/m4ykey/album/domain/usecase): `album/src/main/java/com/m4ykey/album/domain/usecase`
- [Album repository](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/repository/AlbumRepositoryImpl.kt): `album/src/main/java/com/m4ykey/album/data/repository/AlbumRepositoryImpl.kt`
- [Album services](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/network/service/AlbumService.kt): `album/src/main/java/com/m4ykey/album/data/network/service/AlbumService.kt`
- [New releases](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/network/service/RemoteNewReleaseAlbumService.kt): `album/src/main/java/com/m4ykey/album/data/network/service/RemoteNewReleaseAlbumService.kt`
- [Release paging](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/paging/NewReleasePagingSource.kt): `album/src/main/java/com/m4ykey/album/data/paging/NewReleasePagingSource.kt`
- [Album database](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/database/AppDatabase.kt): `album/src/main/java/com/m4ykey/album/data/database/AppDatabase.kt`
- [Album DAO](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/local/dao/AlbumDao.kt): `album/src/main/java/com/m4ykey/album/data/local/dao/AlbumDao.kt`
- [Album storage models](https://github.com/m4ykey/albly/blob/main/album/src/main/java/com/m4ykey/album/data/local/model/AlbumEntity.kt): `album/src/main/java/com/m4ykey/album/data/local/model/AlbumEntity.kt`

### Search and lyrics

- [Search screen](https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/presentation/SearchScreen.kt): `search/src/main/java/com/m4ykey/search/presentation/SearchScreen.kt`
- [Search view model](https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/presentation/SearchViewModel.kt): `search/src/main/java/com/m4ykey/search/presentation/SearchViewModel.kt`
- [Search use cases](https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/domain/usecase/SearchAlbumUseCase.kt): `search/src/main/java/com/m4ykey/search/domain/usecase/SearchAlbumUseCase.kt`
- [Search repository](https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/data/repository/SearchRepositoryImpl.kt): `search/src/main/java/com/m4ykey/search/data/repository/SearchRepositoryImpl.kt`
- [Search services](https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/data/network/service/SearchService.kt): `search/src/main/java/com/m4ykey/search/data/network/service/SearchService.kt`
- [Search paging](https://github.com/m4ykey/albly/blob/main/search/src/main/java/com/m4ykey/search/data/paging/SearchAlbumPagingSource.kt): `search/src/main/java/com/m4ykey/search/data/paging/SearchAlbumPagingSource.kt`
- [Lyrics screen](https://github.com/m4ykey/albly/blob/main/lyrics/src/main/java/com/m4ykey/lyrics/presentation/LyricsScreen.kt): `lyrics/src/main/java/com/m4ykey/lyrics/presentation/LyricsScreen.kt`
- [Lyrics view model](https://github.com/m4ykey/albly/blob/main/lyrics/src/main/java/com/m4ykey/lyrics/presentation/LyricsViewModel.kt): `lyrics/src/main/java/com/m4ykey/lyrics/presentation/LyricsViewModel.kt`
- [Lyrics repository](https://github.com/m4ykey/albly/blob/main/lyrics/src/main/java/com/m4ykey/lyrics/data/repository/LyricsRepositoryImpl.kt): `lyrics/src/main/java/com/m4ykey/lyrics/data/repository/LyricsRepositoryImpl.kt`
- [Lyrics service](https://github.com/m4ykey/albly/blob/main/lyrics/src/main/java/com/m4ykey/lyrics/data/service/RemoteLyricsService.kt): `lyrics/src/main/java/com/m4ykey/lyrics/data/service/RemoteLyricsService.kt`

### Collection interface

- [Collection screen](https://github.com/m4ykey/albly/blob/main/collection/src/main/java/com/m4ykey/collection/presentation/CollectionScreen.kt): `collection/src/main/java/com/m4ykey/collection/presentation/CollectionScreen.kt`
- [Collection view model](https://github.com/m4ykey/albly/blob/main/collection/src/main/java/com/m4ykey/collection/presentation/CollectionViewModel.kt): `collection/src/main/java/com/m4ykey/collection/presentation/CollectionViewModel.kt`

### Shared UI and settings

- [Settings](https://github.com/m4ykey/albly/blob/main/settings/src/main/java/com/m4ykey/settings/SettingsScreen.kt): `settings/src/main/java/com/m4ykey/settings/SettingsScreen.kt`
- [App theme](https://github.com/m4ykey/albly/blob/main/app/src/main/java/com/m4ykey/albly/app/ui/theme/Color.kt): `app/src/main/java/com/m4ykey/albly/app/ui/theme/Color.kt`

### Other components

- **App user**
- **Discogs API**
- **Genius API**

## Connections

- App user → App entry: opens app
- App entry → Navigation root: starts (evidence: `app/src/main/java/com/m4ykey/albly/app/MainActivity.kt`)
- Navigation root → Collection screen: routes to (evidence: `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`)
- Navigation root → Search screen: routes to (evidence: `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`)
- Navigation root → Album screens: routes to (evidence: `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`)
- Navigation root → Lyrics screen: routes to (evidence: `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`)
- Navigation root → Settings: routes to (evidence: `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`)
- Album repository → Album services: calls (evidence: `album/src/main/java/com/m4ykey/album/data/repository/AlbumRepositoryImpl.kt`)
- Album repository → New releases: calls (evidence: `album/src/main/java/com/m4ykey/album/data/repository/AlbumRepositoryImpl.kt`)
- Album repository → Release paging: creates (evidence: `album/src/main/java/com/m4ykey/album/data/repository/AlbumRepositoryImpl.kt`)
- Album repository → Album DAO: reads and writes (evidence: `album/src/main/java/com/m4ykey/album/data/repository/AlbumRepositoryImpl.kt`)
- Album database → Album DAO: defines (evidence: `album/src/main/java/com/m4ykey/album/data/database/AppDatabase.kt`)
- Album database → Album storage models: stores (evidence: `album/src/main/java/com/m4ykey/album/data/database/AppDatabase.kt`)
- Search repository → Search services: calls (evidence: `search/src/main/java/com/m4ykey/search/data/repository/SearchRepositoryImpl.kt`)
- Search repository → Search paging: creates (evidence: `search/src/main/java/com/m4ykey/search/data/repository/SearchRepositoryImpl.kt`)
- Lyrics repository → Lyrics service: calls (evidence: `lyrics/src/main/java/com/m4ykey/lyrics/data/repository/LyricsRepositoryImpl.kt`)
- Search services → Discogs API: queries (evidence: `search/src/main/java/com/m4ykey/search/data/network/service/SearchService.kt`)
- Lyrics service → Genius API: queries
- Search screen → Album screens: opens album (evidence: `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`)
- Search screen → Lyrics screen: opens lyrics (evidence: `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`)
- Collection screen → Album screens: opens album (evidence: `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`)
- Collection screen → Search screen: opens search (evidence: `navigation/src/main/java/com/m4ykey/navigation/NavigationRoot.kt`)
