# nurah-kamal/plain-board architecture

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

- Interactive diagram: https://gitdiagram.com/nurah-kamal/plain-board
- Repository: https://github.com/nurah-kamal/plain-board
- Video tour (about a minute): https://gitdiagram.com/nurah-kamal/plain-board/video

## Overview

Plain Board is a browser-only internal reporting dashboard: a manager opens a report, the page loads board data, and the selected view presents figures, charts, and tables with explicit limits. Its twelve pages cover current work, requests and notes, channels, people and workload, decisions, trends, data sources, reading rules, components, and data configuration. The README documents these capabilities and the shared loading/data contract; sampled source is incomplete, so links between report scripts and shared presentation helpers are omitted where their calls could not be verified.

Main entry points: [`assets/js/shared/loading.js`](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/loading.js) (Loading states), [`assets/js/pages/data.js`](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/data.js) (Your data), [`assets/js/pages/sources.js`](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/sources.js) (Sources and coverage), [`assets/js/pages/today.js`](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/today.js) (Today)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_reports["Reporting pages"]
  node_today["Today<br/>[today.js]"]
  node_requests["Waiting requests<br/>[requests.js]"]
  node_notes["Note quality<br/>[notes.js]"]
  node_channels["Channels<br/>[channels.js]"]
  node_team["By person<br/>[team.js]"]
  node_workload["Workload<br/>[workload.js]"]
  node_decisions["Needs a decision<br/>[decisions.js]"]
  node_trends["Trends<br/>[trends.js]"]
  node_sources["Sources and coverage<br/>[sources.js]"]
  node_rules["Reading rules<br/>[rules.js]"]
  node_components["Components<br/>[components.js]"]
  node_data_page["Your data<br/>[data.js]"]
end

subgraph group_shared["Shared runtime"]
  node_runtime_shell["App shell<br/>[app.js]"]
  node_loading["Loading states<br/>[loading.js]"]
  node_charts["SVG charts<br/>[charts.js]"]
  node_board_config["Board configuration<br/>[board.js]"]
end

subgraph group_data["Data and interpretation"]
  node_board_data[("Board data<br/>[data.js]")]
  node_source_info["Source details<br/>[source.js]"]
end

subgraph group_interaction["User controls"]
  node_filters["Filters<br/>[filters.js]"]
  node_saved_views["Saved views<br/>[views.js]"]
end

node_manager(("Manager"))
node_browser_storage[("Browser storage")]
node_local_file["CSV or JSON file"]

node_manager -->|"opens report"| node_today
node_manager -->|"opens report"| node_requests
node_manager -->|"opens report"| node_notes
node_manager -->|"opens report"| node_channels
node_manager -->|"opens report"| node_team
node_manager -->|"opens report"| node_workload
node_manager -->|"opens report"| node_decisions
node_manager -->|"opens report"| node_trends
node_manager -->|"opens report"| node_sources
node_manager -->|"opens report"| node_rules
node_manager -->|"opens report"| node_components
node_manager -->|"opens report"| node_data_page
node_today -->|"uses page states"| node_loading
node_requests -->|"uses page states"| node_loading
node_notes -->|"uses page states"| node_loading
node_channels -->|"uses page states"| node_loading
node_team -->|"uses page states"| node_loading
node_workload -->|"uses page states"| node_loading
node_decisions -->|"uses page states"| node_loading
node_trends -->|"uses page states"| node_loading
node_sources -->|"uses page states"| node_loading
node_rules -->|"uses page states"| node_loading
node_components -->|"uses page states"| node_loading
node_data_page -->|"uses page states"| node_loading
node_loading -->|"loads rows"| node_board_data
node_manager -->|"provides file"| node_local_file
node_local_file -->|"imports in browser"| node_data_page
node_data_page -->|"configures data"| node_board_data
node_sources -->|"shows coverage"| node_source_info
node_manager -->|"sets filters"| node_filters
node_filters -->|"stores selection"| node_browser_storage
node_manager -->|"saves view"| node_saved_views
node_saved_views -->|"persists locally"| node_browser_storage
node_manager -->|"uses board shell"| node_runtime_shell
node_runtime_shell -->|"reads settings"| node_board_config

