# jadc83/helpertablero architecture

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

- Interactive diagram: https://gitdiagram.com/jadc83/helpertablero
- Repository: https://github.com/jadc83/helpertablero

## Overview

Aden Oscura Tablero is a tabletop role-playing game virtual tabletop. A user opens or creates a campaign, edits campaign characters and scenes, then runs play on the game board with tokens, maps, fog, weather, sound and dice; campaign state can be saved and exported. The graph preserves the distinct campaign, reference, character, map-authoring and live-play areas. Edges are limited to relationships supported by the excerpts or SOURCE INDEX; other unsampled UI wiring is intentionally omitted.

Main entry points: [`AdenOscuraTablero/src/App.jsx`](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/App.jsx) (Application coordinator), [`AdenOscuraTablero/src/components/GameBoard.jsx`](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/GameBoard.jsx) (Game board), [`AdenOscuraTablero/src/utils/fileDialog.js`](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/utils/fileDialog.js) (JSON file access), [`AdenOscuraTablero/src/components/CharacterSheetModal.jsx`](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/CharacterSheetModal.jsx) (Character sheets)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_campaign["Campaign management"]
  node_app["Application coordinator<br/>[App.jsx]"]
  node_home["Campaign home<br/>[HomeScreen.jsx]"]
  node_campaignstore[("Campaign persistence<br/>[campaignStorage.js]")]
  node_localstore["Local preference hook<br/>[useLocalStorage.js]"]
  node_filedialog["JSON file access<br/>[fileDialog.js]"]
  node_settings["Campaign settings<br/>[SettingsDrawer.jsx]"]
  node_notes["Campaign notes"]
  node_tauri["Tauri file commands<br/>[lib.rs]"]
end

subgraph group_characters["Character archive"]
  node_encyclopedia["Entity encyclopedia"]
  node_sheet["Character sheets"]
  node_items["Common item catalog<br/>[commonItems.js]"]
  node_iconcatalog["Game icon catalog<br/>[GameIcons.jsx]"]
end

subgraph group_maps["Map authoring"]
  node_mapcreator["Map creator<br/>[MapCreator.jsx]"]
end

subgraph group_play["Live tabletop"]
  node_board["Game board<br/>[GameBoard.jsx]"]
  node_maplayer["Map layer<br/>[MapLayer.jsx]"]
  node_fog["Fog of war<br/>[FogLayer.jsx]"]
  node_grid["Board grid<br/>[GridLayer.jsx]"]
  node_token["Game tokens<br/>[GameToken.jsx]"]
  node_sidebar["Token sidebar<br/>[TokenSidebar.jsx]"]
  node_toolbar["Play toolbar<br/>[Toolbar.jsx]"]
  node_weather["Weather overlay<br/>[WeatherOverlay.jsx]"]
  node_sound["Soundboard<br/>[Soundboard.jsx]"]
  node_dice["Dice roller<br/>[DiceRoller.jsx]"]
  node_dice3d["3D dice renderer<br/>[Dice3D.jsx]"]
end

subgraph group_reference["Play aids"]
  node_reference["Mythos reference"]
  node_tutorial["Tutorial<br/>[TutorialModal.jsx]"]
end

node_player(("Game master"))

node_player -->|"opens campaign"| node_home
node_home -->|"loads campaigns"| node_campaignstore
node_home -->|"opens reference"| node_encyclopedia
node_app -->|"renders"| node_home
node_app -->|"loads and saves"| node_campaignstore
node_campaignstore -->|"exports JSON"| node_filedialog
node_campaignstore -->|"invokes file commands"| node_tauri
node_app -->|"exports JSON"| node_filedialog
node_app -->|"renders"| node_settings
node_app -->|"renders"| node_notes
node_app -->|"renders"| node_board
node_app -->|"renders"| node_sidebar
node_app -->|"renders"| node_toolbar
node_app -->|"renders"| node_dice
node_app -->|"renders"| node_sound
node_app -->|"renders"| node_tutorial
node_app -->|"renders"| node_mapcreator
node_app -->|"renders"| node_sheet
node_app -->|"renders"| node_encyclopedia
node_app -->|"renders"| node_weather
node_settings -->|"imports characters"| node_filedialog
node_settings -->|"uses map presets"| node_mapcreator
node_settings -->|"uses item catalog"| node_items
node_sheet -->|"imports and exports"| node_filedialog
node_sheet -->|"reads classifications"| node_encyclopedia
node_sheet -->|"gets item icons"| node_iconcatalog
node_sheet -->|"uses item catalog"| node_items
node_mapcreator -->|"imports and exports"| node_filedialog
node_board -->|"renders"| node_maplayer
node_board -->|"renders"| node_fog
node_board -->|"renders"| node_grid
node_board -->|"renders"| node_token
node_board -->|"renders"| node_weather
node_board -->|"renders"| node_sound
node_maplayer -->|"renders"| node_fog
node_dice -->|"renders dice"| node_dice3d
node_player -->|"manages session"| node_app
node_app -.->|"uses preferences"| node_localstore
node_sidebar -->|"uses map tools"| node_mapcreator
node_encyclopedia -.->|"imports entries"| node_filedialog
node_tauri -.->|"serves file commands"| node_campaignstore

