# zxcdenjir/cryptoportfolio-tracker architecture

> Architecture diagram of the GitHub repository zxcdenjir/cryptoportfolio-tracker, 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/zxcdenjir/cryptoportfolio-tracker
- Repository: https://github.com/zxcdenjir/cryptoportfolio-tracker

## Overview

This is a cross-platform Avalonia cryptocurrency portfolio tracker. Its visible workflow centers on loading a saved coin catalog, enriching it with CoinGecko market data, and presenting portfolio balances and price history; users can also manage wallets and transactions and export CSV files. The sampled code confirms the home-market-data and add-cryptocurrency paths, EF Core persistence, and CSV export. Other screens are represented from the file tree, but their internal wiring was not sampled.

Main entry points: [`CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/HomeViewModel.cs`](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/HomeViewModel.cs) (Portfolio home), [`CryptoPortfolio Tracker/CryptoPortfolio_Tracker/Core/CoinGeckoApi.cs`](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Core/CoinGeckoApi.cs) (CoinGecko client), [`CryptoPortfolio Tracker/CryptoPortfolio_Tracker/Context/CryptoContext.cs`](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Context/CryptoContext.cs) (EF data context), [`CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/AddCryptoViewModel.cs`](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/AddCryptoViewModel.cs) (Add cryptocurrency)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["App and navigation"]
  node_app["App startup<br/>[App.axaml.cs]"]
  node_mainvm["Main navigation<br/>[MainViewModel.cs]"]
  node_login["Login<br/>[LoginViewModel.cs]"]
  node_settings["Settings"]
end

subgraph group_portfolio["Portfolio and markets"]
  node_home["Portfolio home<br/>[HomeViewModel.cs]"]
  node_addcrypto["Add cryptocurrency"]
  node_editcrypto["Edit cryptocurrency"]
  node_chart["Price chart"]
  node_crypto["Cryptocurrency model<br/>[Cryptocurrency.cs]"]
end

subgraph group_ledger["Wallets and transactions"]
  node_wallets["Wallet management"]
  node_addwallet["Add wallet"]
  node_transactions["Transactions"]
  node_addtransaction["Add transaction"]
  node_history["Wallet history"]
  node_walletmodel["Wallet model<br/>[UserWallet.cs]"]
end

subgraph group_services["Data and integrations"]
  node_dbcontext["EF data context<br/>[CryptoContext.cs]"]
  node_database[("PostgreSQL")]
  node_coinapi["CoinGecko client<br/>[CoinGeckoApi.cs]"]
  node_appstate["HTTP state<br/>[AppState.cs]"]
  node_export["CSV export"]
end

node_user(("User"))
node_coingecko["CoinGecko API"]

node_user -->|"starts app"| node_app
node_app -->|"creates"| node_mainvm
node_user -->|"uses"| node_home
node_user -->|"manages wallets"| node_wallets
node_user -->|"records activity"| node_transactions
node_home -->|"loads catalog"| node_dbcontext
node_home -->|"requests markets"| node_coinapi
node_home -->|"requests history"| node_coinapi
node_home -->|"updates market fields"| node_crypto
node_home -->|"loads portfolio"| node_dbcontext
node_home -->|"exports coins"| node_export
node_addcrypto -->|"searches coins"| node_coinapi
node_addcrypto -->|"loads reference data"| node_dbcontext
node_addcrypto -->|"saves coin"| node_dbcontext
node_addcrypto -->|"reloads catalog"| node_home
node_wallets -->|"opens history"| node_history
node_dbcontext -->|"reads and writes"| node_database
node_coinapi -->|"uses HTTP client"| node_appstate
node_coinapi -->|"requests data"| node_coingecko
node_walletmodel -->|"uses current price"| node_crypto

