# eyramana/hospital-navigation architecture

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

- Interactive diagram: https://gitdiagram.com/eyramana/hospital-navigation
- Repository: https://github.com/eyramana/hospital-navigation

## Overview

HavNav is an indoor hospital navigation, directory, and operations application. Its central workflow is helping a visitor find a hospital destination and calculate a route that accounts for active corridor or lift closures. The tree also shows directory, voice/AI, QR, floor-map, emergency, and administrative capabilities. The sampled services establish navigation, directory, and maintenance dependencies; frontend wiring and several listed capabilities were not sampled, so uncertain connections are omitted.

Main entry points: [`shared/services/navigationService.ts`](https://github.com/eyramana/hospital-navigation/blob/main/shared/services/navigationService.ts) (Route service), [`shared/services/directoryService.ts`](https://github.com/eyramana/hospital-navigation/blob/main/shared/services/directoryService.ts) (Directory service), [`database/data/repositories/IRouteClosureRepository.ts`](https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IRouteClosureRepository.ts) (Closure repository), [`database/data/repositories/IRoomRepository.ts`](https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IRoomRepository.ts) (Room repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Visitor app"]
  node_routes["App routes<br/>[index.tsx]"]
  node_shell["Hospital interface<br/>[AppShell.tsx]"]
  node_map["Floor maps<br/>[FloorMap.tsx]"]
  node_navpanel["Route controls"]
  node_assistant["Assistant page<br/>[assistant.tsx]"]
  node_scan["QR scanning<br/>[QrScannerModal.tsx]"]
  node_admin["Admin tools<br/>[admin.tsx]"]
end

subgraph group_navigation["Navigation"]
  node_navservice["Route service"]
  node_navgraph["Navigation graph<br/>[graph.ts]"]
  node_astar["A* routing<br/>[astar.ts]"]
  node_constraints["Route constraints"]
  node_voice["Voice service<br/>[voiceService.ts]"]
  node_intent["Intent parser<br/>[intentParser.ts]"]
end

subgraph group_directory["Directory and operations"]
  node_directoryservice["Directory service"]
  node_maintenance["Maintenance service"]
  node_qrresolver["QR resolver<br/>[qrCodeResolver.ts]"]
end

subgraph group_data["Data boundary"]
  node_repos["Repository contracts<br/>[IMapRepository.ts]"]
  node_closure["Closure repository"]
  node_doctorrepo["Doctor repository"]
  node_roomrepo["Room repository<br/>[IRoomRepository.ts]"]
  node_hospitalrepo["Hospital repository"]
  node_mockdata["Mock data<br/>[mockGraph.ts]"]
end

subgraph group_server["Server runtime"]
  node_server["SSR server<br/>[server.ts]"]
  node_ssrentry["TanStack SSR entry"]
end

node_visitor(("Visitor"))

node_visitor -->|"opens"| node_routes
node_server -->|"dispatches"| node_ssrentry
node_navservice -->|"loads graph"| node_repos
node_navservice -->|"reads closures"| node_closure
node_navservice -->|"builds graph"| node_navgraph
node_navservice -->|"calculates route"| node_astar
node_directoryservice -->|"searches doctors"| node_doctorrepo
node_directoryservice -->|"searches rooms"| node_roomrepo
node_directoryservice -->|"reads departments"| node_hospitalrepo
node_directoryservice -->|"looks up room"| node_roomrepo
node_maintenance -->|"reads and changes"| node_closure

click node_routes "https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/routes/index.tsx"
click node_shell "https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/components/hospinav/AppShell.tsx"
click node_map "https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/components/hospinav/FloorMap.tsx"
click node_navpanel "https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/components/hospinav/NavigationPanel.tsx"
click node_assistant "https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/routes/assistant.tsx"
click node_scan "https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/components/hospinav/QrScannerModal.tsx"
click node_admin "https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/routes/admin.tsx"
click node_navservice "https://github.com/eyramana/hospital-navigation/blob/main/shared/services/navigationService.ts"
click node_navgraph "https://github.com/eyramana/hospital-navigation/blob/main/shared/navigation/graph.ts"
click node_astar "https://github.com/eyramana/hospital-navigation/blob/main/shared/navigation/astar.ts"
click node_constraints "https://github.com/eyramana/hospital-navigation/blob/main/shared/navigation/routeConstraints.ts"
click node_voice "https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/lib/hospital/voiceService.ts"
click node_intent "https://github.com/eyramana/hospital-navigation/blob/main/shared/ai/intentParser.ts"
click node_directoryservice "https://github.com/eyramana/hospital-navigation/blob/main/shared/services/directoryService.ts"
click node_maintenance "https://github.com/eyramana/hospital-navigation/blob/main/shared/services/maintenanceService.ts"
click node_qrresolver "https://github.com/eyramana/hospital-navigation/blob/main/shared/qr/qrCodeResolver.ts"
click node_repos "https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IMapRepository.ts"
click node_closure "https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IRouteClosureRepository.ts"
click node_doctorrepo "https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IDoctorRepository.ts"
click node_roomrepo "https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IRoomRepository.ts"
click node_hospitalrepo "https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IHospitalRepository.ts"
click node_mockdata "https://github.com/eyramana/hospital-navigation/blob/main/database/data/mock/mockGraph.ts"
click node_server "https://github.com/eyramana/hospital-navigation/blob/main/backend/server.ts"

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_routes,node_shell,node_map,node_navpanel,node_assistant,node_scan,node_admin toneBlue
class node_navservice,node_navgraph,node_astar,node_constraints,node_voice,node_intent toneAmber
class node_directoryservice,node_maintenance,node_qrresolver toneMint
class node_repos,node_closure,node_doctorrepo,node_roomrepo,node_hospitalrepo,node_mockdata toneRose
class node_server,node_ssrentry,node_visitor toneIndigo
```

## Components

### Visitor app

- [App routes](https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/routes/index.tsx): `frontend/src/routes/index.tsx`
- [Hospital interface](https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/components/hospinav/AppShell.tsx): `frontend/src/components/hospinav/AppShell.tsx`
- [Floor maps](https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/components/hospinav/FloorMap.tsx): `frontend/src/components/hospinav/FloorMap.tsx`
- [Route controls](https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/components/hospinav/NavigationPanel.tsx): `frontend/src/components/hospinav/NavigationPanel.tsx`
- [Assistant page](https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/routes/assistant.tsx): `frontend/src/routes/assistant.tsx`
- [QR scanning](https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/components/hospinav/QrScannerModal.tsx): `frontend/src/components/hospinav/QrScannerModal.tsx`
- [Admin tools](https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/routes/admin.tsx): `frontend/src/routes/admin.tsx`

### Navigation

- [Route service](https://github.com/eyramana/hospital-navigation/blob/main/shared/services/navigationService.ts): `shared/services/navigationService.ts`
- [Navigation graph](https://github.com/eyramana/hospital-navigation/blob/main/shared/navigation/graph.ts): `shared/navigation/graph.ts`
- [A* routing](https://github.com/eyramana/hospital-navigation/blob/main/shared/navigation/astar.ts): `shared/navigation/astar.ts`
- [Route constraints](https://github.com/eyramana/hospital-navigation/blob/main/shared/navigation/routeConstraints.ts): `shared/navigation/routeConstraints.ts`
- [Voice service](https://github.com/eyramana/hospital-navigation/blob/main/frontend/src/lib/hospital/voiceService.ts): `frontend/src/lib/hospital/voiceService.ts`
- [Intent parser](https://github.com/eyramana/hospital-navigation/blob/main/shared/ai/intentParser.ts): `shared/ai/intentParser.ts`

### Directory and operations

- [Directory service](https://github.com/eyramana/hospital-navigation/blob/main/shared/services/directoryService.ts): `shared/services/directoryService.ts`
- [Maintenance service](https://github.com/eyramana/hospital-navigation/blob/main/shared/services/maintenanceService.ts): `shared/services/maintenanceService.ts`
- [QR resolver](https://github.com/eyramana/hospital-navigation/blob/main/shared/qr/qrCodeResolver.ts): `shared/qr/qrCodeResolver.ts`

### Data boundary

- [Repository contracts](https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IMapRepository.ts): `database/data/repositories/IMapRepository.ts`
- [Closure repository](https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IRouteClosureRepository.ts): `database/data/repositories/IRouteClosureRepository.ts`
- [Doctor repository](https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IDoctorRepository.ts): `database/data/repositories/IDoctorRepository.ts`
- [Room repository](https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IRoomRepository.ts): `database/data/repositories/IRoomRepository.ts`
- [Hospital repository](https://github.com/eyramana/hospital-navigation/blob/main/database/data/repositories/IHospitalRepository.ts): `database/data/repositories/IHospitalRepository.ts`
- [Mock data](https://github.com/eyramana/hospital-navigation/blob/main/database/data/mock/mockGraph.ts): `database/data/mock/mockGraph.ts`

### Server runtime

- [SSR server](https://github.com/eyramana/hospital-navigation/blob/main/backend/server.ts): `backend/server.ts`
- **TanStack SSR entry**

### Other components

- **Visitor**

## Connections

- Visitor → App routes: opens
- SSR server → TanStack SSR entry: dispatches
- Route service → Repository contracts: loads graph
- Route service → Closure repository: reads closures
- Route service → Navigation graph: builds graph
- Route service → A* routing: calculates route
- Directory service → Doctor repository: searches doctors
- Directory service → Room repository: searches rooms
- Directory service → Hospital repository: reads departments
- Directory service → Room repository: looks up room
- Maintenance service → Closure repository: reads and changes
