# shrewdlemon/holdermap-dashboard architecture

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

- Interactive diagram: https://gitdiagram.com/shrewdlemon/holdermap-dashboard
- Repository: https://github.com/shrewdlemon/holdermap-dashboard

## Overview

holdermap is a static dashboard for exploring share ownership, holders, price performance and company financials across NSE-listed companies. The user workflow starts with the searchable universe, opens a company page, then explores ownership trends, holder details, buyers and sellers, earnings, valuation and returns; evidence checks expose data-quality issues. The repository also contains a quarterly and daily data-preparation pipeline that supplies company and universe data to the app. The README documents several capabilities beyond the sampled UI excerpt, so those are represented at the feature level; unsampled implementation details and uncertain wiring are omitted.

Main entry points: [`src/co`](https://github.com/shrewdlemon/holdermap-dashboard/tree/main/src/co) (Company data), [`src/app.js`](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js) (Company pages), [`pipeline/company.py`](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/company.py) (Company data builder), [`pipeline/export.py`](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/export.py) (Data export)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Dashboard"]
  node_universe["Company universe<br/>[app.js]"]
  node_company_page["Company pages<br/>[app.js]"]
  node_ownership_views["Ownership views<br/>[app.js]"]
  node_holder_flows["Holder flows<br/>[app.js]"]
  node_evidence_gates["Evidence checks<br/>[app.js]"]
end

subgraph group_ownership["Ownership Data"]
  node_company_data["Company data"]
  node_universe_data["Universe data<br/>[univ.json]"]
  node_company_builder["Company data builder<br/>[company.py]"]
  node_holder_sources["Holder source files"]
  node_data_export["Data export<br/>[export.py]"]
end

subgraph group_market["Market Data"]
  node_price_refresh["Price refresh<br/>[live.py]"]
  node_price_data["Price inputs"]
  node_index_history["Index history<br/>[index_hist.py]"]
end

subgraph group_financials["Financial Data"]
  node_results_fetch["Results collection<br/>[results.py]"]
  node_results_parser["Filing parsers"]
  node_results_data["Quarterly results"]
end

node_visitor(("Dashboard user"))
node_exchange_sources{{"Exchange filings and prices"}}
node_fund_sources{{"Fund disclosures"}}
node_index_provider{{"Nifty history source"}}

node_visitor -->|"searches"| node_universe
node_universe -->|"opens company"| node_company_page
node_company_page -->|"shows ownership"| node_ownership_views
node_company_page -->|"shows activity"| node_holder_flows
node_company_page -->|"shows checks"| node_evidence_gates
node_company_data -->|"loads company data"| node_company_page
node_universe_data -->|"loads listings"| node_universe
node_ownership_views -->|"reads holdings"| node_company_data
node_holder_flows -->|"reads holder changes"| node_company_data
node_evidence_gates -->|"reads review flags"| node_company_data
node_company_builder -->|"reads inputs"| node_holder_sources
node_company_builder -->|"writes company data"| node_company_data
node_company_builder -->|"writes universe"| node_universe_data
node_holder_sources -->|"includes filings"| node_exchange_sources
node_holder_sources -.->|"includes disclosures"| node_fund_sources
node_results_fetch -->|"fetches results"| node_exchange_sources
node_results_fetch -->|"parses filings"| node_results_parser
node_results_fetch -->|"writes results"| node_results_data
node_price_refresh -->|"fetches closes"| node_exchange_sources
node_price_refresh -->|"writes price inputs"| node_price_data
node_index_history -->|"fetches history"| node_index_provider
node_index_history -->|"writes index data"| node_price_data
node_data_export -->|"writes app data"| node_company_data
node_data_export -->|"reads results"| node_results_data
node_data_export -->|"reads prices"| node_price_data

click node_universe "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js"
click node_company_page "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js"
click node_ownership_views "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js"
click node_holder_flows "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js"
click node_evidence_gates "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js"
click node_company_data "https://github.com/shrewdlemon/holdermap-dashboard/tree/main/src/co"
click node_universe_data "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/univ.json"
click node_company_builder "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/company.py"
click node_holder_sources "https://github.com/shrewdlemon/holdermap-dashboard/tree/main/pipeline/inputs"
click node_results_fetch "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/results.py"
click node_results_parser "https://github.com/shrewdlemon/holdermap-dashboard/tree/main/pipeline/nseresults"
click node_results_data "https://github.com/shrewdlemon/holdermap-dashboard/tree/main/pipeline/inputs/results"
click node_price_refresh "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/live.py"
click node_price_data "https://github.com/shrewdlemon/holdermap-dashboard/tree/main/pipeline/inputs"
click node_index_history "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/index_hist.py"
click node_data_export "https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/export.py"

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_universe,node_company_page,node_ownership_views,node_holder_flows,node_evidence_gates,node_visitor toneBlue
class node_company_data,node_universe_data,node_company_builder,node_holder_sources,node_data_export toneAmber
class node_price_refresh,node_price_data,node_index_history toneMint
class node_results_fetch,node_results_parser,node_results_data toneRose
class node_exchange_sources,node_fund_sources,node_index_provider toneIndigo
```

## Components

### Dashboard

- [Company universe](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js): `src/app.js`
- [Company pages](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js): `src/app.js`
- [Ownership views](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js): `src/app.js`
- [Holder flows](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js): `src/app.js`
- [Evidence checks](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/app.js): `src/app.js`

### Ownership Data

- [Company data](https://github.com/shrewdlemon/holdermap-dashboard/tree/main/src/co): `src/co`
- [Universe data](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/src/univ.json): `src/univ.json`
- [Company data builder](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/company.py): `pipeline/company.py`
- [Holder source files](https://github.com/shrewdlemon/holdermap-dashboard/tree/main/pipeline/inputs): `pipeline/inputs`
- [Data export](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/export.py): `pipeline/export.py`

### Market Data

- [Price refresh](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/live.py): `pipeline/live.py`
- [Price inputs](https://github.com/shrewdlemon/holdermap-dashboard/tree/main/pipeline/inputs): `pipeline/inputs`
- [Index history](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/index_hist.py): `pipeline/index_hist.py`

### Financial Data

- [Results collection](https://github.com/shrewdlemon/holdermap-dashboard/blob/main/pipeline/results.py): `pipeline/results.py`
- [Filing parsers](https://github.com/shrewdlemon/holdermap-dashboard/tree/main/pipeline/nseresults): `pipeline/nseresults`
- [Quarterly results](https://github.com/shrewdlemon/holdermap-dashboard/tree/main/pipeline/inputs/results): `pipeline/inputs/results`

### Other components

- **Dashboard user**
- **Exchange filings and prices**
- **Fund disclosures**
- **Nifty history source**

## Connections

- Dashboard user → Company universe: searches
- Company universe → Company pages: opens company
- Company pages → Ownership views: shows ownership
- Company pages → Holder flows: shows activity
- Company pages → Evidence checks: shows checks
- Company data → Company pages: loads company data
- Universe data → Company universe: loads listings
- Ownership views → Company data: reads holdings
- Holder flows → Company data: reads holder changes
- Evidence checks → Company data: reads review flags
- Company data builder → Holder source files: reads inputs
- Company data builder → Company data: writes company data
- Company data builder → Universe data: writes universe
- Holder source files → Exchange filings and prices: includes filings
- Holder source files → Fund disclosures: includes disclosures
- Results collection → Exchange filings and prices: fetches results
- Results collection → Filing parsers: parses filings
- Results collection → Quarterly results: writes results
- Price refresh → Exchange filings and prices: fetches closes
- Price refresh → Price inputs: writes price inputs
- Index history → Nifty history source: fetches history
- Index history → Price inputs: writes index data
- Data export → Company data: writes app data
- Data export → Quarterly results: reads results
- Data export → Price inputs: reads prices
