# lciszewski27/where-is-my-money architecture

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

- Interactive diagram: https://gitdiagram.com/lciszewski27/where-is-my-money
- Repository: https://github.com/lciszewski27/where-is-my-money

## Overview

Where is my money? is an offline-first Android app for tracking shared debts, repayments, and balances. The main workflow is to enter a debt, associate it with a person and optionally a category or due date, then review balances and record settlements; dashboard, person-detail, and statistics views present the resulting state. Room stores financial records locally, while preferences and JSON backup support customization and user-controlled portability. The graph follows the documented architecture and sampled source; several screen-to-view-model and settings integrations are represented at subsystem level because their implementation excerpts were not provided.

Main entry points: [`app/src/main/java/dev/lciszewski27/whereismymoney/ui`](https://github.com/lciszewski27/where-is-my-money/tree/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui) (Screen state), [`app/src/main/java/dev/lciszewski27/whereismymoney/ui/navigation/AppNavHost.kt`](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/navigation/AppNavHost.kt) (Navigation host), [`app/src/main/java/dev/lciszewski27/whereismymoney/ui/person/PersonDetailScreen.kt`](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/person/PersonDetailScreen.kt) (Person details), [`app/src/main/java/dev/lciszewski27/whereismymoney/MainActivity.kt`](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/MainActivity.kt) (Main activity)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App shell"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_application["App dependencies"]
  node_navigation["Navigation host<br/>[AppNavHost.kt]"]
end

subgraph group_experience["User experience"]
  node_dashboard["Dashboard<br/>[DashboardScreen.kt]"]
  node_adddebt["Debt entry<br/>[AddDebtScreen.kt]"]
  node_person["Person details"]
  node_stats["Statistics<br/>[StatsScreen.kt]"]
  node_settings["Settings<br/>[SettingsScreen.kt]"]
  node_backupui["Backup settings"]
  node_viewmodels["Screen state"]
end

subgraph group_domain["Debt domain"]
  node_repository["Debt repository<br/>[DebtRepository.kt]"]
  node_implementation["Repository implementation"]
  node_usecases["Debt calculations"]
  node_money["Money utilities"]
end

subgraph group_storage["Local data"]
  node_database[("Room database<br/>[AppDatabase.kt]")]
  node_daos["Data access"]
  node_preferences[("User preferences")]
  node_backup["JSON backup<br/>[BackupService.kt]"]
end

node_user(("App user"))
node_share["Android share sheet"]
node_avatar["Avatar image service"]

node_user -->|"opens"| node_activity
node_activity -->|"reads preferences"| node_application
node_activity -->|"hosts"| node_navigation
node_navigation -->|"shows"| node_dashboard
node_navigation -->|"hosts sheet"| node_adddebt
node_navigation -->|"shows"| node_person
node_navigation -->|"shows"| node_stats
node_navigation -->|"shows"| node_settings
node_dashboard -->|"dispatches events"| node_viewmodels
node_adddebt -->|"dispatches events"| node_viewmodels
node_person -->|"dispatches events"| node_viewmodels
node_stats -->|"observes state"| node_viewmodels
node_settings -->|"observes state"| node_viewmodels
node_viewmodels -->|"requests data"| node_repository
node_repository -->|"implemented by"| node_implementation
node_implementation -->|"queries and updates"| node_daos
node_daos -->|"reads and writes"| node_database
node_implementation -->|"converts balances"| node_money
node_viewmodels -->|"runs workflows"| node_usecases
node_usecases -->|"requests data"| node_repository
node_settings -->|"opens backup"| node_backupui
node_backupui -->|"imports and exports"| node_backup
node_backup -->|"reads and writes"| node_daos
node_application -->|"provides"| node_preferences
node_person -.->|"shares reminder"| node_share
node_avatar -.->|"loads contributor images"| node_person

click node_activity "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/MainActivity.kt"
click node_application "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/WhereIsMyMoneyApp.kt"
click node_navigation "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/navigation/AppNavHost.kt"
click node_dashboard "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/dashboard/DashboardScreen.kt"
click node_adddebt "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/adddebt/AddDebtScreen.kt"
click node_person "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/person/PersonDetailScreen.kt"
click node_stats "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/stats/StatsScreen.kt"
click node_settings "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/settings/SettingsScreen.kt"
click node_backupui "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/settings/pages/BackupSettingsPage.kt"
click node_viewmodels "https://github.com/lciszewski27/where-is-my-money/tree/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui"
click node_repository "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/domain/repository/DebtRepository.kt"
click node_implementation "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/repository/DebtRepositoryImpl.kt"
click node_usecases "https://github.com/lciszewski27/where-is-my-money/tree/main/app/src/main/java/dev/lciszewski27/whereismymoney/domain/usecase"
click node_money "https://github.com/lciszewski27/where-is-my-money/tree/main/app/src/main/java/dev/lciszewski27/whereismymoney/domain/util"
click node_database "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/local/AppDatabase.kt"
click node_daos "https://github.com/lciszewski27/where-is-my-money/tree/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/local/dao"
click node_preferences "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/local/preferences/UserPreferencesDataStore.kt"
click node_backup "https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/local/BackupService.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_application,node_navigation,node_user toneBlue
class node_dashboard,node_adddebt,node_person,node_stats,node_settings,node_backupui,node_viewmodels toneAmber
class node_repository,node_implementation,node_usecases,node_money toneMint
class node_database,node_daos,node_preferences,node_backup toneRose
class node_share,node_avatar toneIndigo
```

## Components

### App shell

- [Main activity](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/MainActivity.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/MainActivity.kt`
- [App dependencies](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/WhereIsMyMoneyApp.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/WhereIsMyMoneyApp.kt`
- [Navigation host](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/navigation/AppNavHost.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/ui/navigation/AppNavHost.kt`

### User experience

- [Dashboard](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/dashboard/DashboardScreen.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/ui/dashboard/DashboardScreen.kt`
- [Debt entry](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/adddebt/AddDebtScreen.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/ui/adddebt/AddDebtScreen.kt`
- [Person details](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/person/PersonDetailScreen.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/ui/person/PersonDetailScreen.kt`
- [Statistics](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/stats/StatsScreen.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/ui/stats/StatsScreen.kt`
- [Settings](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/settings/SettingsScreen.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/ui/settings/SettingsScreen.kt`
- [Backup settings](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui/settings/pages/BackupSettingsPage.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/ui/settings/pages/BackupSettingsPage.kt`
- [Screen state](https://github.com/lciszewski27/where-is-my-money/tree/main/app/src/main/java/dev/lciszewski27/whereismymoney/ui): `app/src/main/java/dev/lciszewski27/whereismymoney/ui`

### Debt domain

- [Debt repository](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/domain/repository/DebtRepository.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/domain/repository/DebtRepository.kt`
- [Repository implementation](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/repository/DebtRepositoryImpl.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/data/repository/DebtRepositoryImpl.kt`
- [Debt calculations](https://github.com/lciszewski27/where-is-my-money/tree/main/app/src/main/java/dev/lciszewski27/whereismymoney/domain/usecase): `app/src/main/java/dev/lciszewski27/whereismymoney/domain/usecase`
- [Money utilities](https://github.com/lciszewski27/where-is-my-money/tree/main/app/src/main/java/dev/lciszewski27/whereismymoney/domain/util): `app/src/main/java/dev/lciszewski27/whereismymoney/domain/util`

### Local data

- [Room database](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/local/AppDatabase.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/data/local/AppDatabase.kt`
- [Data access](https://github.com/lciszewski27/where-is-my-money/tree/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/local/dao): `app/src/main/java/dev/lciszewski27/whereismymoney/data/local/dao`
- [User preferences](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/local/preferences/UserPreferencesDataStore.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/data/local/preferences/UserPreferencesDataStore.kt`
- [JSON backup](https://github.com/lciszewski27/where-is-my-money/blob/main/app/src/main/java/dev/lciszewski27/whereismymoney/data/local/BackupService.kt): `app/src/main/java/dev/lciszewski27/whereismymoney/data/local/BackupService.kt`

### Other components

- **App user**
- **Android share sheet**
- **Avatar image service**

## Connections

- App user → Main activity: opens
- Main activity → App dependencies: reads preferences
- Main activity → Navigation host: hosts
- Navigation host → Dashboard: shows
- Navigation host → Debt entry: hosts sheet
- Navigation host → Person details: shows
- Navigation host → Statistics: shows
- Navigation host → Settings: shows
- Dashboard → Screen state: dispatches events
- Debt entry → Screen state: dispatches events
- Person details → Screen state: dispatches events
- Statistics → Screen state: observes state
- Settings → Screen state: observes state
- Screen state → Debt repository: requests data
- Debt repository → Repository implementation: implemented by
- Repository implementation → Data access: queries and updates
- Data access → Room database: reads and writes
- Repository implementation → Money utilities: converts balances
- Screen state → Debt calculations: runs workflows
- Debt calculations → Debt repository: requests data
- Settings → Backup settings: opens backup
- Backup settings → JSON backup: imports and exports
- JSON backup → Data access: reads and writes
- App dependencies → User preferences: provides
- Person details → Android share sheet: shares reminder
- Avatar image service → Person details: loads contributor images
