# naufalramadhaniii27/ds-palpal architecture

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

- Interactive diagram: https://gitdiagram.com/naufalramadhaniii27/ds-palpal
- Repository: https://github.com/naufalramadhaniii27/ds-palpal

## Overview

This repository is a browser-based tabletop RPG character sheet and companion suite, including a character builder, rules/content data, play aids, and export and collaboration features. The main workflow is to create or import a character, derive its stats, manage the sheet and in-play state, then save or export it. The graph preserves major named capabilities from the app entry point and tree; edges are limited to imports, calls, and relationships visible in the excerpts or SOURCE INDEX. Several feature modules were not sampled, so their internal connections are not inferred.

Main entry points: [`src/app/main.js`](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/main.js) (Sheet App Entry), [`src/builder/main.js`](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/main.js) (Builder Entry), [`src/app/15-logic-roster-backup-files-snapshots.js`](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/15-logic-roster-backup-files-snapshots.js) (Roster Backups), [`src/app/04-logic-storage.js`](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/04-logic-storage.js) (Sheet Storage)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sheet["Character Sheet"]
  node_appentry["Sheet App Entry<br/>[main.js]"]
  node_character["Character Data"]
  node_derivation["Stat Derivation"]
  node_sheetui["Sheet UI"]
  node_play["Play Controls"]
end

subgraph group_builder["Character Builder"]
  node_builderentry["Builder Entry<br/>[main.js]"]
  node_buildlogic["Build Rules"]
  node_sheetmapping["Sheet Mapping"]
  node_buildstorage[("Build Storage")]
  node_builderui["Builder UI"]
end

subgraph group_content["Rules Content"]
  node_glossary["Rules Glossary"]
  node_rulesdata["Rules Data"]
end

subgraph group_companion["Companion Features"]
  node_pdf["PDF Renderer<br/>[11-ui-render.js]"]
  node_learn["Learning Guide<br/>[47-ui-learn.js]"]
  node_training["Training Ground<br/>[20-engine.js]"]
  node_friends["Friends<br/>[44-ui-friends.js]"]
end

subgraph group_platform["Platform Services"]
  node_sheetstorage[("Sheet Storage")]
  node_roster["Roster Backups"]
  node_filestate["File State Tools"]
  node_cloudsync["Cloud Sync"]
  node_service["Cloud API<br/>[&#91;&#91;path&#93;&#93;.js]"]
end

node_player(("Player"))

node_player -->|"uses"| node_appentry
node_appentry -->|"imports"| node_character
node_appentry -->|"imports"| node_glossary
node_appentry -->|"imports"| node_sheetstorage
node_appentry -->|"imports"| node_derivation
node_appentry -->|"imports"| node_sheetui
node_appentry -->|"imports"| node_play
node_appentry -->|"imports"| node_roster
node_appentry -->|"imports"| node_filestate
node_sheetstorage -->|"takes snapshots"| node_roster
node_roster -->|"provides file state"| node_filestate
node_player -.->|"builds character"| node_builderentry
node_builderentry -->|"imports"| node_buildlogic
node_builderentry -->|"imports"| node_sheetmapping
node_builderentry -->|"imports"| node_buildstorage
node_builderentry -->|"imports"| node_builderui
node_player -.->|"consults"| node_rulesdata
node_player -.->|"learns with"| node_learn
node_player -.->|"practices in"| node_training
node_player -.->|"syncs"| node_cloudsync
node_cloudsync -.->|"calls"| node_service
node_player -.->|"shares with"| node_friends
node_pdf -.->|"exports for"| node_player

