# nitro-neal/ffxi-skillchain-calculator architecture

> Architecture diagram of the GitHub repository nitro-neal/ffxi-skillchain-calculator, 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/nitro-neal/ffxi-skillchain-calculator
- Repository: https://github.com/nitro-neal/ffxi-skillchain-calculator
- Video tour (about a minute): https://gitdiagram.com/nitro-neal/ffxi-skillchain-calculator/video

## Overview

This is a browser-based FFXI skillchain calculator with a separate job-advice chatbot. The main workflow selects two party jobs, weapons, and a level, then presents skillchain results with a weaponskill filter. CSV loading and result computation are distinct internal stages. The sampled excerpts establish the chatbot proxy call and the UI’s component relationships; wiring from the app to the calculator module is not shown, so that link is omitted.

Main entry points: [`src/App.js`](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/App.js) (Calculator page), [`src/TopLevel.js`](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/TopLevel.js) (Page routing), [`src/components/SkillchainResults.js`](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/components/SkillchainResults.js) (Results display), [`src/Util.js`](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/Util.js) (Data loading and helpers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interface"]
  node_routes["Page routing<br/>[TopLevel.js]"]
  node_calculator_ui["Calculator page<br/>[App.js]"]
  node_job_tiles["Job tiles<br/>[CharacterTiles.js]"]
  node_job_weapon["Job and weapon picker<br/>[JobWeaponSelect.js]"]
  node_results_ui["Results display"]
  node_filter_ui["Weaponskill filter"]
end

subgraph group_calculation["Skillchain calculation"]
  node_calc_engine["Skillchain engine<br/>[SkillchainCalc.js]"]
  node_util["Data loading and helpers<br/>[Util.js]"]
end

subgraph group_assistant["Job advice"]
  node_chatbot["Chatbot page<br/>[ChatBot.js]"]
  node_proxy["Chat proxy<br/>[proxy.js]"]
end

subgraph group_data["Reference data"]
  node_skill_data["Skillchain and weaponskill CSVs"]
end

node_user(("Player"))
node_advice_service{{"Advice service"}}

node_user -->|"opens pages"| node_routes
node_routes -->|"renders calculator"| node_calculator_ui
node_routes -->|"renders chatbot"| node_chatbot
node_calculator_ui -->|"renders"| node_job_tiles
node_calculator_ui -->|"renders"| node_job_weapon
node_calculator_ui -->|"renders"| node_results_ui
node_calculator_ui -->|"initializes data"| node_util
node_util -->|"loads CSVs"| node_skill_data
node_results_ui -->|"renders filter"| node_filter_ui
node_results_ui -->|"filters moves"| node_util
node_user -->|"asks question"| node_chatbot
node_chatbot -->|"sends query"| node_proxy
node_proxy -->|"forwards request"| node_advice_service

click node_routes "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/TopLevel.js"
click node_calculator_ui "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/App.js"
click node_job_tiles "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/components/CharacterTiles.js"
click node_job_weapon "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/components/JobWeaponSelect.js"
click node_results_ui "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/components/SkillchainResults.js"
click node_filter_ui "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/components/SkillchainFilter.js"
click node_calc_engine "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/SkillchainCalc.js"
click node_util "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/Util.js"
click node_chatbot "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/ChatBot.js"
click node_proxy "https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/netlify/functions/proxy.js"
click node_skill_data "https://github.com/nitro-neal/ffxi-skillchain-calculator/tree/main/src/skillchain-info"

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_routes,node_calculator_ui,node_job_tiles,node_job_weapon,node_results_ui,node_filter_ui toneBlue
class node_calc_engine,node_util toneAmber
class node_chatbot,node_proxy toneMint
class node_skill_data toneRose
class node_user,node_advice_service toneIndigo
```

## Components

### User interface

- [Page routing](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/TopLevel.js): `src/TopLevel.js`
- [Calculator page](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/App.js): `src/App.js`
- [Job tiles](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/components/CharacterTiles.js): `src/components/CharacterTiles.js`
- [Job and weapon picker](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/components/JobWeaponSelect.js): `src/components/JobWeaponSelect.js`
- [Results display](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/components/SkillchainResults.js): `src/components/SkillchainResults.js`
- [Weaponskill filter](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/components/SkillchainFilter.js): `src/components/SkillchainFilter.js`

### Skillchain calculation

- [Skillchain engine](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/SkillchainCalc.js): `src/SkillchainCalc.js`
- [Data loading and helpers](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/Util.js): `src/Util.js`

### Job advice

- [Chatbot page](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/src/ChatBot.js): `src/ChatBot.js`
- [Chat proxy](https://github.com/nitro-neal/ffxi-skillchain-calculator/blob/main/netlify/functions/proxy.js): `netlify/functions/proxy.js`

### Reference data

- [Skillchain and weaponskill CSVs](https://github.com/nitro-neal/ffxi-skillchain-calculator/tree/main/src/skillchain-info): `src/skillchain-info`

### Other components

- **Player**
- **Advice service**

## Connections

- Player → Page routing: opens pages
- Page routing → Calculator page: renders calculator
- Page routing → Chatbot page: renders chatbot
- Calculator page → Job tiles: renders
- Calculator page → Job and weapon picker: renders
- Calculator page → Results display: renders
- Calculator page → Data loading and helpers: initializes data
- Data loading and helpers → Skillchain and weaponskill CSVs: loads CSVs
- Results display → Weaponskill filter: renders filter
- Results display → Data loading and helpers: filters moves
- Player → Chatbot page: asks question
- Chatbot page → Chat proxy: sends query
- Chat proxy → Advice service: forwards request
