# more-than-solitaire/tabs-lite architecture

> Architecture diagram of the GitHub repository more-than-solitaire/tabs-lite, 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/more-than-solitaire/tabs-lite
- Repository: https://github.com/more-than-solitaire/tabs-lite

## Overview

Tabs Lite is an Android guitar-tab app: users search community songs, open a tab to play along, and keep tabs available offline through Favorites or playlists. The app also supports song/version browsing, creating songs and tabs, chord fingering lookup, transposition, and playback conveniences such as autoscroll. The graph connects sampled search and startup behavior to the local database and backend; other product branches are represented from the README and source tree, but their internal wiring was not sampled.

Main entry points: [`app/src/main/java/com/gbros/tabslite/data/DataAccess.kt`](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/data/DataAccess.kt) (Data access), [`app/src/main/java/com/gbros/tabslite/utilities/BackendConnection.kt`](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/utilities/BackendConnection.kt) (Backend connection), [`app/src/main/java/com/gbros/tabslite/HomeActivity.kt`](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/HomeActivity.kt) (Home activity), [`app/src/main/java/com/gbros/tabslite/viewmodel/SearchViewModel.kt`](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/SearchViewModel.kt) (Search logic)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App navigation"]
  node_activity["Home activity<br/>[HomeActivity.kt]"]
  node_navigation["Navigation host<br/>[RootNavHost.kt]"]
end

subgraph group_discovery["Find songs"]
  node_search_ui["Search screen<br/>[SearchScreen.kt]"]
  node_search_bar["Search bar<br/>[TabsSearchBar.kt]"]
  node_search_vm["Search logic<br/>[SearchViewModel.kt]"]
  node_search_session["Paged search<br/>[Search.kt]"]
  node_tab_search_vm["Suggestions logic"]
  node_versions["Song versions"]
end

subgraph group_tabs["Read and play"]
  node_tab_screen["Tab reader<br/>[TabScreen.kt]"]
  node_tab_vm["Tab logic<br/>[TabViewModel.kt]"]
  node_chords["Chord lookup"]
end

subgraph group_library["Offline library"]
  node_home["Home and favorites<br/>[HomeScreen.kt]"]
  node_playlists["Playlist screens<br/>[PlaylistScreen.kt]"]
  node_playlist_vm["Playlist logic"]
  node_creation["Create song and tab<br/>[CreateTabScreen.kt]"]
  node_creation_vm["Creation logic"]
end

subgraph group_services["Data services"]
  node_data_access["Data access<br/>[DataAccess.kt]"]
  node_database[("Local Room store<br/>[AppDatabase.kt]")]
  node_backend["Backend connection"]
end

node_user(("App user"))
node_remote[("Tabs backend")]

node_user -->|"opens app"| node_activity
node_activity -->|"hosts UI"| node_navigation
node_activity -->|"loads preferences"| node_data_access
node_activity -->|"fetches startup tabs"| node_backend
node_user -->|"enters query"| node_search_bar
node_search_bar -->|"updates query"| node_tab_search_vm
node_tab_search_vm -->|"fetches suggestions"| node_backend
node_tab_search_vm -->|"reads suggestions"| node_data_access
node_search_ui -->|"creates search logic"| node_search_vm
node_search_vm -->|"loads result pages"| node_search_session
node_search_vm -->|"fetches exact matches"| node_backend
node_search_vm -->|"observes cached matches"| node_data_access
node_search_session -->|"requests result page"| node_backend
node_search_session -->|"caches returned tabs"| node_data_access
node_versions -->|"shows versions"| node_user
node_user -->|"opens favorites"| node_home
node_user -->|"manages playlists"| node_playlists
node_playlists -->|"delegates actions"| node_playlist_vm
node_user -->|"creates content"| node_creation
node_creation -->|"delegates edits"| node_creation_vm
node_user -->|"opens tab"| node_tab_screen
node_tab_screen -->|"requests tab state"| node_tab_vm
node_tab_screen -->|"opens chord details"| node_chords
node_data_access -->|"reads and writes"| node_database
node_backend -->|"requests tab data"| node_remote

