# xmatsuda2053/toybox architecture

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

- Interactive diagram: https://gitdiagram.com/xmatsuda2053/toybox
- Repository: https://github.com/xmatsuda2053/toybox

## Overview

1. This repository is a small suite of standalone, browser-based applications built from one shared codebase. The top-level HTML entry points are separate artifacts for each app: `hubaddress.html`, `stepnote.html`, and `toybox.html`, with built outputs in `dist/` and source-compatible copies in `root/`.

2. The technical stack is TypeScript with Lit-style component architecture and colocated SCSS styling. Most UI elements are split into small custom components, with matching `.lit.scss` files for scoped presentation. A Vite-based build pipeline is implied by `vite.config.ts`, with `build.js` likely orchestrating packaging.

3. The shared foundation lives under `src/common` and `src/utils`. `common` contains reusable UI primitives such as file upload, search input, copy button, date picker, markdown editor, help viewer, and data exporter. `utils` contains cross-cutting logic for dates, config, scheduling, events, and general helpers.

4. `src/assets` is the shared asset layer. It centralizes icons and related asset generation, so app features can reference a common visual vocabulary rather than duplicating image/icon handling.

5. The `StepNote` app is the largest subsystem. Its root bootstrap is `src/apps/stepnote/step-note-app.ts`, and it is organized around task tracking, journaling, configuration, navigation, and dashboard views. The feature set is split into `components/{config,dashboard,journal,list,menu,nav,tab,task}`.

6. `StepNote` has a clear data layer boundary under `src/apps/stepnote/database`. The `repositories` folder maps to persisted domain entities such as tasks, labels, notes, logs, quick access items, dashboards, and config. `services` and `calculators` add derived queries and metrics, especially for dashboard data and task statistics.

7. `StepNote`’s main data flow is: user actions in Lit components update repositories, repositories read/write the local app database, and query services derive aggregate views for dashboards and summaries. The models in `src/apps/stepnote/models` define the domain objects that move across this boundary, including tasks, labels, notes, logs, contacts, configs, and KPI values.

8. The `StepNote` UI is organized as a shell with navigation/menu on one side and task/journal/dashboard content in the main area. The menu subsystem includes embedded help pages in Markdown, which are rendered through shared help/markdown tooling. This app is designed around dense in-app workflows rather than broad page navigation.

9. The `HubAddress` app is a separate bounded subsystem with its own bootstrap in `src/apps/hub-address.ts` and implementation root in `src/apps/hubaddress/hub-address-app.ts`. Its main features are a menu, uploader, and viewer, indicating a workflow centered on ingesting address data and browsing it by division or staff.

10. `HubAddress` also uses a local database abstraction, `src/apps/hubaddress/database/HaDB.ts`, and domain models for `Division`, `Staff`, `FileData`, and `SearchKeyword`. The architecture suggests a pipeline of uploaded file data being parsed/stored locally, then searched and rendered in the viewer components.

11. The `HubAddress` viewer is split by entity type: one component for divisions and one for staff. That separation is important for the diagram because it means the presentation layer is not generic; it reflects the underlying domain model and likely switches views based on search or selection context.

12. The `AppContainer`/`toybox` area under `src/apps/appcontainer` appears to be a launcher or catalog app for tools, files, and storage-related entries. Its component grouping (`app`, `file`, `storage`, `tool`) and `AppItem` model indicate an index/navigation role rather than a single business workflow.

13. The repo’s architecture is therefore “multi-app, shared component library, local data-first.” There is no visible server-side application layer in this tree; the major boundary is between UI/component logic and browser-side persistence/query layers.

14. For an architecture diagram, the cleanest top-level boxes are: shared UI/utilities, `StepNote`, `HubAddress`, and `AppContainer/Toybox`, with each app pointing to its own database/models and also consuming shared widgets from `src/common`. The build output layer (`dist/`) sits below all of them as the packaged static delivery artifact.

