# kartikey-44/bourse-android architecture

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

- Interactive diagram: https://gitdiagram.com/kartikey-44/bourse-android
- Repository: https://github.com/kartikey-44/bourse-android

## Overview

Bourse is an Android client for simulated equity trading. Users sign in or register, browse market data and stock history, and submit simulated buy/sell orders; they can also review portfolio holdings, recommendations, and transaction history, and manage their profile and local transaction PIN. The documented MVVM/repository layers connect screens to REST services, while session tokens and the PIN are stored locally. The backend is external. Some ViewModels and service wiring are unsampled, so their individual links are shown as unverified rather than asserted.

Main entry points: [`app/src/main/java/ind/finance/bourse/data/remote`](https://github.com/kartikey-44/bourse-android/tree/main/app/src/main/java/ind/finance/bourse/data/remote) (REST services), [`app/src/main/java/ind/finance/bourse/StockDetailsActivity.kt`](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/StockDetailsActivity.kt) (Stock details), [`app/src/main/java/ind/finance/bourse/PortfolioActivity.kt`](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/PortfolioActivity.kt) (Portfolio screen), [`app/src/main/java/ind/finance/bourse/data/repository/UserRepository.kt`](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/repository/UserRepository.kt) (User repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_screens["App screens"]
  node_auth["Login and signup<br/>[LoginActivity.kt]"]
  node_home["Home dashboard<br/>[MainActivity.kt]"]
  node_market["Market screen<br/>[MarketActivity.kt]"]
  node_stock["Stock details"]
  node_portfolio["Portfolio screen"]
  node_holdings["All holdings"]
  node_transactions["Transaction history"]
  node_profile["Profile and PIN<br/>[ProfileActivity.kt]"]
end

subgraph group_state["ViewModels"]
  node_authvm["Authentication state<br/>[AuthViewModel.kt]"]
  node_homevm["Home state<br/>[HomeViewModel.kt]"]
  node_marketvm["Market state<br/>[MarketViewModel.kt]"]
  node_stockvm["Stock state"]
  node_tradingvm["Trading state"]
  node_portfoliovm["Portfolio state"]
  node_transactionsvm["Transaction state"]
  node_profilevm["Profile state"]
  node_pinvm["PIN state"]
end

subgraph group_data["Data access"]
  node_userrepo["User repository<br/>[UserRepository.kt]"]
  node_stockrepo["Stock repository<br/>[StockRepository.kt]"]
  node_portfoliorepo["Portfolio repository"]
  node_tradingrepo["Trading repository"]
  node_apis["REST services"]
  node_apiclient["API client<br/>[ApiClient.kt]"]
end

subgraph group_security["Local security"]
  node_token[("Session token store<br/>[TokenManager.kt]")]
  node_pinstore[("Encrypted PIN store")]
end

node_user(("User"))
node_backend["Bourse backend"]

node_user -->|"signs in"| node_auth
node_user -->|"browses"| node_market
node_user -->|"reviews"| node_portfolio
node_user -->|"manages account"| node_profile
node_auth -->|"observes"| node_authvm
node_authvm -->|"delegates to"| node_userrepo
node_userrepo -->|"requests user data"| node_apis
node_market -->|"observes"| node_marketvm
node_market -->|"opens stock"| node_stock
node_stock -->|"loads stock"| node_stockvm
node_stock -->|"observes trades"| node_tradingvm
node_stock -->|"verifies PIN"| node_pinstore
node_portfolio -->|"observes"| node_portfoliovm
node_portfolio -->|"opens holdings"| node_holdings
node_portfolio -->|"opens history"| node_transactions
node_profile -->|"loads profile"| node_profilevm
node_profile -->|"updates PIN"| node_pinvm
node_home -->|"observes"| node_homevm
node_marketvm -.->|"loads market data"| node_stockrepo
node_stockvm -.->|"loads stock data"| node_stockrepo
node_tradingvm -.->|"submits orders"| node_tradingrepo
node_portfoliovm -.->|"loads portfolio"| node_portfoliorepo
node_transactionsvm -.->|"loads history"| node_portfoliorepo
node_profilevm -.->|"loads profile"| node_userrepo
node_pinvm -.->|"stores PIN"| node_pinstore
node_homevm -.->|"loads summary"| node_portfoliorepo
node_stockrepo -->|"calls stock service"| node_apis
node_portfoliorepo -->|"calls portfolio service"| node_apis
node_tradingrepo -->|"calls trading service"| node_apis
node_apiclient -->|"creates services"| node_apis
node_apis -->|"requests REST data"| node_backend
node_apiclient -->|"configures auth"| node_token
node_userrepo -->|"persists session"| node_token

click node_auth "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/LoginActivity.kt"
click node_home "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/MainActivity.kt"
click node_market "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/MarketActivity.kt"
click node_stock "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/StockDetailsActivity.kt"
click node_portfolio "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/PortfolioActivity.kt"
click node_holdings "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/AllHoldingsActivity.kt"
click node_transactions "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/TransactionsActivity.kt"
click node_profile "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ProfileActivity.kt"
click node_authvm "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/auth/AuthViewModel.kt"
click node_homevm "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/home/HomeViewModel.kt"
click node_marketvm "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/market/MarketViewModel.kt"
click node_stockvm "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/stock/StockDetailsViewModel.kt"
click node_tradingvm "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/trading/TradingViewModel.kt"
click node_portfoliovm "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/portfolio/PortfolioViewModel.kt"
click node_transactionsvm "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/transactions/TransactionsViewModel.kt"
click node_profilevm "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/profile/ProfileViewModel.kt"
click node_pinvm "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/profile/TransactionPinViewModel.kt"
click node_userrepo "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/repository/UserRepository.kt"
click node_stockrepo "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/repository/StockRepository.kt"
click node_portfoliorepo "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/repository/PortfolioRepository.kt"
click node_tradingrepo "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/repository/TradingRepository.kt"
click node_apis "https://github.com/kartikey-44/bourse-android/tree/main/app/src/main/java/ind/finance/bourse/data/remote"
click node_apiclient "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/remote/ApiClient.kt"
click node_token "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/local/TokenManager.kt"
click node_pinstore "https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/local/TransactionPinStore.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_auth,node_home,node_market,node_stock,node_portfolio,node_holdings,node_transactions,node_profile,node_user toneBlue
class node_authvm,node_homevm,node_marketvm,node_stockvm,node_tradingvm,node_portfoliovm,node_transactionsvm,node_profilevm,node_pinvm toneAmber
class node_userrepo,node_stockrepo,node_portfoliorepo,node_tradingrepo,node_apis,node_apiclient toneMint
class node_token,node_pinstore toneRose
class node_backend toneIndigo
```

## Components

### App screens

- [Login and signup](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/LoginActivity.kt): `app/src/main/java/ind/finance/bourse/LoginActivity.kt`
- [Home dashboard](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/MainActivity.kt): `app/src/main/java/ind/finance/bourse/MainActivity.kt`
- [Market screen](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/MarketActivity.kt): `app/src/main/java/ind/finance/bourse/MarketActivity.kt`
- [Stock details](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/StockDetailsActivity.kt): `app/src/main/java/ind/finance/bourse/StockDetailsActivity.kt`
- [Portfolio screen](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/PortfolioActivity.kt): `app/src/main/java/ind/finance/bourse/PortfolioActivity.kt`
- [All holdings](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/AllHoldingsActivity.kt): `app/src/main/java/ind/finance/bourse/AllHoldingsActivity.kt`
- [Transaction history](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/TransactionsActivity.kt): `app/src/main/java/ind/finance/bourse/TransactionsActivity.kt`
- [Profile and PIN](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ProfileActivity.kt): `app/src/main/java/ind/finance/bourse/ProfileActivity.kt`

### ViewModels

- [Authentication state](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/auth/AuthViewModel.kt): `app/src/main/java/ind/finance/bourse/ui/auth/AuthViewModel.kt`
- [Home state](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/home/HomeViewModel.kt): `app/src/main/java/ind/finance/bourse/ui/home/HomeViewModel.kt`
- [Market state](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/market/MarketViewModel.kt): `app/src/main/java/ind/finance/bourse/ui/market/MarketViewModel.kt`
- [Stock state](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/stock/StockDetailsViewModel.kt): `app/src/main/java/ind/finance/bourse/ui/stock/StockDetailsViewModel.kt`
- [Trading state](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/trading/TradingViewModel.kt): `app/src/main/java/ind/finance/bourse/ui/trading/TradingViewModel.kt`
- [Portfolio state](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/portfolio/PortfolioViewModel.kt): `app/src/main/java/ind/finance/bourse/ui/portfolio/PortfolioViewModel.kt`
- [Transaction state](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/transactions/TransactionsViewModel.kt): `app/src/main/java/ind/finance/bourse/ui/transactions/TransactionsViewModel.kt`
- [Profile state](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/profile/ProfileViewModel.kt): `app/src/main/java/ind/finance/bourse/ui/profile/ProfileViewModel.kt`
- [PIN state](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/ui/profile/TransactionPinViewModel.kt): `app/src/main/java/ind/finance/bourse/ui/profile/TransactionPinViewModel.kt`

### Data access

- [User repository](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/repository/UserRepository.kt): `app/src/main/java/ind/finance/bourse/data/repository/UserRepository.kt`
- [Stock repository](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/repository/StockRepository.kt): `app/src/main/java/ind/finance/bourse/data/repository/StockRepository.kt`
- [Portfolio repository](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/repository/PortfolioRepository.kt): `app/src/main/java/ind/finance/bourse/data/repository/PortfolioRepository.kt`
- [Trading repository](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/repository/TradingRepository.kt): `app/src/main/java/ind/finance/bourse/data/repository/TradingRepository.kt`
- [REST services](https://github.com/kartikey-44/bourse-android/tree/main/app/src/main/java/ind/finance/bourse/data/remote): `app/src/main/java/ind/finance/bourse/data/remote`
- [API client](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/remote/ApiClient.kt): `app/src/main/java/ind/finance/bourse/data/remote/ApiClient.kt`

### Local security

- [Session token store](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/local/TokenManager.kt): `app/src/main/java/ind/finance/bourse/data/local/TokenManager.kt`
- [Encrypted PIN store](https://github.com/kartikey-44/bourse-android/blob/main/app/src/main/java/ind/finance/bourse/data/local/TransactionPinStore.kt): `app/src/main/java/ind/finance/bourse/data/local/TransactionPinStore.kt`

### Other components

- **User**
- **Bourse backend**

## Connections

- User → Login and signup: signs in (evidence: `README.md`)
- User → Market screen: browses (evidence: `README.md`)
- User → Portfolio screen: reviews (evidence: `README.md`)
- User → Profile and PIN: manages account (evidence: `README.md`)
- Login and signup → Authentication state: observes (evidence: `app/src/main/java/ind/finance/bourse/LoginActivity.kt`)
- Authentication state → User repository: delegates to (evidence: `app/src/main/java/ind/finance/bourse/ui/auth/AuthViewModel.kt`)
- User repository → REST services: requests user data (evidence: `app/src/main/java/ind/finance/bourse/data/repository/UserRepository.kt`)
- Market screen → Market state: observes (evidence: `app/src/main/java/ind/finance/bourse/MarketActivity.kt`)
- Market screen → Stock details: opens stock (evidence: `app/src/main/java/ind/finance/bourse/MarketActivity.kt`)
- Stock details → Stock state: loads stock (evidence: `app/src/main/java/ind/finance/bourse/StockDetailsActivity.kt`)
- Stock details → Trading state: observes trades (evidence: `app/src/main/java/ind/finance/bourse/StockDetailsActivity.kt`)
- Stock details → Encrypted PIN store: verifies PIN (evidence: `README.md`)
- Portfolio screen → Portfolio state: observes (evidence: `app/src/main/java/ind/finance/bourse/PortfolioActivity.kt`)
- Portfolio screen → All holdings: opens holdings (evidence: `app/src/main/java/ind/finance/bourse/PortfolioActivity.kt`)
- Portfolio screen → Transaction history: opens history (evidence: `app/src/main/java/ind/finance/bourse/PortfolioActivity.kt`)
- Profile and PIN → Profile state: loads profile (evidence: `app/src/main/java/ind/finance/bourse/ProfileActivity.kt`)
- Profile and PIN → PIN state: updates PIN (evidence: `app/src/main/java/ind/finance/bourse/ProfileActivity.kt`)
- Home dashboard → Home state: observes (evidence: `app/src/main/java/ind/finance/bourse/MainActivity.kt`)
- Market state → Stock repository: loads market data (evidence: `app/src/main/java/ind/finance/bourse/ui/market/MarketViewModel.kt`)
- Stock state → Stock repository: loads stock data (evidence: `app/src/main/java/ind/finance/bourse/ui/stock/StockDetailsViewModel.kt`)
- Trading state → Trading repository: submits orders (evidence: `app/src/main/java/ind/finance/bourse/ui/trading/TradingViewModel.kt`)
- Portfolio state → Portfolio repository: loads portfolio (evidence: `app/src/main/java/ind/finance/bourse/ui/portfolio/PortfolioViewModel.kt`)
- Transaction state → Portfolio repository: loads history
- Profile state → User repository: loads profile
- PIN state → Encrypted PIN store: stores PIN
- Home state → Portfolio repository: loads summary (evidence: `app/src/main/java/ind/finance/bourse/ui/home/HomeViewModel.kt`)
- Stock repository → REST services: calls stock service (evidence: `app/src/main/java/ind/finance/bourse/data/repository/StockRepository.kt`)
- Portfolio repository → REST services: calls portfolio service (evidence: `app/src/main/java/ind/finance/bourse/data/repository/PortfolioRepository.kt`)
- Trading repository → REST services: calls trading service (evidence: `app/src/main/java/ind/finance/bourse/data/repository/TradingRepository.kt`)
- API client → REST services: creates services (evidence: `app/src/main/java/ind/finance/bourse/data/remote/ApiClient.kt`)
- REST services → Bourse backend: requests REST data (evidence: `README.md`)
- API client → Session token store: configures auth (evidence: `app/src/main/java/ind/finance/bourse/data/remote/ApiClient.kt`)
- User repository → Session token store: persists session (evidence: `app/src/main/java/ind/finance/bourse/data/repository/UserRepository.kt`)
