# abraham-ny/traderocker-desktop architecture

> Architecture diagram of the GitHub repository abraham-ny/traderocker-desktop, 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/abraham-ny/traderocker-desktop
- Repository: https://github.com/abraham-ny/traderocker-desktop

## Overview

TradeRocker is a Swing desktop simulator for crypto trading, combining CoinGecko market data with demo-account portfolio state. Users browse/search tokens, select one for details and a seven-day chart, then buy or sell; they can also manage accounts, funds, watchlists, and open positions. MainPanel coordinates market/chart loading and dialogs, while AccountManager persists account state as JSON. The graph follows documented capabilities where source excerpts are incomplete; the account, trade, and market paths are supported by the sampled code.

Main entry points: [`src/main/java/com/vitalsoft/traderocker/MainPanel.java`](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/MainPanel.java) (Main panel), [`src/main/java/com/vitalsoft/traderocker/CryptoTradingClient.java`](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/CryptoTradingClient.java) (Application frame), [`src/main/java/com/vitalsoft/traderocker/Account.java`](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/Account.java) (Account model), [`src/main/java/com/vitalsoft/traderocker/AccountManager.java`](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/AccountManager.java) (Account manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop UI"]
  node_app["Application frame"]
  node_main["Main panel<br/>[MainPanel.java]"]
  node_tokens["Token list"]
  node_details["Crypto details"]
  node_chart["Price chart<br/>[ChartPanel.java]"]
  node_accountview["Account summary"]
  node_accountdialog["Account manager UI"]
  node_positionsdialog["Positions UI"]
  node_tradedialog["Trade dialog<br/>[TradingDialog.java]"]
end

subgraph group_market["Market Data"]
  node_api["CoinGecko client<br/>[CryptoAPI.java]"]
  node_coingecko{{"CoinGecko API"}}
  node_cryptodata["Market data<br/>[CryptoData.java]"]
end

subgraph group_trading["Trading Domain"]
  node_account["Account model<br/>[Account.java]"]
  node_positions["Positions<br/>[Account.java]"]
  node_pnl["P&amp;L history<br/>[Account.java]"]
end

subgraph group_accounts["Accounts"]
  node_manager["Account manager"]
  node_store[("Account JSON files")]
end

node_user(("Desktop user"))

node_user -->|"launches and operates"| node_app
node_app -->|"creates"| node_main
node_main -->|"creates"| node_tokens
node_main -->|"creates"| node_details
node_main -->|"creates"| node_chart
node_main -->|"creates"| node_accountview
node_main -->|"requests market data"| node_api
node_api -->|"fetches prices and charts"| node_coingecko
node_api -->|"parses market response"| node_cryptodata
node_main -->|"supplies market list"| node_tokens
node_main -->|"supplies chart points"| node_chart
node_main -->|"refreshes summary"| node_accountview
node_tokens -->|"selects token"| node_main
node_main -->|"shows selection"| node_details
node_details -->|"opens buy or sell"| node_tradedialog
node_tradedialog -->|"executes simulated trade"| node_account
node_tradedialog -->|"saves account"| node_manager
node_app -->|"creates and selects accounts"| node_manager
node_app -->|"opens account management"| node_accountdialog
node_accountdialog -->|"switches or deletes accounts"| node_manager
node_app -->|"opens positions view"| node_positionsdialog
node_main -->|"opens positions view"| node_positionsdialog
node_positionsdialog -->|"refreshes prices"| node_api
node_positionsdialog -->|"reads and closes positions"| node_account
node_account -->|"tracks holdings"| node_positions
node_account -->|"records snapshots"| node_pnl
node_accountview -->|"reads balance and P&amp;L"| node_account
node_manager -->|"loads and saves JSON"| node_store
node_app -->|"saves on exit"| node_manager
node_details -->|"updates watchlist"| node_account

click node_app "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/CryptoTradingClient.java"
click node_main "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/MainPanel.java"
click node_tokens "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/TokenListPanel.java"
click node_details "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/CryptoInfoPanel.java"
click node_chart "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/ChartPanel.java"
click node_accountview "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/AccountInfoPanel.java"
click node_accountdialog "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/AccountsDialog.java"
click node_positionsdialog "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/PositionsDialog.java"
click node_tradedialog "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/TradingDialog.java"
click node_api "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/CryptoAPI.java"
click node_cryptodata "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/CryptoData.java"
click node_account "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/Account.java"
click node_positions "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/Account.java"
click node_pnl "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/Account.java"
click node_manager "https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/AccountManager.java"

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_main,node_tokens,node_details,node_chart,node_accountview,node_accountdialog,node_positionsdialog,node_tradedialog,node_user toneBlue
class node_api,node_coingecko,node_cryptodata toneAmber
class node_account,node_positions,node_pnl toneMint
class node_manager,node_store toneRose
```

## Components

### Desktop UI

- [Application frame](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/CryptoTradingClient.java): `src/main/java/com/vitalsoft/traderocker/CryptoTradingClient.java`
- [Main panel](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/MainPanel.java): `src/main/java/com/vitalsoft/traderocker/MainPanel.java`
- [Token list](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/TokenListPanel.java): `src/main/java/com/vitalsoft/traderocker/TokenListPanel.java`
- [Crypto details](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/CryptoInfoPanel.java): `src/main/java/com/vitalsoft/traderocker/CryptoInfoPanel.java`
- [Price chart](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/ChartPanel.java): `src/main/java/com/vitalsoft/traderocker/ChartPanel.java`
- [Account summary](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/AccountInfoPanel.java): `src/main/java/com/vitalsoft/traderocker/AccountInfoPanel.java`
- [Account manager UI](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/AccountsDialog.java): `src/main/java/com/vitalsoft/traderocker/AccountsDialog.java`
- [Positions UI](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/PositionsDialog.java): `src/main/java/com/vitalsoft/traderocker/PositionsDialog.java`
- [Trade dialog](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/TradingDialog.java): `src/main/java/com/vitalsoft/traderocker/TradingDialog.java`

### Market Data

- [CoinGecko client](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/CryptoAPI.java): `src/main/java/com/vitalsoft/traderocker/CryptoAPI.java`
- **CoinGecko API**
- [Market data](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/CryptoData.java): `src/main/java/com/vitalsoft/traderocker/CryptoData.java`

### Trading Domain

- [Account model](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/Account.java): `src/main/java/com/vitalsoft/traderocker/Account.java`
- [Positions](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/Account.java): `src/main/java/com/vitalsoft/traderocker/Account.java`
- [P&L history](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/Account.java): `src/main/java/com/vitalsoft/traderocker/Account.java`

### Accounts

- [Account manager](https://github.com/abraham-ny/traderocker-desktop/blob/main/src/main/java/com/vitalsoft/traderocker/AccountManager.java): `src/main/java/com/vitalsoft/traderocker/AccountManager.java`
- **Account JSON files**

### Other components

- **Desktop user**

## Connections

- Desktop user → Application frame: launches and operates
- Application frame → Main panel: creates
- Main panel → Token list: creates
- Main panel → Crypto details: creates
- Main panel → Price chart: creates
- Main panel → Account summary: creates
- Main panel → CoinGecko client: requests market data
- CoinGecko client → CoinGecko API: fetches prices and charts
- CoinGecko client → Market data: parses market response
- Main panel → Token list: supplies market list
- Main panel → Price chart: supplies chart points
- Main panel → Account summary: refreshes summary
- Token list → Main panel: selects token
- Main panel → Crypto details: shows selection
- Crypto details → Trade dialog: opens buy or sell
- Trade dialog → Account model: executes simulated trade
- Trade dialog → Account manager: saves account
- Application frame → Account manager: creates and selects accounts
- Application frame → Account manager UI: opens account management
- Account manager UI → Account manager: switches or deletes accounts
- Application frame → Positions UI: opens positions view
- Main panel → Positions UI: opens positions view
- Positions UI → CoinGecko client: refreshes prices
- Positions UI → Account model: reads and closes positions
- Account model → Positions: tracks holdings
- Account model → P&L history: records snapshots
- Account summary → Account model: reads balance and P&L
- Account manager → Account JSON files: loads and saves JSON
- Application frame → Account manager: saves on exit
- Crypto details → Account model: updates watchlist