Main entry points: [`src/apps/stepnote/step-note-app.ts`](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/step-note-app.ts) (StepNote app), [`src/apps/hubaddress/hub-address-app.ts`](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/hub-address-app.ts) (HubAddress app), [`build.js`](https://github.com/xmatsuda2053/toybox/blob/main/build.js) (build.js), [`src/library.ts`](https://github.com/xmatsuda2053/toybox/blob/main/src/library.ts) (Library)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shared["Shared"]
  node_src_common_thin_markdown_editor_thin_markdown_editor_ts["Markdown editor<br/>shared editor"]
  node_src_common_help_viewer_help_viewer_ts["Help viewer<br/>shared viewer<br/>[help-viewer.ts]"]
  node_src_common_file_uploader_file_uploader_ts["File uploader<br/>shared input<br/>[file-uploader.ts]"]
  node_src_assets_icons_ts["Icons<br/>asset layer<br/>[icons.ts]"]
  node_src_utils_common_utils_ts["Utils<br/>shared logic<br/>[CommonUtils.ts]"]
  node_src_library_ts["Library<br/>exports<br/>[library.ts]"]
end

subgraph group_stepnote["StepNote"]
  node_src_apps_step_note_ts["StepNote boot<br/>bootstrap<br/>[step-note.ts]"]
  node_src_apps_stepnote_step_note_app_ts["StepNote app<br/>app shell<br/>[step-note-app.ts]"]
  node_src_apps_stepnote_components_menu_sn_menu_ts["Menu<br/>navigation UI<br/>[sn-menu.ts]"]
  node_src_apps_stepnote_components_task_sn_task_summary_ts["Task view<br/>task UI<br/>[sn-task-summary.ts]"]
  node_src_apps_stepnote_components_dashboard_sn_dashboard_container_ts["Dashboard<br/>analytics UI"]
  node_src_apps_stepnote_database_sn_db_ts[("SnDB<br/>local db<br/>[SnDB.ts]")]
  node_src_apps_stepnote_database_services_dashboard_query_service_ts["Dashboard queries<br/>query service"]
  node_src_apps_stepnote_database_repositories_task_repository_ts["Task repo<br/>[TaskRepository.ts]"]
  node_src_apps_stepnote_models_task_ts["Task model<br/>domain model<br/>[Task.ts]"]
end

subgraph group_hubaddress["HubAddress"]
  node_src_apps_hub_address_ts["HubAddress boot<br/>bootstrap<br/>[hub-address.ts]"]
  node_src_apps_hubaddress_hub_address_app_ts["HubAddress app<br/>app shell<br/>[hub-address-app.ts]"]
  node_src_apps_hubaddress_components_uploader_wa_uploader_ts["Uploader<br/>ingest UI<br/>[wa-uploader.ts]"]
  node_src_apps_hubaddress_components_viewer_ha_viewer_div_ts["Div viewer<br/>viewer UI<br/>[ha-viewer-div.ts]"]
  node_src_apps_hubaddress_components_viewer_ha_viewer_staff_ts["Staff viewer<br/>viewer UI<br/>[ha-viewer-staff.ts]"]
  node_src_apps_hubaddress_database_ha_db_ts[("HaDB<br/>local db<br/>[HaDB.ts]")]
end

subgraph group_toybox["Toybox"]
  node_src_apps_appcontainer_components_app_ap_selector_ts["App selector<br/>launcher UI<br/>[ap-selector.ts]"]
  node_src_apps_appcontainer_models_app_item_ts["AppItem<br/>catalog model<br/>[AppItem.ts]"]
end

subgraph group_build["Build"]
  node_dist_stepnote_html["stepnote.html<br/>static entry<br/>[stepnote.html]"]
  node_dist_hubaddress_html["hubaddress.html<br/>static entry<br/>[hubaddress.html]"]
  node_dist_toybox_html["toybox.html<br/>static entry<br/>[toybox.html]"]
  node_vite_config_ts["Vite config<br/>build config<br/>[vite.config.ts]"]
  node_build_js["build.js<br/>build script<br/>[build.js]"]
end

node_vite_config_ts -->|"configures"| node_build_js
node_build_js -->|"emits"| node_dist_stepnote_html
node_build_js -->|"emits"| node_dist_hubaddress_html
node_build_js -->|"emits"| node_dist_toybox_html
node_src_apps_step_note_ts -->|"boots"| node_src_apps_stepnote_step_note_app_ts
node_src_apps_stepnote_step_note_app_ts -->|"uses"| node_src_apps_stepnote_components_menu_sn_menu_ts
node_src_apps_stepnote_step_note_app_ts -->|"uses"| node_src_apps_stepnote_components_task_sn_task_summary_ts
node_src_apps_stepnote_step_note_app_ts -->|"uses"| node_src_apps_stepnote_components_dashboard_sn_dashboard_container_ts
node_src_apps_stepnote_step_note_app_ts -->|"reads/writes"| node_src_apps_stepnote_database_sn_db_ts
node_src_apps_stepnote_components_task_sn_task_summary_ts -->|"updates"| node_src_apps_stepnote_database_repositories_task_repository_ts
node_src_apps_stepnote_database_repositories_task_repository_ts -->|"persists"| node_src_apps_stepnote_database_sn_db_ts
node_src_apps_stepnote_database_services_dashboard_query_service_ts -->|"queries"| node_src_apps_stepnote_database_sn_db_ts
node_src_apps_stepnote_components_dashboard_sn_dashboard_container_ts -->|"renders"| node_src_apps_stepnote_database_services_dashboard_query_service_ts
node_src_apps_stepnote_components_menu_sn_menu_ts -->|"renders"| node_src_common_help_viewer_help_viewer_ts
node_src_apps_stepnote_components_task_sn_task_summary_ts -->|"uses"| node_src_common_thin_markdown_editor_thin_markdown_editor_ts
node_src_apps_stepnote_step_note_app_ts -->|"uses"| node_src_common_file_uploader_file_uploader_ts
node_src_apps_stepnote_step_note_app_ts -->|"uses"| node_src_assets_icons_ts
node_src_apps_stepnote_step_note_app_ts -->|"uses"| node_src_utils_common_utils_ts
node_src_apps_hub_address_ts -->|"boots"| node_src_apps_hubaddress_hub_address_app_ts
node_src_apps_hubaddress_hub_address_app_ts -->|"uses"| node_src_apps_hubaddress_components_uploader_wa_uploader_ts
node_src_apps_hubaddress_hub_address_app_ts -->|"uses"| node_src_apps_hubaddress_components_viewer_ha_viewer_div_ts
node_src_apps_hubaddress_hub_address_app_ts -->|"uses"| node_src_apps_hubaddress_components_viewer_ha_viewer_staff_ts
node_src_apps_hubaddress_hub_address_app_ts -->|"reads/writes"| node_src_apps_hubaddress_database_ha_db_ts
node_src_apps_hubaddress_components_uploader_wa_uploader_ts -->|"uses"| node_src_common_file_uploader_file_uploader_ts
node_src_apps_hubaddress_components_viewer_ha_viewer_div_ts -->|"queries"| node_src_apps_hubaddress_database_ha_db_ts
node_src_apps_hubaddress_components_viewer_ha_viewer_staff_ts -->|"queries"| node_src_apps_hubaddress_database_ha_db_ts
node_src_apps_hubaddress_hub_address_app_ts -->|"uses"| node_src_common_help_viewer_help_viewer_ts
node_src_apps_appcontainer_components_app_ap_selector_ts -->|"lists"| node_src_apps_appcontainer_models_app_item_ts
node_src_apps_appcontainer_components_app_ap_selector_ts -->|"uses"| node_src_library_ts
node_src_library_ts -->|"exports"| node_src_assets_icons_ts
node_src_library_ts -->|"exports"| node_src_utils_common_utils_ts

click node_dist_stepnote_html "https://github.com/xmatsuda2053/toybox/blob/main/dist/stepnote.html"
click node_dist_hubaddress_html "https://github.com/xmatsuda2053/toybox/blob/main/dist/hubaddress.html"
click node_dist_toybox_html "https://github.com/xmatsuda2053/toybox/blob/main/dist/toybox.html"
click node_src_apps_step_note_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/step-note.ts"
click node_src_apps_stepnote_step_note_app_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/step-note-app.ts"
click node_src_apps_stepnote_components_menu_sn_menu_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/components/menu/sn-menu.ts"
click node_src_apps_stepnote_components_task_sn_task_summary_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/components/task/sn-task-summary.ts"
click node_src_apps_stepnote_components_dashboard_sn_dashboard_container_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/components/dashboard/sn-dashboard-container.ts"
click node_src_apps_stepnote_database_sn_db_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/database/SnDB.ts"
click node_src_apps_stepnote_database_services_dashboard_query_service_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/database/services/DashboardQueryService.ts"
click node_src_apps_stepnote_database_repositories_task_repository_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/database/repositories/TaskRepository.ts"
click node_src_apps_stepnote_models_task_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/models/Task.ts"
click node_src_apps_hub_address_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hub-address.ts"
click node_src_apps_hubaddress_hub_address_app_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/hub-address-app.ts"
click node_src_apps_hubaddress_components_uploader_wa_uploader_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/components/uploader/wa-uploader.ts"
click node_src_apps_hubaddress_components_viewer_ha_viewer_div_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/components/viewer/ha-viewer-div.ts"
click node_src_apps_hubaddress_components_viewer_ha_viewer_staff_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/components/viewer/ha-viewer-staff.ts"
click node_src_apps_hubaddress_database_ha_db_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/database/HaDB.ts"
click node_src_apps_appcontainer_components_app_ap_selector_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/appcontainer/components/app/ap-selector.ts"
click node_src_apps_appcontainer_models_app_item_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/apps/appcontainer/models/AppItem.ts"
click node_src_common_thin_markdown_editor_thin_markdown_editor_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/common/thin-markdown-editor/thin-markdown-editor.ts"
click node_src_common_help_viewer_help_viewer_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/common/help-viewer/help-viewer.ts"
click node_src_common_file_uploader_file_uploader_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/common/file-uploader/file-uploader.ts"
click node_src_assets_icons_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/assets/icons.ts"
click node_src_utils_common_utils_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/utils/CommonUtils.ts"
click node_src_library_ts "https://github.com/xmatsuda2053/toybox/blob/main/src/library.ts"
click node_vite_config_ts "https://github.com/xmatsuda2053/toybox/blob/main/vite.config.ts"
click node_build_js "https://github.com/xmatsuda2053/toybox/blob/main/build.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_src_common_thin_markdown_editor_thin_markdown_editor_ts,node_src_common_help_viewer_help_viewer_ts,node_src_common_file_uploader_file_uploader_ts,node_src_assets_icons_ts,node_src_utils_common_utils_ts,node_src_library_ts toneBlue
class node_src_apps_step_note_ts,node_src_apps_stepnote_step_note_app_ts,node_src_apps_stepnote_components_menu_sn_menu_ts,node_src_apps_stepnote_components_task_sn_task_summary_ts,node_src_apps_stepnote_components_dashboard_sn_dashboard_container_ts,node_src_apps_stepnote_database_sn_db_ts,node_src_apps_stepnote_database_services_dashboard_query_service_ts,node_src_apps_stepnote_database_repositories_task_repository_ts,node_src_apps_stepnote_models_task_ts toneAmber
class node_src_apps_hub_address_ts,node_src_apps_hubaddress_hub_address_app_ts,node_src_apps_hubaddress_components_uploader_wa_uploader_ts,node_src_apps_hubaddress_components_viewer_ha_viewer_div_ts,node_src_apps_hubaddress_components_viewer_ha_viewer_staff_ts,node_src_apps_hubaddress_database_ha_db_ts toneMint
class node_src_apps_appcontainer_components_app_ap_selector_ts,node_src_apps_appcontainer_models_app_item_ts toneRose
class node_dist_stepnote_html,node_dist_hubaddress_html,node_dist_toybox_html,node_vite_config_ts,node_build_js toneIndigo
```

## Components

### Shared

Cross-app UI primitives, assets, and utilities

- [Markdown editor](https://github.com/xmatsuda2053/toybox/blob/main/src/common/thin-markdown-editor/thin-markdown-editor.ts): shared editor · Reusable markdown editing component · `src/common/thin-markdown-editor/thin-markdown-editor.ts`
- [Help viewer](https://github.com/xmatsuda2053/toybox/blob/main/src/common/help-viewer/help-viewer.ts): shared viewer · Reusable help/content rendering component · `src/common/help-viewer/help-viewer.ts`
- [File uploader](https://github.com/xmatsuda2053/toybox/blob/main/src/common/file-uploader/file-uploader.ts): shared input · Reusable file upload component · `src/common/file-uploader/file-uploader.ts`
- [Icons](https://github.com/xmatsuda2053/toybox/blob/main/src/assets/icons.ts): asset layer · Shared icon definitions and generation output · `src/assets/icons.ts`
- [Utils](https://github.com/xmatsuda2053/toybox/blob/main/src/utils/CommonUtils.ts): shared logic · Cross-cutting helpers for app code · `src/utils/CommonUtils.ts`
- [Library](https://github.com/xmatsuda2053/toybox/blob/main/src/library.ts): exports · Shared library entry surface · `src/library.ts`

### StepNote

Task, journal, and dashboard application

- [StepNote boot](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/step-note.ts): bootstrap · StepNote application entry module · `src/apps/step-note.ts`
- [StepNote app](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/step-note-app.ts): app shell · Main shell for navigation, task, journal, and dashboard views · `src/apps/stepnote/step-note-app.ts`
- [Menu](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/components/menu/sn-menu.ts): navigation UI · In-app menu and help entry points · `src/apps/stepnote/components/menu/sn-menu.ts`
- [Task view](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/components/task/sn-task-summary.ts): task UI · Task-focused presentation and actions · `src/apps/stepnote/components/task/sn-task-summary.ts`
- [Dashboard](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/components/dashboard/sn-dashboard-container.ts): analytics UI · Dashboard container and KPI/chart views · `src/apps/stepnote/components/dashboard/sn-dashboard-container.ts`
- [SnDB](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/database/SnDB.ts): local db · StepNote browser-side database boundary · `src/apps/stepnote/database/SnDB.ts`
- [Dashboard queries](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/database/services/DashboardQueryService.ts): query service · Derived dashboard data and summaries · `src/apps/stepnote/database/services/DashboardQueryService.ts`
- [Task repo](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/database/repositories/TaskRepository.ts): repository · Persistent task access and updates · `src/apps/stepnote/database/repositories/TaskRepository.ts`
- [Task model](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/stepnote/models/Task.ts): domain model · Task and related workflow entities · `src/apps/stepnote/models/Task.ts`

### HubAddress

Upload, store, and browse address data

- [HubAddress boot](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hub-address.ts): bootstrap · HubAddress application entry module · `src/apps/hub-address.ts`
- [HubAddress app](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/hub-address-app.ts): app shell · Main shell for uploader and viewer workflow · `src/apps/hubaddress/hub-address-app.ts`
- [Uploader](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/components/uploader/wa-uploader.ts): ingest UI · File upload and import entry point · `src/apps/hubaddress/components/uploader/wa-uploader.ts`
- [Div viewer](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/components/viewer/ha-viewer-div.ts): viewer UI · Division-oriented address browser · `src/apps/hubaddress/components/viewer/ha-viewer-div.ts`
- [Staff viewer](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/components/viewer/ha-viewer-staff.ts): viewer UI · Staff-oriented address browser · `src/apps/hubaddress/components/viewer/ha-viewer-staff.ts`
- [HaDB](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/hubaddress/database/HaDB.ts): local db · HubAddress browser-side database boundary · `src/apps/hubaddress/database/HaDB.ts`

### Toybox

App container and launcher area

- [App selector](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/appcontainer/components/app/ap-selector.ts): launcher UI · App catalog and selection component · `src/apps/appcontainer/components/app/ap-selector.ts`
- [AppItem](https://github.com/xmatsuda2053/toybox/blob/main/src/apps/appcontainer/models/AppItem.ts): catalog model · Launcher item metadata for tools and files · `src/apps/appcontainer/models/AppItem.ts`

### Build

Static entry points and packaging pipeline

- [stepnote.html](https://github.com/xmatsuda2053/toybox/blob/main/dist/stepnote.html): static entry · Packaged browser entry for StepNote · `dist/stepnote.html`
- [hubaddress.html](https://github.com/xmatsuda2053/toybox/blob/main/dist/hubaddress.html): static entry · Packaged browser entry for HubAddress · `dist/hubaddress.html`
- [toybox.html](https://github.com/xmatsuda2053/toybox/blob/main/dist/toybox.html): static entry · Packaged browser entry for Toybox · `dist/toybox.html`
- [Vite config](https://github.com/xmatsuda2053/toybox/blob/main/vite.config.ts): build config · Vite build configuration · `vite.config.ts`
- [build.js](https://github.com/xmatsuda2053/toybox/blob/main/build.js): build script · Build orchestration and packaging script · `build.js`

## Connections

- Vite config → build.js: configures · Build pipeline setup
- build.js → stepnote.html: emits · Produces packaged StepNote artifact
- build.js → hubaddress.html: emits · Produces packaged HubAddress artifact
- build.js → toybox.html: emits · Produces packaged Toybox artifact
- StepNote boot → StepNote app: boots · Initializes the StepNote shell
- StepNote app → Menu: uses · Shell composes the menu
- StepNote app → Task view: uses · Shell composes task workflow UI
- StepNote app → Dashboard: uses · Shell composes dashboard views
- StepNote app → SnDB: reads/writes · Shell coordinates the local database
- Task view → Task repo: updates · Task UI persists via repository boundary
- Task repo → SnDB: persists · Repository uses the local database
- Dashboard queries → SnDB: queries · Dashboard data is derived from local storage
- Dashboard → Dashboard queries: renders · Dashboard consumes derived summaries
- Menu → Help viewer: renders · Help pages use shared viewer tooling
- Task view → Markdown editor: uses · Task workflow includes markdown editing
- StepNote app → File uploader: uses · App shell can ingest files through shared uploader
- StepNote app → Icons: uses · Shared icon vocabulary
- StepNote app → Utils: uses · Shared utility functions
- HubAddress boot → HubAddress app: boots · Initializes the HubAddress shell
- HubAddress app → Uploader: uses · Shell composes uploader workflow
- HubAddress app → Div viewer: uses · Shell composes division viewer
- HubAddress app → Staff viewer: uses · Shell composes staff viewer
- HubAddress app → HaDB: reads/writes · Shell coordinates local storage
- Uploader → File uploader: uses · Upload flow reuses shared file input
- Div viewer → HaDB: queries · Division viewer reads persisted data
- Staff viewer → HaDB: queries · Staff viewer reads persisted data
- HubAddress app → Help viewer: uses · App menu/help references shared viewer tooling
- App selector → AppItem: lists · Launcher UI is driven by catalog items
- App selector → Library: uses · App container builds on the shared library surface
- Library → Icons: exports · Shared package exposes icon resources
- Library → Utils: exports · Shared package exposes utility helpers