click node_app "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/App.axaml.cs"
click node_mainvm "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/MainViewModel.cs"
click node_home "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/HomeViewModel.cs"
click node_addcrypto "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/AddCryptoViewModel.cs"
click node_editcrypto "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/EditCryptoViewModel.cs"
click node_chart "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/CryptoChartViewModel.cs"
click node_login "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/LoginViewModel.cs"
click node_settings "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/SettingsViewModel.cs"
click node_wallets "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/WalletsViewModel.cs"
click node_addwallet "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/AddWalletViewModel.cs"
click node_transactions "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/TransactionsViewModel.cs"
click node_addtransaction "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/AddTransactionViewModel.cs"
click node_history "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/WalletTransactionHistoryViewModel.cs"
click node_dbcontext "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Context/CryptoContext.cs"
click node_coinapi "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Core/CoinGeckoApi.cs"
click node_appstate "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Core/AppState.cs"
click node_export "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Core/CsvExportService.cs"
click node_crypto "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Models/Cryptocurrency.cs"
click node_walletmodel "https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Models/UserWallet.cs"

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_app,node_mainvm,node_login,node_settings,node_user toneBlue
class node_home,node_addcrypto,node_editcrypto,node_chart,node_crypto toneAmber
class node_wallets,node_addwallet,node_transactions,node_addtransaction,node_history,node_walletmodel,node_coingecko toneMint
class node_dbcontext,node_database,node_coinapi,node_appstate,node_export toneRose
```

## Components

### App and navigation

- [App startup](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/App.axaml.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/App.axaml.cs`
- [Main navigation](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/MainViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/MainViewModel.cs`
- [Login](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/LoginViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/LoginViewModel.cs`
- [Settings](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/SettingsViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/SettingsViewModel.cs`

### Portfolio and markets

- [Portfolio home](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/HomeViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/HomeViewModel.cs`
- [Add cryptocurrency](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/AddCryptoViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/AddCryptoViewModel.cs`
- [Edit cryptocurrency](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/EditCryptoViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/EditCryptoViewModel.cs`
- [Price chart](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/CryptoChartViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/CryptoChartViewModel.cs`
- [Cryptocurrency model](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Models/Cryptocurrency.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/Models/Cryptocurrency.cs`

### Wallets and transactions

- [Wallet management](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/WalletsViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/WalletsViewModel.cs`
- [Add wallet](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/AddWalletViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/AddWalletViewModel.cs`
- [Transactions](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/TransactionsViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/TransactionsViewModel.cs`
- [Add transaction](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/AddTransactionViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/AddTransactionViewModel.cs`
- [Wallet history](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/ViewModels/WalletTransactionHistoryViewModel.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/ViewModels/WalletTransactionHistoryViewModel.cs`
- [Wallet model](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Models/UserWallet.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/Models/UserWallet.cs`

### Data and integrations

- [EF data context](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Context/CryptoContext.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/Context/CryptoContext.cs`
- **PostgreSQL**
- [CoinGecko client](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Core/CoinGeckoApi.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/Core/CoinGeckoApi.cs`
- [HTTP state](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Core/AppState.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/Core/AppState.cs`
- [CSV export](https://github.com/zxcdenjir/cryptoportfolio-tracker/blob/main/CryptoPortfolio%20Tracker/CryptoPortfolio_Tracker/Core/CsvExportService.cs): `CryptoPortfolio Tracker/CryptoPortfolio_Tracker/Core/CsvExportService.cs`

### Other components

- **User**
- **CoinGecko API**

## Connections

- User → App startup: starts app
- App startup → Main navigation: creates
- User → Portfolio home: uses
- User → Wallet management: manages wallets
- User → Transactions: records activity
- Portfolio home → EF data context: loads catalog
- Portfolio home → CoinGecko client: requests markets
- Portfolio home → CoinGecko client: requests history
- Portfolio home → Cryptocurrency model: updates market fields
- Portfolio home → EF data context: loads portfolio
- Portfolio home → CSV export: exports coins
- Add cryptocurrency → CoinGecko client: searches coins
- Add cryptocurrency → EF data context: loads reference data
- Add cryptocurrency → EF data context: saves coin
- Add cryptocurrency → Portfolio home: reloads catalog
- Wallet management → Wallet history: opens history
- EF data context → PostgreSQL: reads and writes
- CoinGecko client → HTTP state: uses HTTP client
- CoinGecko client → CoinGecko API: requests data
- Wallet model → Cryptocurrency model: uses current price
