# vishwajith-gs/co architecture

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

- Interactive diagram: https://gitdiagram.com/vishwajith-gs/co
- Repository: https://github.com/vishwajith-gs/co

## Overview

This repository is a web application for automating course-outcome attainment work, with faculty and administrator interfaces. Users authenticate, manage subjects and course files, run processing, and access resulting reports; administrators also manage faculty, assignments, reviews, and activity. The backend provides the API and persistent records, while the frontend API client connects the pages to it. The tree suggests separate consolidation and attainment stages, but their invocation and detailed data flow are not visible in the sampled source, so those links are left conservative.

Main entry points: [`backend/server.js`](https://github.com/vishwajith-gs/co/blob/main/backend/server.js) (Express server), [`frontend/src/App.jsx`](https://github.com/vishwajith-gs/co/blob/main/frontend/src/App.jsx) (App and routes), [`frontend/src/lib/api.js`](https://github.com/vishwajith-gs/co/blob/main/frontend/src/lib/api.js) (API client), [`backend/models/index.js`](https://github.com/vishwajith-gs/co/blob/main/backend/models/index.js) (Model associations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web interface"]
  node_app["App and routes<br/>[App.jsx]"]
  node_dashboard["Faculty dashboard<br/>[Dashboard.jsx]"]
  node_workspace["Subject workspace"]
  node_reportsui["Reports and settings<br/>[Reports.jsx]"]
  node_adminui["Admin dashboard<br/>[AdminDashboard.jsx]"]
  node_client["API client<br/>[api.js]"]
end

subgraph group_api["API and access"]
  node_server["Express server<br/>[server.js]"]
  node_authroutes["Authentication routes<br/>[auth.js]"]
  node_authmw["JWT authentication<br/>[auth.js]"]
  node_subjectroutes["Subject routes<br/>[subjects.js]"]
  node_uploadroutes["Upload routes<br/>[uploads.js]"]
  node_adminroutes["Admin routes<br/>[admin.js]"]
  node_configroutes["Configuration routes<br/>[configuration.js]"]
end

subgraph group_workflow["Attainment workflow"]
  node_processing["Processing routes<br/>[processing.js]"]
  node_consolidate["Consolidation stage"]
  node_attainment["Attainment stage"]
  node_reportroutes["Report routes<br/>[reports.js]"]
  node_executor["Python executor<br/>[pythonExecutor.js]"]
  node_files["File management<br/>[fileManager.js]"]
end

subgraph group_data["Persistence"]
  node_models["Model associations<br/>[index.js]"]
  node_database[("SQLite database<br/>[database.js]")]
  node_uploadstore[("Uploaded files")]
  node_outputstore[("Generated outputs")]
end

node_user(("Faculty or admin"))

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_workspace
node_app -->|"routes to"| node_reportsui
node_app -->|"routes to"| node_adminui
node_dashboard -->|"requests data"| node_client
node_workspace -->|"requests data"| node_client
node_reportsui -->|"requests data"| node_client
node_adminui -->|"requests data"| node_client
node_client -->|"sends requests"| node_server
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_subjectroutes
node_server -->|"mounts"| node_uploadroutes
node_server -->|"mounts"| node_processing
node_server -->|"mounts"| node_reportroutes
node_server -->|"mounts"| node_adminroutes
node_server -->|"mounts"| node_configroutes
node_server -->|"syncs"| node_models
node_authroutes -->|"protects selected routes"| node_authmw
node_server -->|"protects API routes"| node_authmw
node_processing -->|"delegates execution"| node_executor
node_models -->|"persists records"| node_database
node_files -->|"manages files"| node_uploadstore
node_server -->|"serves uploads"| node_uploadstore
node_server -->|"serves outputs"| node_outputstore
node_executor -.->|"runs stage"| node_consolidate
node_executor -.->|"runs stage"| node_attainment
node_processing -.->|"writes results"| node_outputstore
node_reportroutes -.->|"reads report records"| node_models
node_adminroutes -.->|"reads and writes"| node_models

click node_app "https://github.com/vishwajith-gs/co/blob/main/frontend/src/App.jsx"
click node_dashboard "https://github.com/vishwajith-gs/co/blob/main/frontend/src/pages/Dashboard.jsx"
click node_workspace "https://github.com/vishwajith-gs/co/blob/main/frontend/src/pages/SubjectWorkspace.jsx"
click node_reportsui "https://github.com/vishwajith-gs/co/blob/main/frontend/src/pages/Reports.jsx"
click node_adminui "https://github.com/vishwajith-gs/co/blob/main/frontend/src/pages/AdminDashboard.jsx"
click node_client "https://github.com/vishwajith-gs/co/blob/main/frontend/src/lib/api.js"
click node_server "https://github.com/vishwajith-gs/co/blob/main/backend/server.js"
click node_authroutes "https://github.com/vishwajith-gs/co/blob/main/backend/routes/auth.js"
click node_authmw "https://github.com/vishwajith-gs/co/blob/main/backend/middleware/auth.js"
click node_subjectroutes "https://github.com/vishwajith-gs/co/blob/main/backend/routes/subjects.js"
click node_uploadroutes "https://github.com/vishwajith-gs/co/blob/main/backend/routes/uploads.js"
click node_processing "https://github.com/vishwajith-gs/co/blob/main/backend/routes/processing.js"
click node_consolidate "https://github.com/vishwajith-gs/co/blob/main/backend/stage3_consolidate.py"
click node_attainment "https://github.com/vishwajith-gs/co/blob/main/backend/stage4_attainment.py"
click node_reportroutes "https://github.com/vishwajith-gs/co/blob/main/backend/routes/reports.js"
click node_adminroutes "https://github.com/vishwajith-gs/co/blob/main/backend/routes/admin.js"
click node_configroutes "https://github.com/vishwajith-gs/co/blob/main/backend/routes/configuration.js"
click node_executor "https://github.com/vishwajith-gs/co/blob/main/backend/utils/pythonExecutor.js"
click node_files "https://github.com/vishwajith-gs/co/blob/main/backend/utils/fileManager.js"
click node_models "https://github.com/vishwajith-gs/co/blob/main/backend/models/index.js"
click node_database "https://github.com/vishwajith-gs/co/blob/main/backend/config/database.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_dashboard,node_workspace,node_reportsui,node_adminui,node_client toneBlue
class node_server,node_authroutes,node_authmw,node_subjectroutes,node_uploadroutes,node_adminroutes,node_configroutes toneAmber
class node_processing,node_consolidate,node_attainment,node_reportroutes,node_executor,node_files toneMint
class node_models,node_database,node_uploadstore,node_outputstore toneRose
class node_user toneIndigo
```

## Components

### Web interface

- [App and routes](https://github.com/vishwajith-gs/co/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Faculty dashboard](https://github.com/vishwajith-gs/co/blob/main/frontend/src/pages/Dashboard.jsx): `frontend/src/pages/Dashboard.jsx`
- [Subject workspace](https://github.com/vishwajith-gs/co/blob/main/frontend/src/pages/SubjectWorkspace.jsx): `frontend/src/pages/SubjectWorkspace.jsx`
- [Reports and settings](https://github.com/vishwajith-gs/co/blob/main/frontend/src/pages/Reports.jsx): `frontend/src/pages/Reports.jsx`
- [Admin dashboard](https://github.com/vishwajith-gs/co/blob/main/frontend/src/pages/AdminDashboard.jsx): `frontend/src/pages/AdminDashboard.jsx`
- [API client](https://github.com/vishwajith-gs/co/blob/main/frontend/src/lib/api.js): `frontend/src/lib/api.js`

### API and access

- [Express server](https://github.com/vishwajith-gs/co/blob/main/backend/server.js): `backend/server.js`
- [Authentication routes](https://github.com/vishwajith-gs/co/blob/main/backend/routes/auth.js): `backend/routes/auth.js`
- [JWT authentication](https://github.com/vishwajith-gs/co/blob/main/backend/middleware/auth.js): `backend/middleware/auth.js`
- [Subject routes](https://github.com/vishwajith-gs/co/blob/main/backend/routes/subjects.js): `backend/routes/subjects.js`
- [Upload routes](https://github.com/vishwajith-gs/co/blob/main/backend/routes/uploads.js): `backend/routes/uploads.js`
- [Admin routes](https://github.com/vishwajith-gs/co/blob/main/backend/routes/admin.js): `backend/routes/admin.js`
- [Configuration routes](https://github.com/vishwajith-gs/co/blob/main/backend/routes/configuration.js): `backend/routes/configuration.js`

### Attainment workflow

- [Processing routes](https://github.com/vishwajith-gs/co/blob/main/backend/routes/processing.js): `backend/routes/processing.js`
- [Consolidation stage](https://github.com/vishwajith-gs/co/blob/main/backend/stage3_consolidate.py): `backend/stage3_consolidate.py`
- [Attainment stage](https://github.com/vishwajith-gs/co/blob/main/backend/stage4_attainment.py): `backend/stage4_attainment.py`
- [Report routes](https://github.com/vishwajith-gs/co/blob/main/backend/routes/reports.js): `backend/routes/reports.js`
- [Python executor](https://github.com/vishwajith-gs/co/blob/main/backend/utils/pythonExecutor.js): `backend/utils/pythonExecutor.js`
- [File management](https://github.com/vishwajith-gs/co/blob/main/backend/utils/fileManager.js): `backend/utils/fileManager.js`

### Persistence

- [Model associations](https://github.com/vishwajith-gs/co/blob/main/backend/models/index.js): `backend/models/index.js`
- [SQLite database](https://github.com/vishwajith-gs/co/blob/main/backend/config/database.js): `backend/config/database.js`
- **Uploaded files**
- **Generated outputs**

### Other components

- **Faculty or admin**

## Connections

- Faculty or admin → App and routes: uses
- App and routes → Faculty dashboard: routes to
- App and routes → Subject workspace: routes to
- App and routes → Reports and settings: routes to
- App and routes → Admin dashboard: routes to
- Faculty dashboard → API client: requests data
- Subject workspace → API client: requests data
- Reports and settings → API client: requests data
- Admin dashboard → API client: requests data
- API client → Express server: sends requests
- Express server → Authentication routes: mounts
- Express server → Subject routes: mounts
- Express server → Upload routes: mounts
- Express server → Processing routes: mounts
- Express server → Report routes: mounts
- Express server → Admin routes: mounts
- Express server → Configuration routes: mounts
- Express server → Model associations: syncs
- Authentication routes → JWT authentication: protects selected routes
- Express server → JWT authentication: protects API routes
- Processing routes → Python executor: delegates execution
- Model associations → SQLite database: persists records
- File management → Uploaded files: manages files
- Express server → Uploaded files: serves uploads
- Express server → Generated outputs: serves outputs
- Python executor → Consolidation stage: runs stage
- Python executor → Attainment stage: runs stage
- Processing routes → Generated outputs: writes results
- Report routes → Model associations: reads report records
- Admin routes → Model associations: reads and writes
