# mouryaprashant/edms architecture

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

- Interactive diagram: https://gitdiagram.com/mouryaprashant/edms
- Repository: https://github.com/mouryaprashant/edms

## Overview

This is a React railway directory for browsing and maintaining a Division → Section → Station hierarchy and its linked documents. Users filter or search the directory, expand station rows to inspect categorized documents and revision history, and open document links. Editors and admins manage directory records; admins also authenticate and manage users. The principal flow is UI actions through App.jsx into data and auth hooks, which use Supabase; station document uploads use a separate Google Drive integration. Some modal and database details are documented but their source was not sampled, so uncertain wiring is omitted.

Main entry points: [`src/App.jsx`](https://github.com/mouryaprashant/edms/blob/main/src/App.jsx) (App orchestration), [`src/supabaseClient.js`](https://github.com/mouryaprashant/edms/blob/main/src/supabaseClient.js) (Supabase platform), [`src/components/modals/StationModal.jsx`](https://github.com/mouryaprashant/edms/blob/main/src/components/modals/StationModal.jsx) (Station editor), [`src/hooks/useRailwayData.js`](https://github.com/mouryaprashant/edms/blob/main/src/hooks/useRailwayData.js) (Directory operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_directory["Directory experience"]
  node_app["App orchestration<br/>[App.jsx]"]
  node_topnav["Search and account<br/>[TopNav.jsx]"]
  node_toolbar["Directory controls<br/>[Toolbar.jsx]"]
  node_sidebar["Division navigation<br/>[Sidebar.jsx]"]
  node_sectioncard["Section display<br/>[SectionCard.jsx]"]
  node_stationrow["Station documents<br/>[StationRow.jsx]"]
  node_docbadge["Document actions<br/>[DocBadge.jsx]"]
  node_stationmodal["Station editor<br/>[StationModal.jsx]"]
  node_sectionmodal["Section editor<br/>[SectionModal.jsx]"]
  node_historymodal["Version history"]
end

subgraph group_records["Directory data"]
  node_datahook["Directory operations<br/>[useRailwayData.js]"]
  node_normalize["Document normalization<br/>[normalize.js]"]
end

subgraph group_identity["Identity and access"]
  node_adminhook["Authentication and roles<br/>[useAdmin.js]"]
  node_adminmodal["Admin sign-in<br/>[AdminAuthModal.jsx]"]
  node_usermodal["User management"]
  node_userfunction["User admin function<br/>[index.ts]"]
end

subgraph group_integrations["External services"]
  node_supabase[("Supabase platform<br/>[supabaseClient.js]")]
  node_driveupload["Drive upload<br/>[googleDrive.js]"]
end

node_visitor(("Directory user"))
node_drive[("Google Drive")]

node_visitor -->|"uses"| node_app
node_app -->|"renders"| node_topnav
node_app -->|"renders"| node_toolbar
node_app -->|"renders"| node_sidebar
node_app -->|"renders"| node_sectioncard
node_sectioncard -->|"renders"| node_stationrow
node_stationrow -->|"renders"| node_docbadge
node_app -->|"renders"| node_stationmodal
node_app -->|"renders"| node_sectionmodal
node_app -->|"renders"| node_historymodal
node_app -->|"renders"| node_adminmodal
node_app -->|"renders"| node_usermodal
node_topnav -->|"dispatches actions"| node_app
node_toolbar -->|"dispatches actions"| node_app
node_sidebar -->|"dispatches filters"| node_app
node_stationmodal -->|"submits edits"| node_app
node_sectionmodal -->|"submits edits"| node_app
node_app -->|"calls operations"| node_datahook
node_datahook -->|"reads and writes"| node_supabase
node_datahook -->|"normalizes documents"| node_normalize
node_app -->|"calls auth actions"| node_adminhook
node_adminmodal -->|"submits credentials"| node_app
node_adminhook -->|"authenticates and reads roles"| node_supabase
node_usermodal -.->|"admin requests"| node_userfunction
node_userfunction -->|"manages users and roles"| node_supabase
node_stationmodal -->|"uploads files"| node_driveupload
node_driveupload -->|"authorizes and uploads"| node_drive
node_supabase -->|"stores directory and roles"| node_supabase

click node_app "https://github.com/mouryaprashant/edms/blob/main/src/App.jsx"
click node_topnav "https://github.com/mouryaprashant/edms/blob/main/src/components/TopNav.jsx"
click node_toolbar "https://github.com/mouryaprashant/edms/blob/main/src/components/Toolbar.jsx"
click node_sidebar "https://github.com/mouryaprashant/edms/blob/main/src/components/Sidebar.jsx"
click node_sectioncard "https://github.com/mouryaprashant/edms/blob/main/src/components/SectionCard.jsx"
click node_stationrow "https://github.com/mouryaprashant/edms/blob/main/src/components/StationRow.jsx"
click node_docbadge "https://github.com/mouryaprashant/edms/blob/main/src/components/DocBadge.jsx"
click node_stationmodal "https://github.com/mouryaprashant/edms/blob/main/src/components/modals/StationModal.jsx"
click node_sectionmodal "https://github.com/mouryaprashant/edms/blob/main/src/components/modals/SectionModal.jsx"
click node_historymodal "https://github.com/mouryaprashant/edms/blob/main/src/components/modals/VersionHistoryModal.jsx"
click node_datahook "https://github.com/mouryaprashant/edms/blob/main/src/hooks/useRailwayData.js"
click node_normalize "https://github.com/mouryaprashant/edms/blob/main/src/utils/normalize.js"
click node_adminhook "https://github.com/mouryaprashant/edms/blob/main/src/hooks/useAdmin.js"
click node_adminmodal "https://github.com/mouryaprashant/edms/blob/main/src/components/modals/AdminAuthModal.jsx"
click node_usermodal "https://github.com/mouryaprashant/edms/blob/main/src/components/modals/UserManagementModal.jsx"
click node_userfunction "https://github.com/mouryaprashant/edms/blob/main/supabase/functions/user-management/index.ts"
click node_supabase "https://github.com/mouryaprashant/edms/blob/main/src/supabaseClient.js"
click node_driveupload "https://github.com/mouryaprashant/edms/blob/main/src/utils/googleDrive.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_app,node_topnav,node_toolbar,node_sidebar,node_sectioncard,node_stationrow,node_docbadge,node_stationmodal,node_sectionmodal,node_historymodal,node_visitor toneBlue
class node_datahook,node_normalize,node_drive toneAmber
class node_adminhook,node_adminmodal,node_usermodal,node_userfunction toneMint
class node_supabase,node_driveupload toneRose
```

## Components

### Directory experience

- [App orchestration](https://github.com/mouryaprashant/edms/blob/main/src/App.jsx): `src/App.jsx`
- [Search and account](https://github.com/mouryaprashant/edms/blob/main/src/components/TopNav.jsx): `src/components/TopNav.jsx`
- [Directory controls](https://github.com/mouryaprashant/edms/blob/main/src/components/Toolbar.jsx): `src/components/Toolbar.jsx`
- [Division navigation](https://github.com/mouryaprashant/edms/blob/main/src/components/Sidebar.jsx): `src/components/Sidebar.jsx`
- [Section display](https://github.com/mouryaprashant/edms/blob/main/src/components/SectionCard.jsx): `src/components/SectionCard.jsx`
- [Station documents](https://github.com/mouryaprashant/edms/blob/main/src/components/StationRow.jsx): `src/components/StationRow.jsx`
- [Document actions](https://github.com/mouryaprashant/edms/blob/main/src/components/DocBadge.jsx): `src/components/DocBadge.jsx`
- [Station editor](https://github.com/mouryaprashant/edms/blob/main/src/components/modals/StationModal.jsx): `src/components/modals/StationModal.jsx`
- [Section editor](https://github.com/mouryaprashant/edms/blob/main/src/components/modals/SectionModal.jsx): `src/components/modals/SectionModal.jsx`
- [Version history](https://github.com/mouryaprashant/edms/blob/main/src/components/modals/VersionHistoryModal.jsx): `src/components/modals/VersionHistoryModal.jsx`

### Directory data

- [Directory operations](https://github.com/mouryaprashant/edms/blob/main/src/hooks/useRailwayData.js): `src/hooks/useRailwayData.js`
- [Document normalization](https://github.com/mouryaprashant/edms/blob/main/src/utils/normalize.js): `src/utils/normalize.js`

### Identity and access

- [Authentication and roles](https://github.com/mouryaprashant/edms/blob/main/src/hooks/useAdmin.js): `src/hooks/useAdmin.js`
- [Admin sign-in](https://github.com/mouryaprashant/edms/blob/main/src/components/modals/AdminAuthModal.jsx): `src/components/modals/AdminAuthModal.jsx`
- [User management](https://github.com/mouryaprashant/edms/blob/main/src/components/modals/UserManagementModal.jsx): `src/components/modals/UserManagementModal.jsx`
- [User admin function](https://github.com/mouryaprashant/edms/blob/main/supabase/functions/user-management/index.ts): `supabase/functions/user-management/index.ts`

### External services

- [Supabase platform](https://github.com/mouryaprashant/edms/blob/main/src/supabaseClient.js): `src/supabaseClient.js`
- [Drive upload](https://github.com/mouryaprashant/edms/blob/main/src/utils/googleDrive.js): `src/utils/googleDrive.js`

### Other components

- **Directory user**
- **Google Drive**

## Connections

- Directory user → App orchestration: uses
- App orchestration → Search and account: renders
- App orchestration → Directory controls: renders
- App orchestration → Division navigation: renders
- App orchestration → Section display: renders
- Section display → Station documents: renders
- Station documents → Document actions: renders
- App orchestration → Station editor: renders
- App orchestration → Section editor: renders
- App orchestration → Version history: renders
- App orchestration → Admin sign-in: renders
- App orchestration → User management: renders
- Search and account → App orchestration: dispatches actions
- Directory controls → App orchestration: dispatches actions
- Division navigation → App orchestration: dispatches filters
- Station editor → App orchestration: submits edits
- Section editor → App orchestration: submits edits
- App orchestration → Directory operations: calls operations
- Directory operations → Supabase platform: reads and writes
- Directory operations → Document normalization: normalizes documents
- App orchestration → Authentication and roles: calls auth actions
- Admin sign-in → App orchestration: submits credentials
- Authentication and roles → Supabase platform: authenticates and reads roles
- User management → User admin function: admin requests
- User admin function → Supabase platform: manages users and roles
- Station editor → Drive upload: uploads files
- Drive upload → Google Drive: authorizes and uploads
- Supabase platform → Supabase platform: stores directory and roles
