# aldjayr/neust-epms architecture

> Architecture diagram of the GitHub repository aldjayr/neust-epms, 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/aldjayr/neust-epms
- Repository: https://github.com/aldjayr/neust-epms

## Overview

NEUST EPMS is a university extension-service management system: authenticated users create and review proposals, manage resulting projects and MOAs, submit reports, and access documents and oversight tools. The graph follows the documented browser-to-API boundary and the sampled route-to-service ownership where available. Domain modules and frontend feature areas are grouped at their exact directory paths; internal wiring for unsampled capabilities is not inferred.

Main entry points: [`backend/src/app.ts`](https://github.com/aldjayr/neust-epms/blob/main/backend/src/app.ts) (HTTP application), [`backend/src/db/schema`](https://github.com/aldjayr/neust-epms/tree/main/backend/src/db/schema) (PostgreSQL), [`backend/src/modules/proposals`](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/proposals) (Proposal workflow), [`backend/src/modules/notifications`](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/notifications) (Notifications)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["User application"]
  node_web["Web application"]
  node_webfeatures["Domain features"]
  node_apiclient["API client<br/>[client.ts]"]
end

subgraph group_api["API and identity"]
  node_app["HTTP application<br/>[app.ts]"]
  node_auth["Authentication"]
end

subgraph group_lifecycle["Program lifecycle"]
  node_proposals["Proposal workflow"]
  node_projects["Project management"]
  node_reports["Project reporting"]
  node_moas["MOA management"]
  node_documents["Document storage"]
end

subgraph group_oversight["Oversight tools"]
  node_admin["User administration"]
  node_director["Director tools"]
  node_actioncenter["Action center"]
  node_search["Cross-domain search"]
  node_audit["Audit history"]
  node_notifications["Notifications"]
end

subgraph group_platform["Persistence and integrations"]
  node_db[("PostgreSQL")]
  node_supabase["Supabase Auth and Storage"]
  node_resend["Resend email"]
end

node_user(("University user"))

node_user -->|"uses"| node_web
node_web -->|"presents"| node_webfeatures
node_webfeatures -->|"requests"| node_apiclient
node_apiclient -->|"calls API"| node_app
node_app -->|"dispatches"| node_auth
node_app -->|"dispatches"| node_proposals
node_app -->|"dispatches"| node_projects
node_app -->|"dispatches"| node_reports
node_app -->|"dispatches"| node_moas
node_app -->|"dispatches"| node_documents
node_app -->|"dispatches"| node_admin
node_app -->|"dispatches"| node_director
node_app -->|"dispatches"| node_actioncenter
node_app -->|"dispatches"| node_search
node_app -->|"dispatches"| node_audit
node_app -->|"dispatches"| node_notifications
node_auth -->|"validates identity"| node_supabase
node_auth -->|"loads profile"| node_db
node_proposals -->|"reads and writes"| node_db
node_proposals -->|"creates updates"| node_notifications
node_proposals -->|"records review"| node_audit
node_projects -->|"reads and writes"| node_db
node_reports -->|"reads and writes"| node_db
node_moas -->|"reads and writes"| node_db
node_documents -->|"records metadata"| node_db
node_documents -->|"stores files"| node_supabase
node_admin -->|"manages accounts"| node_db
node_search -->|"searches records"| node_db
node_notifications -->|"stores notifications"| node_db
node_notifications -.->|"sends email"| node_resend

click node_web "https://github.com/aldjayr/neust-epms/tree/main/frontend/src/routes"
click node_webfeatures "https://github.com/aldjayr/neust-epms/tree/main/frontend/src/features"
click node_apiclient "https://github.com/aldjayr/neust-epms/blob/main/frontend/src/lib/api/client.ts"
click node_app "https://github.com/aldjayr/neust-epms/blob/main/backend/src/app.ts"
click node_auth "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/auth"
click node_proposals "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/proposals"
click node_projects "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/projects"
click node_reports "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/reports"
click node_moas "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/moas"
click node_documents "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/storage"
click node_admin "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/admin"
click node_director "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/director"
click node_actioncenter "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/action-center"
click node_search "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/search"
click node_audit "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/audit"
click node_notifications "https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/notifications"
click node_db "https://github.com/aldjayr/neust-epms/tree/main/backend/src/db/schema"

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_web,node_webfeatures,node_apiclient,node_user toneBlue
class node_app,node_auth toneAmber
class node_proposals,node_projects,node_reports,node_moas,node_documents toneMint
class node_admin,node_director,node_actioncenter,node_search,node_audit,node_notifications toneRose
class node_db,node_supabase,node_resend toneIndigo
```

## Components

### User application

- [Web application](https://github.com/aldjayr/neust-epms/tree/main/frontend/src/routes): `frontend/src/routes`
- [Domain features](https://github.com/aldjayr/neust-epms/tree/main/frontend/src/features): `frontend/src/features`
- [API client](https://github.com/aldjayr/neust-epms/blob/main/frontend/src/lib/api/client.ts): `frontend/src/lib/api/client.ts`

### API and identity

- [HTTP application](https://github.com/aldjayr/neust-epms/blob/main/backend/src/app.ts): `backend/src/app.ts`
- [Authentication](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/auth): `backend/src/modules/auth`

### Program lifecycle

- [Proposal workflow](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/proposals): `backend/src/modules/proposals`
- [Project management](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/projects): `backend/src/modules/projects`
- [Project reporting](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/reports): `backend/src/modules/reports`
- [MOA management](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/moas): `backend/src/modules/moas`
- [Document storage](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/storage): `backend/src/modules/storage`

### Oversight tools

- [User administration](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/admin): `backend/src/modules/admin`
- [Director tools](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/director): `backend/src/modules/director`
- [Action center](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/action-center): `backend/src/modules/action-center`
- [Cross-domain search](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/search): `backend/src/modules/search`
- [Audit history](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/audit): `backend/src/modules/audit`
- [Notifications](https://github.com/aldjayr/neust-epms/tree/main/backend/src/modules/notifications): `backend/src/modules/notifications`

### Persistence and integrations

- [PostgreSQL](https://github.com/aldjayr/neust-epms/tree/main/backend/src/db/schema): `backend/src/db/schema`
- **Supabase Auth and Storage**
- **Resend email**

### Other components

- **University user**

## Connections

- University user → Web application: uses
- Web application → Domain features: presents
- Domain features → API client: requests
- API client → HTTP application: calls API
- HTTP application → Authentication: dispatches
- HTTP application → Proposal workflow: dispatches
- HTTP application → Project management: dispatches
- HTTP application → Project reporting: dispatches
- HTTP application → MOA management: dispatches
- HTTP application → Document storage: dispatches
- HTTP application → User administration: dispatches
- HTTP application → Director tools: dispatches
- HTTP application → Action center: dispatches
- HTTP application → Cross-domain search: dispatches
- HTTP application → Audit history: dispatches
- HTTP application → Notifications: dispatches
- Authentication → Supabase Auth and Storage: validates identity
- Authentication → PostgreSQL: loads profile
- Proposal workflow → PostgreSQL: reads and writes
- Proposal workflow → Notifications: creates updates
- Proposal workflow → Audit history: records review
- Project management → PostgreSQL: reads and writes
- Project reporting → PostgreSQL: reads and writes
- MOA management → PostgreSQL: reads and writes
- Document storage → PostgreSQL: records metadata
- Document storage → Supabase Auth and Storage: stores files
- User administration → PostgreSQL: manages accounts
- Cross-domain search → PostgreSQL: searches records
- Notifications → PostgreSQL: stores notifications
- Notifications → Resend email: sends email
