# frzyc/genshin-optimizer architecture

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

- Interactive diagram: https://gitdiagram.com/frzyc/genshin-optimizer
- Repository: https://github.com/frzyc/genshin-optimizer

## Overview

Gacha Optimizer is a monorepo for game-specific optimizer websites and a Discord bot. Players enter through a game frontend, navigate its inventory, team, and optimization features, and receive build or calculation results. The Genshin app has both a legacy Waverider frontend and a newer Pando-based frontend; Star Rail uses Pando, while Zenless has a basic optimizer. The README documents these capabilities, but many page implementations are unsampled, so their internal links are not expanded here.

Main entry points: [`apps/gi-frontend/src/app/App.tsx`](https://github.com/frzyc/genshin-optimizer/blob/master/apps/gi-frontend/src/app/App.tsx) (Genshin Pando app), [`apps/sr-frontend/src/app/App.tsx`](https://github.com/frzyc/genshin-optimizer/blob/master/apps/sr-frontend/src/app/App.tsx) (Star Rail app), [`apps/zzz-frontend/src/app/App.tsx`](https://github.com/frzyc/genshin-optimizer/blob/master/apps/zzz-frontend/src/app/App.tsx) (Zenless app), [`apps/somnia/src/main.ts`](https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/main.ts) (Somnia bot)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontends["Game frontends"]
  node_gi_legacy["Genshin frontend<br/>[App.tsx]"]
  node_gi_pando["Genshin Pando app<br/>[App.tsx]"]
  node_sr_app["Star Rail app<br/>[App.tsx]"]
  node_zzz_app["Zenless app<br/>[App.tsx]"]
end

subgraph group_game_domain["Game data and UI"]
  node_gi_db[("Genshin database<br/>[ArtCharDatabase.ts]")]
  node_gi_artifacts["Artifact manager"]
  node_gi_ui["Genshin formula UI"]
  node_sr_db[("Star Rail database<br/>[Database.ts]")]
  node_sr_relics["Relic manager"]
  node_zzz_db[("Zenless database<br/>[Database.ts]")]
  node_zzz_wengines["W-engine manager"]
  node_zzz_wengine_ui["W-engine UI"]
end

subgraph group_calculation["Calculation engines"]
  node_pando["Pando engine"]
  node_gi_formula["Genshin formulas"]
  node_sr_formula["Star Rail formulas"]
  node_zzz_formula["Zenless formulas"]
end

subgraph group_bot["Discord bot"]
  node_somnia["Somnia bot<br/>[main.ts]"]
  node_archive["Archive commands<br/>[archive.ts]"]
  node_databank["Databank commands<br/>[databank.ts]"]
  node_bot_events["Interaction events<br/>[events.ts]"]
  node_bot_messages["Message helpers<br/>[message.ts]"]
  node_bot_permissions["Permission helpers<br/>[permissions.ts]"]
end

node_player(("Player"))

node_player -->|"uses"| node_gi_legacy
node_player -->|"uses"| node_gi_pando
node_player -->|"uses"| node_sr_app
node_player -->|"uses"| node_zzz_app
node_gi_legacy -->|"provides context"| node_gi_db
node_gi_legacy -.->|"routes to features"| node_gi_artifacts
node_gi_pando -->|"provides context"| node_gi_db
node_gi_pando -->|"enables debug"| node_pando
node_gi_pando -.->|"loads optimizer"| node_gi_formula
node_sr_app -->|"enables debug"| node_pando
node_sr_app -->|"provides context"| node_sr_db
node_sr_app -.->|"loads optimizer"| node_sr_formula
node_zzz_app -->|"enables debug"| node_pando
node_zzz_app -->|"provides context"| node_zzz_db
node_zzz_app -.->|"loads optimizer"| node_zzz_formula
node_zzz_wengines -->|"updates equipment"| node_zzz_db
node_zzz_wengine_ui -.->|"selects equipment"| node_zzz_wengines
node_somnia -->|"registers command"| node_archive
node_somnia -->|"imports command"| node_databank
node_somnia -->|"registers events"| node_bot_events
node_archive -->|"uses helpers"| node_bot_messages
node_archive -->|"uses helpers"| node_bot_permissions
node_databank -->|"uses helpers"| node_bot_messages

click node_gi_legacy "https://github.com/frzyc/genshin-optimizer/blob/master/apps/frontend/src/app/App.tsx"
click node_gi_pando "https://github.com/frzyc/genshin-optimizer/blob/master/apps/gi-frontend/src/app/App.tsx"
click node_sr_app "https://github.com/frzyc/genshin-optimizer/blob/master/apps/sr-frontend/src/app/App.tsx"
click node_zzz_app "https://github.com/frzyc/genshin-optimizer/blob/master/apps/zzz-frontend/src/app/App.tsx"
click node_gi_db "https://github.com/frzyc/genshin-optimizer/blob/master/libs/gi/db/src/Database/ArtCharDatabase.ts"
click node_gi_artifacts "https://github.com/frzyc/genshin-optimizer/blob/master/libs/gi/db/src/Database/DataManagers/ArtifactDataManager.ts"
click node_gi_ui "https://github.com/frzyc/genshin-optimizer/tree/master/libs/gi/formula-ui/src"
click node_sr_db "https://github.com/frzyc/genshin-optimizer/blob/master/libs/sr/db/src/Database/Database.ts"
click node_sr_relics "https://github.com/frzyc/genshin-optimizer/blob/master/libs/sr/db/src/Database/DataManagers/RelicDataManager.ts"
click node_zzz_db "https://github.com/frzyc/genshin-optimizer/blob/master/libs/zzz/db/src/Database/Database.ts"
click node_zzz_wengines "https://github.com/frzyc/genshin-optimizer/blob/master/libs/zzz/db/src/Database/DataManagers/WengineDataManager.ts"
click node_zzz_wengine_ui "https://github.com/frzyc/genshin-optimizer/blob/master/libs/zzz/ui/src/Wengine/WengineSwapModal.tsx"
click node_pando "https://github.com/frzyc/genshin-optimizer/tree/master/libs/pando/engine/src"
click node_gi_formula "https://github.com/frzyc/genshin-optimizer/tree/master/libs/gi/formula"
click node_sr_formula "https://github.com/frzyc/genshin-optimizer/tree/master/libs/sr/formula"
click node_zzz_formula "https://github.com/frzyc/genshin-optimizer/tree/master/libs/zzz/formula"
click node_somnia "https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/main.ts"
click node_archive "https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/commands/archive.ts"
click node_databank "https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/commands/databank.ts"
click node_bot_events "https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/lib/events.ts"
click node_bot_messages "https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/lib/message.ts"
click node_bot_permissions "https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/lib/permissions.ts"

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_gi_legacy,node_gi_pando,node_sr_app,node_zzz_app toneBlue
class node_gi_db,node_gi_artifacts,node_gi_ui,node_sr_db,node_sr_relics,node_zzz_db,node_zzz_wengines,node_zzz_wengine_ui toneAmber
class node_pando,node_gi_formula,node_sr_formula,node_zzz_formula toneMint
class node_somnia,node_archive,node_databank,node_bot_events,node_bot_messages,node_bot_permissions toneRose
class node_player toneIndigo
```

## Components

### Game frontends

- [Genshin frontend](https://github.com/frzyc/genshin-optimizer/blob/master/apps/frontend/src/app/App.tsx): `apps/frontend/src/app/App.tsx`
- [Genshin Pando app](https://github.com/frzyc/genshin-optimizer/blob/master/apps/gi-frontend/src/app/App.tsx): `apps/gi-frontend/src/app/App.tsx`
- [Star Rail app](https://github.com/frzyc/genshin-optimizer/blob/master/apps/sr-frontend/src/app/App.tsx): `apps/sr-frontend/src/app/App.tsx`
- [Zenless app](https://github.com/frzyc/genshin-optimizer/blob/master/apps/zzz-frontend/src/app/App.tsx): `apps/zzz-frontend/src/app/App.tsx`

### Game data and UI

- [Genshin database](https://github.com/frzyc/genshin-optimizer/blob/master/libs/gi/db/src/Database/ArtCharDatabase.ts): `libs/gi/db/src/Database/ArtCharDatabase.ts`
- [Artifact manager](https://github.com/frzyc/genshin-optimizer/blob/master/libs/gi/db/src/Database/DataManagers/ArtifactDataManager.ts): `libs/gi/db/src/Database/DataManagers/ArtifactDataManager.ts`
- [Genshin formula UI](https://github.com/frzyc/genshin-optimizer/tree/master/libs/gi/formula-ui/src): `libs/gi/formula-ui/src`
- [Star Rail database](https://github.com/frzyc/genshin-optimizer/blob/master/libs/sr/db/src/Database/Database.ts): `libs/sr/db/src/Database/Database.ts`
- [Relic manager](https://github.com/frzyc/genshin-optimizer/blob/master/libs/sr/db/src/Database/DataManagers/RelicDataManager.ts): `libs/sr/db/src/Database/DataManagers/RelicDataManager.ts`
- [Zenless database](https://github.com/frzyc/genshin-optimizer/blob/master/libs/zzz/db/src/Database/Database.ts): `libs/zzz/db/src/Database/Database.ts`
- [W-engine manager](https://github.com/frzyc/genshin-optimizer/blob/master/libs/zzz/db/src/Database/DataManagers/WengineDataManager.ts): `libs/zzz/db/src/Database/DataManagers/WengineDataManager.ts`
- [W-engine UI](https://github.com/frzyc/genshin-optimizer/blob/master/libs/zzz/ui/src/Wengine/WengineSwapModal.tsx): `libs/zzz/ui/src/Wengine/WengineSwapModal.tsx`

### Calculation engines

- [Pando engine](https://github.com/frzyc/genshin-optimizer/tree/master/libs/pando/engine/src): `libs/pando/engine/src`
- [Genshin formulas](https://github.com/frzyc/genshin-optimizer/tree/master/libs/gi/formula): `libs/gi/formula`
- [Star Rail formulas](https://github.com/frzyc/genshin-optimizer/tree/master/libs/sr/formula): `libs/sr/formula`
- [Zenless formulas](https://github.com/frzyc/genshin-optimizer/tree/master/libs/zzz/formula): `libs/zzz/formula`

### Discord bot

- [Somnia bot](https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/main.ts): `apps/somnia/src/main.ts`
- [Archive commands](https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/commands/archive.ts): `apps/somnia/src/commands/archive.ts`
- [Databank commands](https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/commands/databank.ts): `apps/somnia/src/commands/databank.ts`
- [Interaction events](https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/lib/events.ts): `apps/somnia/src/lib/events.ts`
- [Message helpers](https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/lib/message.ts): `apps/somnia/src/lib/message.ts`
- [Permission helpers](https://github.com/frzyc/genshin-optimizer/blob/master/apps/somnia/src/lib/permissions.ts): `apps/somnia/src/lib/permissions.ts`

### Other components

- **Player**

## Connections

- Player → Genshin frontend: uses (evidence: `README.md`)
- Player → Genshin Pando app: uses (evidence: `README.md`)
- Player → Star Rail app: uses (evidence: `README.md`)
- Player → Zenless app: uses (evidence: `README.md`)
- Genshin frontend → Genshin database: provides context (evidence: `apps/frontend/src/app/App.tsx`)
- Genshin frontend → Artifact manager: routes to features
- Genshin Pando app → Genshin database: provides context (evidence: `apps/gi-frontend/src/app/App.tsx`)
- Genshin Pando app → Pando engine: enables debug (evidence: `apps/gi-frontend/src/app/App.tsx`)
- Genshin Pando app → Genshin formulas: loads optimizer
- Star Rail app → Pando engine: enables debug (evidence: `apps/sr-frontend/src/app/App.tsx`)
- Star Rail app → Star Rail database: provides context (evidence: `apps/sr-frontend/src/app/App.tsx`)
- Star Rail app → Star Rail formulas: loads optimizer
- Zenless app → Pando engine: enables debug (evidence: `apps/zzz-frontend/src/app/App.tsx`)
- Zenless app → Zenless database: provides context (evidence: `apps/zzz-frontend/src/app/App.tsx`)
- Zenless app → Zenless formulas: loads optimizer
- W-engine manager → Zenless database: updates equipment (evidence: `libs/zzz/db/src/Database/DataManagers/WengineDataManager.ts`)
- W-engine UI → W-engine manager: selects equipment
- Somnia bot → Archive commands: registers command (evidence: `apps/somnia/src/main.ts`)
- Somnia bot → Databank commands: imports command (evidence: `apps/somnia/src/main.ts`)
- Somnia bot → Interaction events: registers events (evidence: `apps/somnia/src/main.ts`)
- Archive commands → Message helpers: uses helpers (evidence: `apps/somnia/src/commands/archive.ts`)
- Archive commands → Permission helpers: uses helpers (evidence: `apps/somnia/src/commands/archive.ts`)
- Databank commands → Message helpers: uses helpers (evidence: `apps/somnia/src/commands/databank.ts`)