click node_today "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/today.js"
click node_requests "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/requests.js"
click node_notes "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/notes.js"
click node_channels "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/channels.js"
click node_team "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/team.js"
click node_workload "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/workload.js"
click node_decisions "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/decisions.js"
click node_trends "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/trends.js"
click node_sources "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/sources.js"
click node_rules "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/rules.js"
click node_components "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/components.js"
click node_data_page "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/data.js"
click node_runtime_shell "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/app.js"
click node_loading "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/loading.js"
click node_charts "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/charts.js"
click node_board_config "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/board.js"
click node_board_data "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/data.js"
click node_source_info "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/source.js"
click node_filters "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/filters.js"
click node_saved_views "https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/views.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_today,node_requests,node_notes,node_channels,node_team,node_workload,node_decisions,node_trends,node_sources,node_rules,node_components,node_data_page toneBlue
class node_runtime_shell,node_loading,node_charts,node_board_config,node_browser_storage toneAmber
class node_board_data,node_source_info toneMint
class node_filters,node_saved_views toneRose
class node_manager,node_local_file toneIndigo
```

## Components

### Reporting pages

- [Today](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/today.js): `assets/js/pages/today.js`
- [Waiting requests](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/requests.js): `assets/js/pages/requests.js`
- [Note quality](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/notes.js): `assets/js/pages/notes.js`
- [Channels](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/channels.js): `assets/js/pages/channels.js`
- [By person](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/team.js): `assets/js/pages/team.js`
- [Workload](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/workload.js): `assets/js/pages/workload.js`
- [Needs a decision](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/decisions.js): `assets/js/pages/decisions.js`
- [Trends](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/trends.js): `assets/js/pages/trends.js`
- [Sources and coverage](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/sources.js): `assets/js/pages/sources.js`
- [Reading rules](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/rules.js): `assets/js/pages/rules.js`
- [Components](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/components.js): `assets/js/pages/components.js`
- [Your data](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/pages/data.js): `assets/js/pages/data.js`

### Shared runtime

- [App shell](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/app.js): `assets/js/shared/app.js`
- [Loading states](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/loading.js): `assets/js/shared/loading.js`
- [SVG charts](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/charts.js): `assets/js/shared/charts.js`
- [Board configuration](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/board.js): `assets/js/shared/board.js`

### Data and interpretation

- [Board data](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/data.js): `assets/js/shared/data.js`
- [Source details](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/source.js): `assets/js/shared/source.js`

### User controls

- [Filters](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/filters.js): `assets/js/shared/filters.js`
- [Saved views](https://github.com/nurah-kamal/plain-board/blob/main/assets/js/shared/views.js): `assets/js/shared/views.js`

### Other components

- **Manager**
- **Browser storage**
- **CSV or JSON file**

## Connections

- Manager → Today: opens report
- Manager → Waiting requests: opens report
- Manager → Note quality: opens report
- Manager → Channels: opens report
- Manager → By person: opens report
- Manager → Workload: opens report
- Manager → Needs a decision: opens report
- Manager → Trends: opens report
- Manager → Sources and coverage: opens report
- Manager → Reading rules: opens report
- Manager → Components: opens report
- Manager → Your data: opens report
- Today → Loading states: uses page states
- Waiting requests → Loading states: uses page states
- Note quality → Loading states: uses page states
- Channels → Loading states: uses page states
- By person → Loading states: uses page states
- Workload → Loading states: uses page states
- Needs a decision → Loading states: uses page states
- Trends → Loading states: uses page states
- Sources and coverage → Loading states: uses page states
- Reading rules → Loading states: uses page states
- Components → Loading states: uses page states
- Your data → Loading states: uses page states
- Loading states → Board data: loads rows
- Manager → CSV or JSON file: provides file
- CSV or JSON file → Your data: imports in browser
- Your data → Board data: configures data
- Sources and coverage → Source details: shows coverage
- Manager → Filters: sets filters
- Filters → Browser storage: stores selection
- Manager → Saved views: saves view
- Saved views → Browser storage: persists locally
- Manager → App shell: uses board shell
- App shell → Board configuration: reads settings
