# ephraimraxy/css-rms architecture

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

- Interactive diagram: https://gitdiagram.com/ephraimraxy/css-rms
- Repository: https://github.com/ephraimraxy/css-rms

## Overview

CSS RMS is an internal operations portal centered on submitting cash/material requisitions and routing them through department approval and vetting. Users enter through the React app, authenticate, and work in domain modules; the frontend API client communicates with the Express backend, which the README describes as owning all API routes. The README also documents memos, Document Studio, HR, and multi-department workflows. A separate desktop service receives ZKTeco attendance punches and stores them locally, with cloud sync capability. Unsampled backend routes and integrations are shown only where documentation supports them.

Main entry points: [`rms_frontend/src/App.jsx`](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/App.jsx) (Portal app), [`rms_frontend/src/lib/api.js`](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/lib/api.js) (API client), [`desktop/server.py`](https://github.com/ephraimraxy/css-rms/blob/main/desktop/server.py) (Local ADMS server), [`rms_frontend/src/context/AuthContext.jsx`](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/context/AuthContext.jsx) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Portal and access"]
  node_app["Portal app<br/>[App.jsx]"]
  node_auth["Authentication<br/>[AuthContext.jsx]"]
  node_layout["Navigation layout<br/>[Layout.jsx]"]
  node_frontend_api["API client<br/>[api.js]"]
  node_local_store[("Offline data store<br/>[store.jsx]")]
  node_backend["Express API<br/>[serve.js]"]
end

subgraph group_operations["Requisitions and approvals"]
  node_requisitions["Requisition workflows"]
  node_workflow["Workflow builder"]
  node_department["Department management"]
  node_memos["Memo management<br/>[MemoManagement.jsx]"]
end

subgraph group_workplace["HR and records"]
  node_hr["HR portal<br/>[HRDashboard.jsx]"]
  node_onboarding["Staff onboarding"]
  node_attendance_ui["Attendance tracking"]
end

subgraph group_documents["Documents and communication"]
  node_document_studio["Document Studio<br/>[DocumentStudio.jsx]"]
  node_chat["Chat widget<br/>[ChatWidget.jsx]"]
end

subgraph group_attendance["Attendance capture"]
  node_desktop_app["Tray launcher<br/>[app.py]"]
  node_adms_server["Local ADMS server<br/>[server.py]"]
  node_sqlite[("Local attendance DB<br/>[database.py]")]
  node_desktop_settings["Desktop settings<br/>[config_util.py]"]
end

node_staff(("Staff user"))
node_postgres[("PostgreSQL")]
node_zk_device(("ZKTeco device"))

node_staff -->|"uses"| node_app
node_app -->|"checks session"| node_auth
node_app -->|"renders"| node_layout
node_app -->|"routes to"| node_requisitions
node_app -->|"routes to"| node_workflow
node_app -->|"routes to"| node_department
node_app -->|"routes to"| node_memos
node_app -->|"routes to"| node_hr
node_app -->|"loads"| node_onboarding
node_app -->|"routes to"| node_document_studio
node_app -->|"renders via layout"| node_chat
node_auth -->|"calls"| node_frontend_api
node_auth -->|"clears caches"| node_local_store
node_requisitions -->|"loads data"| node_frontend_api
node_workflow -->|"loads data"| node_frontend_api
node_department -->|"loads data"| node_frontend_api
node_frontend_api -->|"sends API requests"| node_backend
node_local_store -->|"syncs queued actions"| node_frontend_api
node_backend -->|"persists records"| node_postgres
node_zk_device -->|"sends punches"| node_adms_server
node_desktop_app -->|"starts server"| node_adms_server
node_adms_server -->|"stores attendance"| node_sqlite
node_desktop_settings -->|"configures launch"| node_desktop_app
node_adms_server -.->|"syncs to cloud"| node_backend
node_attendance_ui -->|"calls API"| node_frontend_api

click node_app "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/App.jsx"
click node_auth "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/context/AuthContext.jsx"
click node_layout "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/Layout.jsx"
click node_frontend_api "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/lib/api.js"
click node_local_store "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/lib/store.jsx"
click node_backend "https://github.com/ephraimraxy/css-rms/blob/main/serve.js"
click node_requisitions "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/RequisitionsPage.jsx"
click node_workflow "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/WorkflowBuilder.jsx"
click node_department "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/DepartmentManager.jsx"
click node_memos "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/MemoManagement.jsx"
click node_hr "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/HRDashboard.jsx"
click node_onboarding "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/StaffOnboardingForm.jsx"
click node_attendance_ui "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/AttendanceTracker.jsx"
click node_document_studio "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/DocumentStudio.jsx"
click node_chat "https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/ChatWidget.jsx"
click node_desktop_app "https://github.com/ephraimraxy/css-rms/blob/main/desktop/app.py"
click node_adms_server "https://github.com/ephraimraxy/css-rms/blob/main/desktop/server.py"
click node_sqlite "https://github.com/ephraimraxy/css-rms/blob/main/desktop/database.py"
click node_desktop_settings "https://github.com/ephraimraxy/css-rms/blob/main/desktop/config_util.py"

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_auth,node_layout,node_frontend_api,node_local_store,node_backend,node_staff toneBlue
class node_requisitions,node_workflow,node_department,node_memos,node_postgres toneAmber
class node_hr,node_onboarding,node_attendance_ui toneMint
class node_document_studio,node_chat toneRose
class node_desktop_app,node_adms_server,node_sqlite,node_desktop_settings,node_zk_device toneIndigo
```

## Components

### Portal and access

- [Portal app](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/App.jsx): `rms_frontend/src/App.jsx`
- [Authentication](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/context/AuthContext.jsx): `rms_frontend/src/context/AuthContext.jsx`
- [Navigation layout](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/Layout.jsx): `rms_frontend/src/components/Layout.jsx`
- [API client](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/lib/api.js): `rms_frontend/src/lib/api.js`
- [Offline data store](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/lib/store.jsx): `rms_frontend/src/lib/store.jsx`
- [Express API](https://github.com/ephraimraxy/css-rms/blob/main/serve.js): `serve.js`

### Requisitions and approvals

- [Requisition workflows](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/RequisitionsPage.jsx): `rms_frontend/src/components/RequisitionsPage.jsx`
- [Workflow builder](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/WorkflowBuilder.jsx): `rms_frontend/src/components/WorkflowBuilder.jsx`
- [Department management](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/DepartmentManager.jsx): `rms_frontend/src/components/DepartmentManager.jsx`
- [Memo management](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/MemoManagement.jsx): `rms_frontend/src/components/MemoManagement.jsx`

### HR and records

- [HR portal](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/HRDashboard.jsx): `rms_frontend/src/components/HRDashboard.jsx`
- [Staff onboarding](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/StaffOnboardingForm.jsx): `rms_frontend/src/components/StaffOnboardingForm.jsx`
- [Attendance tracking](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/AttendanceTracker.jsx): `rms_frontend/src/components/AttendanceTracker.jsx`

### Documents and communication

- [Document Studio](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/DocumentStudio.jsx): `rms_frontend/src/components/DocumentStudio.jsx`
- [Chat widget](https://github.com/ephraimraxy/css-rms/blob/main/rms_frontend/src/components/ChatWidget.jsx): `rms_frontend/src/components/ChatWidget.jsx`

### Attendance capture

- [Tray launcher](https://github.com/ephraimraxy/css-rms/blob/main/desktop/app.py): `desktop/app.py`
- [Local ADMS server](https://github.com/ephraimraxy/css-rms/blob/main/desktop/server.py): `desktop/server.py`
- [Local attendance DB](https://github.com/ephraimraxy/css-rms/blob/main/desktop/database.py): `desktop/database.py`
- [Desktop settings](https://github.com/ephraimraxy/css-rms/blob/main/desktop/config_util.py): `desktop/config_util.py`

### Other components

- **Staff user**
- **PostgreSQL**
- **ZKTeco device**

## Connections

- Staff user → Portal app: uses (evidence: `README.md`)
- Portal app → Authentication: checks session (evidence: `rms_frontend/src/App.jsx`)
- Portal app → Navigation layout: renders (evidence: `rms_frontend/src/App.jsx`)
- Portal app → Requisition workflows: routes to (evidence: `rms_frontend/src/App.jsx`)
- Portal app → Workflow builder: routes to (evidence: `rms_frontend/src/App.jsx`)
- Portal app → Department management: routes to (evidence: `rms_frontend/src/App.jsx`)
- Portal app → Memo management: routes to (evidence: `rms_frontend/src/App.jsx`)
- Portal app → HR portal: routes to (evidence: `rms_frontend/src/App.jsx`)
- Portal app → Staff onboarding: loads (evidence: `rms_frontend/src/App.jsx`)
- Portal app → Document Studio: routes to (evidence: `rms_frontend/src/App.jsx`)
- Portal app → Chat widget: renders via layout (evidence: `rms_frontend/src/components/Layout.jsx`)
- Authentication → API client: calls (evidence: `rms_frontend/src/context/AuthContext.jsx`)
- Authentication → Offline data store: clears caches (evidence: `rms_frontend/src/context/AuthContext.jsx`)
- Requisition workflows → API client: loads data
- Workflow builder → API client: loads data
- Department management → API client: loads data (evidence: `rms_frontend/src/components/DepartmentManager.jsx`)
- API client → Express API: sends API requests (evidence: `README.md`)
- Offline data store → API client: syncs queued actions (evidence: `rms_frontend/src/lib/store.jsx`)
- Express API → PostgreSQL: persists records (evidence: `README.md`)
- ZKTeco device → Local ADMS server: sends punches (evidence: `desktop/server.py`)
- Tray launcher → Local ADMS server: starts server (evidence: `desktop/app.py`)
- Local ADMS server → Local attendance DB: stores attendance (evidence: `desktop/server.py`)
- Desktop settings → Tray launcher: configures launch (evidence: `desktop/app.py`)
- Local ADMS server → Express API: syncs to cloud
- Attendance tracking → API client: calls API (evidence: `rms_frontend/src/components/AttendanceTracker.jsx`)