click node_appentry "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/main.js"
click node_character "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/02-data-default-character.js"
click node_glossary "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/03-data-glossary.js"
click node_derivation "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/06-logic-derivation.js"
click node_sheetui "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/08-ui-render-sheet-and-actions.js"
click node_play "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/32-logic-play-undo-actions.js"
click node_sheetstorage "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/04-logic-storage.js"
click node_roster "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/15-logic-roster-backup-files-snapshots.js"
click node_filestate "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/15c-logic-file-state-compress.js"
click node_builderentry "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/main.js"
click node_buildlogic "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/11-logic-derivation.js"
click node_sheetmapping "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/12-logic-export-to-sheet.js"
click node_buildstorage "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/04-logic-storage.js"
click node_builderui "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/17-ui-step-builder.js"
click node_rulesdata "https://github.com/naufalramadhaniii27/ds-palpal/tree/main/src/data"
click node_pdf "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/pdf/11-ui-render.js"
click node_learn "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/learn/47-ui-learn.js"
click node_training "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/tg/20-engine.js"
click node_cloudsync "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/43-logic-cloud-sync.js"
click node_friends "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/44-ui-friends.js"
click node_service "https://github.com/naufalramadhaniii27/ds-palpal/blob/main/functions/api/%5B%5Bpath%5D%5D.js"

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_appentry,node_character,node_derivation,node_sheetui,node_play toneBlue
class node_builderentry,node_buildlogic,node_sheetmapping,node_buildstorage,node_builderui toneAmber
class node_glossary,node_rulesdata toneMint
class node_pdf,node_learn,node_training,node_friends toneRose
class node_sheetstorage,node_roster,node_filestate,node_cloudsync,node_service,node_player toneIndigo
```

## Components

### Character Sheet

- [Sheet App Entry](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/main.js): `src/app/main.js`
- [Character Data](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/02-data-default-character.js): `src/app/02-data-default-character.js`
- [Stat Derivation](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/06-logic-derivation.js): `src/app/06-logic-derivation.js`
- [Sheet UI](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/08-ui-render-sheet-and-actions.js): `src/app/08-ui-render-sheet-and-actions.js`
- [Play Controls](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/32-logic-play-undo-actions.js): `src/app/32-logic-play-undo-actions.js`

### Character Builder

- [Builder Entry](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/main.js): `src/builder/main.js`
- [Build Rules](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/11-logic-derivation.js): `src/builder/11-logic-derivation.js`
- [Sheet Mapping](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/12-logic-export-to-sheet.js): `src/builder/12-logic-export-to-sheet.js`
- [Build Storage](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/04-logic-storage.js): `src/builder/04-logic-storage.js`
- [Builder UI](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/builder/17-ui-step-builder.js): `src/builder/17-ui-step-builder.js`

### Rules Content

- [Rules Glossary](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/03-data-glossary.js): `src/app/03-data-glossary.js`
- [Rules Data](https://github.com/naufalramadhaniii27/ds-palpal/tree/main/src/data): `src/data`

### Companion Features

- [PDF Renderer](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/pdf/11-ui-render.js): `src/pdf/11-ui-render.js`
- [Learning Guide](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/learn/47-ui-learn.js): `src/learn/47-ui-learn.js`
- [Training Ground](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/tg/20-engine.js): `src/tg/20-engine.js`
- [Friends](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/44-ui-friends.js): `src/app/44-ui-friends.js`

### Platform Services

- [Sheet Storage](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/04-logic-storage.js): `src/app/04-logic-storage.js`
- [Roster Backups](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/15-logic-roster-backup-files-snapshots.js): `src/app/15-logic-roster-backup-files-snapshots.js`
- [File State Tools](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/15c-logic-file-state-compress.js): `src/app/15c-logic-file-state-compress.js`
- [Cloud Sync](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/src/app/43-logic-cloud-sync.js): `src/app/43-logic-cloud-sync.js`
- [Cloud API](https://github.com/naufalramadhaniii27/ds-palpal/blob/main/functions/api/%5B%5Bpath%5D%5D.js): `functions/api/[[path]].js`

### Other components

- **Player**

## Connections

- Player → Sheet App Entry: uses
- Sheet App Entry → Character Data: imports (evidence: `src/app/main.js`)
- Sheet App Entry → Rules Glossary: imports (evidence: `src/app/main.js`)
- Sheet App Entry → Sheet Storage: imports (evidence: `src/app/main.js`)
- Sheet App Entry → Stat Derivation: imports (evidence: `src/app/main.js`)
- Sheet App Entry → Sheet UI: imports (evidence: `src/app/main.js`)
- Sheet App Entry → Play Controls: imports (evidence: `src/app/main.js`)
- Sheet App Entry → Roster Backups: imports (evidence: `src/app/main.js`)
- Sheet App Entry → File State Tools: imports (evidence: `src/app/main.js`)
- Sheet Storage → Roster Backups: takes snapshots (evidence: `src/app/04-logic-storage.js`)
- Roster Backups → File State Tools: provides file state (evidence: `src/app/15c-logic-file-state-compress.js`)
- Player → Builder Entry: builds character
- Builder Entry → Build Rules: imports (evidence: `src/builder/main.js`)
- Builder Entry → Sheet Mapping: imports (evidence: `src/builder/main.js`)
- Builder Entry → Build Storage: imports (evidence: `src/builder/main.js`)
- Builder Entry → Builder UI: imports (evidence: `src/builder/main.js`)
- Player → Rules Data: consults
- Player → Learning Guide: learns with
- Player → Training Ground: practices in
- Player → Cloud Sync: syncs
- Cloud Sync → Cloud API: calls
- Player → Friends: shares with
- PDF Renderer → Player: exports for
