# yuvan1492/indian-jobs architecture

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

- Interactive diagram: https://gitdiagram.com/yuvan1492/indian-jobs
- Repository: https://github.com/yuvan1492/indian-jobs

## Overview

The product is an Indian-market AI exposure scorer and interactive occupation treemap. Its main workflow scores the occupation catalogue, builds visualization data, then presents it in the site; a separate CSV export is also documented. The README describes the generated score and site-data files, although neither appears in the supplied tree, so their paths are left null. The visualization’s internal behavior is not sampled; its role and data input are based on README documentation.

Main entry points: [`score.py`](https://github.com/yuvan1492/indian-jobs/blob/master/score.py) (Exposure scorer), [`build_site_data.py`](https://github.com/yuvan1492/indian-jobs/blob/master/build_site_data.py) (Site data builder), [`occupations.json`](https://github.com/yuvan1492/indian-jobs/blob/master/occupations.json) (Occupation catalogue), [`make_csv.py`](https://github.com/yuvan1492/indian-jobs/blob/master/make_csv.py) (CSV exporter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_scoring["Exposure scoring"]
  node_occupations["Occupation catalogue<br/>[occupations.json]"]
  node_scorer["Exposure scorer<br/>[score.py]"]
  node_heuristic["Heuristic fallback<br/>[score.py]"]
  node_scores["Score data"]
end

subgraph group_visualization["Treemap visualization"]
  node_builder["Site data builder<br/>[build_site_data.py]"]
  node_site_data["Visualization data"]
  node_treemap["Interactive treemap<br/>[index.html]"]
end

subgraph group_exports["Data export"]
  node_csv_exporter["CSV exporter<br/>[make_csv.py]"]
  node_csv_output["Occupation CSV"]
end

node_user(("Visitor"))
node_openrouter{{"OpenRouter API"}}

node_scorer -->|"loads"| node_occupations
node_scorer -->|"loads and saves"| node_scores
node_scorer -.->|"requests scores"| node_openrouter
node_scorer -->|"falls back to"| node_heuristic
node_builder -->|"reads"| node_occupations
node_builder -->|"reads"| node_scores
node_builder -->|"writes"| node_site_data
node_treemap -->|"reads"| node_site_data
node_user -->|"opens"| node_treemap
node_csv_exporter -->|"reads"| node_occupations
node_csv_exporter -->|"writes"| node_csv_output

click node_occupations "https://github.com/yuvan1492/indian-jobs/blob/master/occupations.json"
click node_scorer "https://github.com/yuvan1492/indian-jobs/blob/master/score.py"
click node_heuristic "https://github.com/yuvan1492/indian-jobs/blob/master/score.py"
click node_builder "https://github.com/yuvan1492/indian-jobs/blob/master/build_site_data.py"
click node_treemap "https://github.com/yuvan1492/indian-jobs/blob/master/site/index.html"
click node_csv_exporter "https://github.com/yuvan1492/indian-jobs/blob/master/make_csv.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_occupations,node_scorer,node_heuristic,node_scores toneBlue
class node_builder,node_site_data,node_treemap toneAmber
class node_csv_exporter,node_csv_output,node_openrouter toneMint
class node_user toneIndigo
```

## Components

### Exposure scoring

- [Occupation catalogue](https://github.com/yuvan1492/indian-jobs/blob/master/occupations.json): `occupations.json`
- [Exposure scorer](https://github.com/yuvan1492/indian-jobs/blob/master/score.py): `score.py`
- [Heuristic fallback](https://github.com/yuvan1492/indian-jobs/blob/master/score.py): `score.py`
- **Score data**

### Treemap visualization

- [Site data builder](https://github.com/yuvan1492/indian-jobs/blob/master/build_site_data.py): `build_site_data.py`
- **Visualization data**
- [Interactive treemap](https://github.com/yuvan1492/indian-jobs/blob/master/site/index.html): `site/index.html`

### Data export

- [CSV exporter](https://github.com/yuvan1492/indian-jobs/blob/master/make_csv.py): `make_csv.py`
- **Occupation CSV**

### Other components

- **Visitor**
- **OpenRouter API**

## Connections

- Exposure scorer → Occupation catalogue: loads
- Exposure scorer → Score data: loads and saves
- Exposure scorer → OpenRouter API: requests scores
- Exposure scorer → Heuristic fallback: falls back to
- Site data builder → Occupation catalogue: reads
- Site data builder → Score data: reads
- Site data builder → Visualization data: writes
- Interactive treemap → Visualization data: reads
- Visitor → Interactive treemap: opens
- CSV exporter → Occupation catalogue: reads
- CSV exporter → Occupation CSV: writes
