# aanchalrohira97/portfolio-rebalancer architecture

> Architecture diagram of the GitHub repository aanchalrohira97/portfolio-rebalancer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-07). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aanchalrohira97/portfolio-rebalancer
- Repository: https://github.com/aanchalrohira97/portfolio-rebalancer

## Overview

Portfolio Rebalancer is a browser-based React app that turns brokerage CSV data into a household portfolio, supports automatic and manual holding classification and target allocation, and calculates account-constrained buy/sell recommendations. The main workflow is coordinated by the App component: CSV parsing, account grouping, allocation display, and rebalance calculation are separate domain stages. The README documents liquidity preferences and constraint warnings; sampled code shows the rebalance algorithm but not every UI interaction. Edges follow shown calls or README documentation; no external brokerage integration is indicated.

Main entry points: [`src/App.tsx`](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/App.tsx) (Portfolio workspace), [`src/utils/rebalanceCalculator.tsx`](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/rebalanceCalculator.tsx) (Rebalance engine), [`src/utils/assetClassifier.tsx`](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/assetClassifier.tsx) (Holding classifier), [`src/types.ts`](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/types.ts) (Portfolio models)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["User experience"]
  node_entry["React entry<br/>[main.tsx]"]
  node_workspace["Portfolio workspace<br/>[App.tsx]"]
  node_recommendations["Transactions and warnings<br/>[App.tsx]"]
end

subgraph group_domain["Portfolio domain"]
  node_csv["CSV importer<br/>[csvparser.ts]"]
  node_portfolio["Account grouping"]
  node_models["Portfolio models<br/>[types.ts]"]
  node_classification["Holding classifier"]
  node_assetclasses["Asset class catalog<br/>[assetClasses.tsx]"]
end

subgraph group_calculations["Analysis and rebalance"]
  node_allocation["Current allocation"]
  node_rebalance["Rebalance engine"]
end

node_user(("Portfolio user"))

node_user -->|"opens app"| node_entry
node_entry -->|"renders"| node_workspace
node_user -->|"uploads and configures"| node_workspace
node_workspace -->|"parses upload"| node_csv
node_workspace -->|"groups holdings"| node_portfolio
node_workspace -->|"classifies holdings"| node_classification
node_workspace -->|"calculates allocation"| node_allocation
node_workspace -->|"requests transactions"| node_rebalance
node_workspace -->|"uses catalog"| node_assetclasses
node_csv -->|"creates holdings"| node_models
node_portfolio -->|"creates accounts"| node_models
node_classification -->|"uses identifiers"| node_assetclasses
node_allocation -->|"reads portfolio data"| node_models
node_rebalance -->|"normalizes symbols"| node_classification
node_rebalance -->|"uses identifiers"| node_assetclasses
node_workspace -->|"presents results"| node_recommendations

click node_entry "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/main.tsx"
click node_workspace "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/App.tsx"
click node_csv "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/services/csvparser.ts"
click node_portfolio "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/portfolioBuilder.tsx"
click node_models "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/types.ts"
click node_classification "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/assetClassifier.tsx"
click node_assetclasses "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/assetClasses.tsx"
click node_allocation "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/allocationCalculator.tsx"
click node_rebalance "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/rebalanceCalculator.tsx"
click node_recommendations "https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/App.tsx"

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_entry,node_workspace,node_recommendations,node_user toneBlue
class node_csv,node_portfolio,node_models,node_classification,node_assetclasses toneAmber
class node_allocation,node_rebalance toneMint
```

## Components

### User experience

- [React entry](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/main.tsx): `src/main.tsx`
- [Portfolio workspace](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/App.tsx): `src/App.tsx`
- [Transactions and warnings](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/App.tsx): `src/App.tsx`

### Portfolio domain

- [CSV importer](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/services/csvparser.ts): `src/services/csvparser.ts`
- [Account grouping](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/portfolioBuilder.tsx): `src/utils/portfolioBuilder.tsx`
- [Portfolio models](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/types.ts): `src/types.ts`
- [Holding classifier](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/assetClassifier.tsx): `src/utils/assetClassifier.tsx`
- [Asset class catalog](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/assetClasses.tsx): `src/utils/assetClasses.tsx`

### Analysis and rebalance

- [Current allocation](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/allocationCalculator.tsx): `src/utils/allocationCalculator.tsx`
- [Rebalance engine](https://github.com/aanchalrohira97/portfolio-rebalancer/blob/main/src/utils/rebalanceCalculator.tsx): `src/utils/rebalanceCalculator.tsx`

### Other components

- **Portfolio user**

## Connections

- Portfolio user → React entry: opens app (evidence: `README.md`)
- React entry → Portfolio workspace: renders (evidence: `src/main.tsx`)
- Portfolio user → Portfolio workspace: uploads and configures (evidence: `README.md`)
- Portfolio workspace → CSV importer: parses upload (evidence: `src/App.tsx`)
- Portfolio workspace → Account grouping: groups holdings (evidence: `src/App.tsx`)
- Portfolio workspace → Holding classifier: classifies holdings (evidence: `src/App.tsx`)
- Portfolio workspace → Current allocation: calculates allocation (evidence: `src/App.tsx`)
- Portfolio workspace → Rebalance engine: requests transactions (evidence: `src/App.tsx`)
- Portfolio workspace → Asset class catalog: uses catalog (evidence: `src/App.tsx`)
- CSV importer → Portfolio models: creates holdings (evidence: `src/services/csvparser.ts`)
- Account grouping → Portfolio models: creates accounts (evidence: `src/utils/portfolioBuilder.tsx`)
- Holding classifier → Asset class catalog: uses identifiers (evidence: `src/utils/assetClassifier.tsx`)
- Current allocation → Portfolio models: reads portfolio data (evidence: `src/utils/allocationCalculator.tsx`)
- Rebalance engine → Holding classifier: normalizes symbols (evidence: `src/utils/rebalanceCalculator.tsx`)
- Rebalance engine → Asset class catalog: uses identifiers (evidence: `src/utils/rebalanceCalculator.tsx`)
- Portfolio workspace → Transactions and warnings: presents results (evidence: `README.md`)