click node_activity "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/HomeActivity.kt"
click node_navigation "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/RootNavHost.kt"
click node_search_ui "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/searchresultsonglist/SearchScreen.kt"
click node_search_bar "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/tabsearchbar/TabsSearchBar.kt"
click node_search_vm "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/SearchViewModel.kt"
click node_search_session "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/data/Search.kt"
click node_tab_search_vm "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/TabSearchBarViewModel.kt"
click node_versions "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/songversionlist/SongVersionScreen.kt"
click node_home "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/homescreen/HomeScreen.kt"
click node_playlists "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/playlists/PlaylistScreen.kt"
click node_playlist_vm "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/PlaylistViewModel.kt"
click node_creation "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/createtab/CreateTabScreen.kt"
click node_creation_vm "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/CreateTabViewModel.kt"
click node_tab_screen "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/tabview/TabScreen.kt"
click node_tab_vm "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/TabViewModel.kt"
click node_chords "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/chorddisplay/ChordModalBottomSheet.kt"
click node_data_access "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/data/DataAccess.kt"
click node_database "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/data/AppDatabase.kt"
click node_backend "https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/utilities/BackendConnection.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_activity,node_navigation,node_user toneBlue
class node_search_ui,node_search_bar,node_search_vm,node_search_session,node_tab_search_vm,node_versions,node_remote toneAmber
class node_tab_screen,node_tab_vm,node_chords toneMint
class node_home,node_playlists,node_playlist_vm,node_creation,node_creation_vm toneRose
class node_data_access,node_database,node_backend toneIndigo
```

## Components

### App navigation

- [Home activity](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/HomeActivity.kt): `app/src/main/java/com/gbros/tabslite/HomeActivity.kt`
- [Navigation host](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/RootNavHost.kt): `app/src/main/java/com/gbros/tabslite/RootNavHost.kt`

### Find songs

- [Search screen](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/searchresultsonglist/SearchScreen.kt): `app/src/main/java/com/gbros/tabslite/view/searchresultsonglist/SearchScreen.kt`
- [Search bar](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/tabsearchbar/TabsSearchBar.kt): `app/src/main/java/com/gbros/tabslite/view/tabsearchbar/TabsSearchBar.kt`
- [Search logic](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/SearchViewModel.kt): `app/src/main/java/com/gbros/tabslite/viewmodel/SearchViewModel.kt`
- [Paged search](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/data/Search.kt): `app/src/main/java/com/gbros/tabslite/data/Search.kt`
- [Suggestions logic](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/TabSearchBarViewModel.kt): `app/src/main/java/com/gbros/tabslite/viewmodel/TabSearchBarViewModel.kt`
- [Song versions](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/songversionlist/SongVersionScreen.kt): `app/src/main/java/com/gbros/tabslite/view/songversionlist/SongVersionScreen.kt`

### Read and play

- [Tab reader](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/tabview/TabScreen.kt): `app/src/main/java/com/gbros/tabslite/view/tabview/TabScreen.kt`
- [Tab logic](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/TabViewModel.kt): `app/src/main/java/com/gbros/tabslite/viewmodel/TabViewModel.kt`
- [Chord lookup](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/chorddisplay/ChordModalBottomSheet.kt): `app/src/main/java/com/gbros/tabslite/view/chorddisplay/ChordModalBottomSheet.kt`

### Offline library

- [Home and favorites](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/homescreen/HomeScreen.kt): `app/src/main/java/com/gbros/tabslite/view/homescreen/HomeScreen.kt`
- [Playlist screens](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/playlists/PlaylistScreen.kt): `app/src/main/java/com/gbros/tabslite/view/playlists/PlaylistScreen.kt`
- [Playlist logic](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/PlaylistViewModel.kt): `app/src/main/java/com/gbros/tabslite/viewmodel/PlaylistViewModel.kt`
- [Create song and tab](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/view/createtab/CreateTabScreen.kt): `app/src/main/java/com/gbros/tabslite/view/createtab/CreateTabScreen.kt`
- [Creation logic](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/viewmodel/CreateTabViewModel.kt): `app/src/main/java/com/gbros/tabslite/viewmodel/CreateTabViewModel.kt`

### Data services

- [Data access](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/data/DataAccess.kt): `app/src/main/java/com/gbros/tabslite/data/DataAccess.kt`
- [Local Room store](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/data/AppDatabase.kt): `app/src/main/java/com/gbros/tabslite/data/AppDatabase.kt`
- [Backend connection](https://github.com/more-than-solitaire/tabs-lite/blob/master/app/src/main/java/com/gbros/tabslite/utilities/BackendConnection.kt): `app/src/main/java/com/gbros/tabslite/utilities/BackendConnection.kt`

### Other components

- **App user**
- **Tabs backend**

## Connections

- App user → Home activity: opens app
- Home activity → Navigation host: hosts UI
- Home activity → Data access: loads preferences
- Home activity → Backend connection: fetches startup tabs
- App user → Search bar: enters query
- Search bar → Suggestions logic: updates query
- Suggestions logic → Backend connection: fetches suggestions
- Suggestions logic → Data access: reads suggestions
- Search screen → Search logic: creates search logic
- Search logic → Paged search: loads result pages
- Search logic → Backend connection: fetches exact matches
- Search logic → Data access: observes cached matches
- Paged search → Backend connection: requests result page
- Paged search → Data access: caches returned tabs
- Song versions → App user: shows versions
- App user → Home and favorites: opens favorites
- App user → Playlist screens: manages playlists
- Playlist screens → Playlist logic: delegates actions
- App user → Create song and tab: creates content
- Create song and tab → Creation logic: delegates edits
- App user → Tab reader: opens tab
- Tab reader → Tab logic: requests tab state
- Tab reader → Chord lookup: opens chord details
- Data access → Local Room store: reads and writes
- Backend connection → Tabs backend: requests tab data