click node_app "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/App.jsx"
click node_home "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/HomeScreen.jsx"
click node_campaignstore "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/utils/campaignStorage.js"
click node_localstore "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/hooks/useLocalStorage.js"
click node_filedialog "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/utils/fileDialog.js"
click node_settings "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/SettingsDrawer.jsx"
click node_notes "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/MasterNotesDrawer.jsx"
click node_encyclopedia "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/EncyclopediaView.jsx"
click node_sheet "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/CharacterSheetModal.jsx"
click node_items "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/constants/commonItems.js"
click node_iconcatalog "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/icons/GameIcons.jsx"
click node_mapcreator "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/MapCreator.jsx"
click node_board "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/GameBoard.jsx"
click node_maplayer "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/MapLayer.jsx"
click node_fog "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/FogLayer.jsx"
click node_grid "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/GridLayer.jsx"
click node_token "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/GameToken.jsx"
click node_sidebar "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/TokenSidebar.jsx"
click node_toolbar "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/Toolbar.jsx"
click node_weather "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/WeatherOverlay.jsx"
click node_sound "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/Soundboard.jsx"
click node_dice "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/DiceRoller.jsx"
click node_dice3d "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/Dice3D.jsx"
click node_reference "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/EncyclopediaView.jsx"
click node_tutorial "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/TutorialModal.jsx"
click node_tauri "https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src-tauri/src/lib.rs"

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_app,node_home,node_campaignstore,node_localstore,node_filedialog,node_settings,node_notes,node_tauri toneBlue
class node_encyclopedia,node_sheet,node_items,node_iconcatalog toneAmber
class node_mapcreator toneMint
class node_board,node_maplayer,node_fog,node_grid,node_token,node_sidebar,node_toolbar,node_weather,node_sound,node_dice,node_dice3d toneRose
class node_reference,node_tutorial,node_player toneIndigo
```

## Components

### Campaign management

- [Application coordinator](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/App.jsx): `AdenOscuraTablero/src/App.jsx`
- [Campaign home](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/HomeScreen.jsx): `AdenOscuraTablero/src/components/HomeScreen.jsx`
- [Campaign persistence](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/utils/campaignStorage.js): `AdenOscuraTablero/src/utils/campaignStorage.js`
- [Local preference hook](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/hooks/useLocalStorage.js): `AdenOscuraTablero/src/hooks/useLocalStorage.js`
- [JSON file access](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/utils/fileDialog.js): `AdenOscuraTablero/src/utils/fileDialog.js`
- [Campaign settings](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/SettingsDrawer.jsx): `AdenOscuraTablero/src/components/SettingsDrawer.jsx`
- [Campaign notes](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/MasterNotesDrawer.jsx): `AdenOscuraTablero/src/components/MasterNotesDrawer.jsx`
- [Tauri file commands](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src-tauri/src/lib.rs): `AdenOscuraTablero/src-tauri/src/lib.rs`

### Character archive

- [Entity encyclopedia](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/EncyclopediaView.jsx): `AdenOscuraTablero/src/components/EncyclopediaView.jsx`
- [Character sheets](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/CharacterSheetModal.jsx): `AdenOscuraTablero/src/components/CharacterSheetModal.jsx`
- [Common item catalog](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/constants/commonItems.js): `AdenOscuraTablero/src/constants/commonItems.js`
- [Game icon catalog](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/icons/GameIcons.jsx): `AdenOscuraTablero/src/components/icons/GameIcons.jsx`

### Map authoring

- [Map creator](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/MapCreator.jsx): `AdenOscuraTablero/src/components/MapCreator.jsx`

### Live tabletop

- [Game board](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/GameBoard.jsx): `AdenOscuraTablero/src/components/GameBoard.jsx`
- [Map layer](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/MapLayer.jsx): `AdenOscuraTablero/src/components/MapLayer.jsx`
- [Fog of war](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/FogLayer.jsx): `AdenOscuraTablero/src/components/FogLayer.jsx`
- [Board grid](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/GridLayer.jsx): `AdenOscuraTablero/src/components/GridLayer.jsx`
- [Game tokens](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/GameToken.jsx): `AdenOscuraTablero/src/components/GameToken.jsx`
- [Token sidebar](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/TokenSidebar.jsx): `AdenOscuraTablero/src/components/TokenSidebar.jsx`
- [Play toolbar](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/Toolbar.jsx): `AdenOscuraTablero/src/components/Toolbar.jsx`
- [Weather overlay](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/WeatherOverlay.jsx): `AdenOscuraTablero/src/components/WeatherOverlay.jsx`
- [Soundboard](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/Soundboard.jsx): `AdenOscuraTablero/src/components/Soundboard.jsx`
- [Dice roller](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/DiceRoller.jsx): `AdenOscuraTablero/src/components/DiceRoller.jsx`
- [3D dice renderer](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/Dice3D.jsx): `AdenOscuraTablero/src/components/Dice3D.jsx`

### Play aids

- [Mythos reference](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/EncyclopediaView.jsx): `AdenOscuraTablero/src/components/EncyclopediaView.jsx`
- [Tutorial](https://github.com/jadc83/helpertablero/blob/main/AdenOscuraTablero/src/components/TutorialModal.jsx): `AdenOscuraTablero/src/components/TutorialModal.jsx`

### Other components

- **Game master**

## Connections

- Game master → Campaign home: opens campaign (evidence: `AdenOscuraTablero/src/components/HomeScreen.jsx`)
- Campaign home → Campaign persistence: loads campaigns (evidence: `AdenOscuraTablero/src/components/HomeScreen.jsx`)
- Campaign home → Entity encyclopedia: opens reference (evidence: `AdenOscuraTablero/src/components/HomeScreen.jsx`)
- Application coordinator → Campaign home: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Campaign persistence: loads and saves (evidence: `AdenOscuraTablero/src/App.jsx`)
- Campaign persistence → JSON file access: exports JSON (evidence: `AdenOscuraTablero/src/utils/campaignStorage.js`)
- Campaign persistence → Tauri file commands: invokes file commands (evidence: `AdenOscuraTablero/src/utils/campaignStorage.js`)
- Application coordinator → JSON file access: exports JSON (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Campaign settings: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Campaign notes: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Game board: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Token sidebar: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Play toolbar: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Dice roller: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Soundboard: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Tutorial: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Map creator: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Character sheets: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Entity encyclopedia: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Weather overlay: renders (evidence: `AdenOscuraTablero/src/App.jsx`)
- Campaign settings → JSON file access: imports characters (evidence: `AdenOscuraTablero/src/components/SettingsDrawer.jsx`)
- Campaign settings → Map creator: uses map presets (evidence: `AdenOscuraTablero/src/components/SettingsDrawer.jsx`)
- Campaign settings → Common item catalog: uses item catalog (evidence: `AdenOscuraTablero/src/components/SettingsDrawer.jsx`)
- Character sheets → JSON file access: imports and exports (evidence: `AdenOscuraTablero/src/components/CharacterSheetModal.jsx`)
- Character sheets → Entity encyclopedia: reads classifications (evidence: `AdenOscuraTablero/src/components/CharacterSheetModal.jsx`)
- Character sheets → Game icon catalog: gets item icons (evidence: `AdenOscuraTablero/src/components/CharacterSheetModal.jsx`)
- Character sheets → Common item catalog: uses item catalog (evidence: `AdenOscuraTablero/src/components/CharacterSheetModal.jsx`)
- Map creator → JSON file access: imports and exports (evidence: `AdenOscuraTablero/src/components/MapCreator.jsx`)
- Game board → Map layer: renders (evidence: `AdenOscuraTablero/src/components/GameBoard.jsx`)
- Game board → Fog of war: renders (evidence: `AdenOscuraTablero/src/components/GameBoard.jsx`)
- Game board → Board grid: renders (evidence: `AdenOscuraTablero/src/components/GameBoard.jsx`)
- Game board → Game tokens: renders (evidence: `AdenOscuraTablero/src/components/GameBoard.jsx`)
- Game board → Weather overlay: renders (evidence: `AdenOscuraTablero/src/components/GameBoard.jsx`)
- Game board → Soundboard: renders (evidence: `AdenOscuraTablero/src/components/GameBoard.jsx`)
- Map layer → Fog of war: renders (evidence: `AdenOscuraTablero/src/components/MapLayer.jsx`)
- Dice roller → 3D dice renderer: renders dice (evidence: `AdenOscuraTablero/src/components/DiceRoller.jsx`)
- Game master → Application coordinator: manages session (evidence: `AdenOscuraTablero/src/App.jsx`)
- Application coordinator → Local preference hook: uses preferences (evidence: `AdenOscuraTablero/src/App.jsx`)
- Token sidebar → Map creator: uses map tools (evidence: `AdenOscuraTablero/src/components/TokenSidebar.jsx`)
- Entity encyclopedia → JSON file access: imports entries
- Tauri file commands → Campaign persistence: serves file commands
