# matthewhtang/campus-nav-analytics architecture

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

- Interactive diagram: https://gitdiagram.com/matthewhtang/campus-nav-analytics
- Repository: https://github.com/matthewhtang/campus-nav-analytics

## Overview

This is a menu-driven C++ campus information application. Users select facility browsing/search, building graph and BFS, or department-tree operations; startup loads the corresponding records before the menu runs. The graph separates those domain areas and includes the shared input/record utilities and facility hash index. Some capabilities documented for later milestones are represented, but their runtime wiring is not assumed where it was not shown.

Main entry points: [`src/main.cpp`](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/main.cpp) (Menu and startup), [`src/FacilityDatabase.cpp`](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/FacilityDatabase.cpp) (Facility database), [`src/CampusGraph.cpp`](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/CampusGraph.cpp) (Building graph), [`data`](https://github.com/matthewhtang/campus-nav-analytics/tree/main/data) (Campus input files)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_menu["Menu and startup<br/>[main.cpp]"]
  node_data["Campus input files"]
  node_utils["Input utilities<br/>[Utils.cpp]"]
end

subgraph group_facilities["Facilities"]
  node_facility_data["Facility database"]
  node_facility["Facility records<br/>[Facility.cpp]"]
  node_hash["Facility ID index<br/>[HashTable.cpp]"]
end

subgraph group_campus["Campus Graph"]
  node_graph["Building graph<br/>[CampusGraph.cpp]"]
  node_bfs["BFS reachability<br/>[CampusGraph.cpp]"]
  node_pathfinding["Shortest path<br/>[CampusGraph.cpp]"]
end

subgraph group_departments["Departments"]
  node_department_tree["Department tree<br/>[DepartmentTree.cpp]"]
  node_department_node["Department nodes<br/>[DepartmentNode.h]"]
end

node_user(("Campus user"))

node_user -->|"chooses operations"| node_menu
node_menu -->|"loads and dispatches"| node_graph
node_menu -->|"loads and dispatches"| node_facility_data
node_menu -->|"loads and dispatches"| node_department_tree
node_data -->|"supplies buildings"| node_graph
node_data -->|"supplies connections"| node_graph
node_data -->|"supplies facilities"| node_facility_data
node_data -->|"supplies departments"| node_department_tree
node_facility_data -->|"validates buildings"| node_graph
node_facility_data -->|"indexes and searches IDs"| node_hash
node_facility_data -->|"creates records"| node_facility
node_graph -->|"uses record helpers"| node_utils
node_facility_data -->|"reads and validates records"| node_utils
node_hash -->|"normalizes IDs"| node_utils
node_department_tree -->|"reads and validates records"| node_utils
node_department_tree -->|"creates and links"| node_department_node
node_menu -->|"requests reachability"| node_bfs
node_menu -.->|"offers shortest path"| node_pathfinding

click node_menu "https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/main.cpp"
click node_data "https://github.com/matthewhtang/campus-nav-analytics/tree/main/data"
click node_utils "https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/Utils.cpp"
click node_facility_data "https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/FacilityDatabase.cpp"
click node_facility "https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/Facility.cpp"
click node_hash "https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/HashTable.cpp"
click node_graph "https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/CampusGraph.cpp"
click node_bfs "https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/CampusGraph.cpp"
click node_pathfinding "https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/CampusGraph.cpp"
click node_department_tree "https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/DepartmentTree.cpp"
click node_department_node "https://github.com/matthewhtang/campus-nav-analytics/blob/main/include/DepartmentNode.h"

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_menu,node_data,node_utils,node_user toneBlue
class node_facility_data,node_facility,node_hash toneAmber
class node_graph,node_bfs,node_pathfinding toneMint
class node_department_tree,node_department_node toneRose
```

## Components

### Application

- [Menu and startup](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/main.cpp): `src/main.cpp`
- [Campus input files](https://github.com/matthewhtang/campus-nav-analytics/tree/main/data): `data`
- [Input utilities](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/Utils.cpp): `src/Utils.cpp`

### Facilities

- [Facility database](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/FacilityDatabase.cpp): `src/FacilityDatabase.cpp`
- [Facility records](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/Facility.cpp): `src/Facility.cpp`
- [Facility ID index](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/HashTable.cpp): `src/HashTable.cpp`

### Campus Graph

- [Building graph](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/CampusGraph.cpp): `src/CampusGraph.cpp`
- [BFS reachability](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/CampusGraph.cpp): `src/CampusGraph.cpp`
- [Shortest path](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/CampusGraph.cpp): `src/CampusGraph.cpp`

### Departments

- [Department tree](https://github.com/matthewhtang/campus-nav-analytics/blob/main/src/DepartmentTree.cpp): `src/DepartmentTree.cpp`
- [Department nodes](https://github.com/matthewhtang/campus-nav-analytics/blob/main/include/DepartmentNode.h): `include/DepartmentNode.h`

### Other components

- **Campus user**

## Connections

- Campus user → Menu and startup: chooses operations (evidence: `src/main.cpp`)
- Menu and startup → Building graph: loads and dispatches (evidence: `src/main.cpp`)
- Menu and startup → Facility database: loads and dispatches (evidence: `src/main.cpp`)
- Menu and startup → Department tree: loads and dispatches (evidence: `src/main.cpp`)
- Campus input files → Building graph: supplies buildings (evidence: `README.md`)
- Campus input files → Building graph: supplies connections (evidence: `README.md`)
- Campus input files → Facility database: supplies facilities (evidence: `README.md`)
- Campus input files → Department tree: supplies departments (evidence: `README.md`)
- Facility database → Building graph: validates buildings (evidence: `src/FacilityDatabase.cpp`)
- Facility database → Facility ID index: indexes and searches IDs (evidence: `src/FacilityDatabase.cpp`)
- Facility database → Facility records: creates records (evidence: `src/FacilityDatabase.cpp`)
- Building graph → Input utilities: uses record helpers (evidence: `src/CampusGraph.cpp`)
- Facility database → Input utilities: reads and validates records (evidence: `src/FacilityDatabase.cpp`)
- Facility ID index → Input utilities: normalizes IDs (evidence: `src/HashTable.cpp`)
- Department tree → Input utilities: reads and validates records (evidence: `src/DepartmentTree.cpp`)
- Department tree → Department nodes: creates and links (evidence: `src/DepartmentTree.cpp`)
- Menu and startup → BFS reachability: requests reachability (evidence: `src/main.cpp`)
- Menu and startup → Shortest path: offers shortest path
