# bavishkmr/xenotrack architecture

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

- Interactive diagram: https://gitdiagram.com/bavishkmr/xenotrack
- Repository: https://github.com/bavishkmr/xenotrack

## Overview

Xenotrack is an institute-management web application. Admins and staff sign in, then manage members, programs/groups, attendance, fees and payments; dashboards, reports, receipts, settings and audit logs support that work. The React app routes pages through shared authentication and API services to Express route/controller modules, which enforce access and operate on PostgreSQL through a compatibility layer. The README documents several capabilities whose page or controller implementation was not sampled; those branches are represented at their exact tree directories, with uncertain internal links omitted.

Main entry points: [`backend/src/app.js`](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/app.js) (Express API), [`frontend/src/App.jsx`](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/App.jsx) (App routing), [`frontend/src/services/index.js`](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/services/index.js) (API services), [`backend/src/config/database.js`](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/config/database.js) (PostgreSQL access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_routing["App routing<br/>[App.jsx]"]
  node_auth_ui["Session context<br/>[AuthContext.jsx]"]
  node_api_client["API services<br/>[index.js]"]
  node_api_transport["HTTP client<br/>[api.js]"]
  node_member_ui["Member management<br/>[MembersPage.jsx]"]
  node_member_profile["Member profiles<br/>[MemberProfile.jsx]"]
  node_groups_ui["Programs and groups<br/>[GroupsPage.jsx]"]
  node_group_detail["Group detail<br/>[GroupDetail.jsx]"]
  node_attendance_ui["Attendance pages<br/>[MarkAttendance.jsx]"]
  node_fees_ui["Fee records<br/>[FeeRecordsPage.jsx]"]
  node_settings_ui["Settings<br/>[SettingsPage.jsx]"]
  node_login_ui["Login<br/>[LoginPage.jsx]"]
end

subgraph group_api["API and access"]
  node_express["Express API<br/>[app.js]"]
  node_auth_routes["Auth routes<br/>[auth.js]"]
  node_auth_controller["Authentication<br/>[authController.js]"]
  node_access["Authorization<br/>[auth.js]"]
  node_jwt["Token utilities<br/>[jwt.js]"]
end

subgraph group_operations["Institute operations"]
  node_member_api["Member API"]
  node_program_api["Programs and groups API"]
  node_attendance_api["Attendance API"]
  node_fees_api["Fee plans and records<br/>[feeController.js]"]
  node_payments_api["Payments and receipts"]
  node_staff_api["Staff management<br/>[staffController.js]"]
end

subgraph group_insight["Reporting and settings"]
  node_dash_api["Dashboards"]
  node_reports_api["Reports"]
  node_settings_api["Institute settings"]
  node_audit["Activity audit<br/>[activityLogger.js]"]
end

subgraph group_data["Persistence"]
  node_database[("PostgreSQL access<br/>[database.js]")]
end

node_user(("Admin or staff"))

node_user -->|"uses"| node_routing
node_routing -->|"provides session"| node_auth_ui
node_routing -->|"routes to"| node_login_ui
node_auth_ui -->|"calls auth"| node_api_client
node_api_client -->|"sends requests"| node_api_transport
node_routing -->|"routes to"| node_member_ui
node_routing -->|"routes to"| node_member_profile
node_routing -->|"routes to"| node_groups_ui
node_routing -->|"routes to"| node_group_detail
node_routing -->|"routes to"| node_attendance_ui
node_routing -->|"routes to"| node_fees_ui
node_routing -->|"routes to"| node_settings_ui
node_member_ui -->|"requests data"| node_api_client
node_member_profile -->|"requests data"| node_api_client
node_groups_ui -->|"requests data"| node_api_client
node_group_detail -->|"requests data"| node_api_client
node_fees_ui -->|"requests data"| node_api_client
node_settings_ui -->|"requests data"| node_api_client
node_login_ui -.->|"auth requests"| node_api_client
node_api_transport -.->|"HTTP API"| node_express
node_express -->|"mounts"| node_auth_routes
node_auth_routes -->|"dispatches"| node_auth_controller
node_auth_routes -->|"applies auth"| node_access
node_access -->|"verifies token"| node_jwt
node_access -->|"reloads user"| node_database
node_auth_controller -->|"reads and writes"| node_database
node_auth_controller -->|"uses tokens"| node_jwt
node_express -->|"routes requests"| node_member_api
node_express -->|"routes requests"| node_program_api
node_express -->|"routes requests"| node_attendance_api
node_express -->|"routes requests"| node_fees_api
node_express -->|"routes requests"| node_payments_api
node_express -->|"routes requests"| node_staff_api
node_express -->|"routes requests"| node_dash_api
node_express -->|"routes requests"| node_reports_api
node_express -->|"routes requests"| node_settings_api
node_member_api -->|"queries"| node_database
node_program_api -->|"queries"| node_database
node_attendance_api -->|"queries"| node_database
node_payments_api -->|"transactions"| node_database
node_settings_api -->|"queries"| node_database
node_dash_api -->|"queries"| node_database
node_member_api -->|"logs actions"| node_audit
node_program_api -->|"logs actions"| node_audit
node_attendance_api -->|"logs actions"| node_audit
node_payments_api -->|"logs actions"| node_audit
node_settings_api -->|"logs actions"| node_audit
node_audit -->|"writes logs"| node_database

click node_routing "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/App.jsx"
click node_auth_ui "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/context/AuthContext.jsx"
click node_api_client "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/services/index.js"
click node_api_transport "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/services/api.js"
click node_member_ui "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/MembersPage.jsx"
click node_member_profile "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/MemberProfile.jsx"
click node_groups_ui "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/GroupsPage.jsx"
click node_group_detail "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/GroupDetail.jsx"
click node_attendance_ui "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/MarkAttendance.jsx"
click node_fees_ui "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/FeeRecordsPage.jsx"
click node_settings_ui "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/SettingsPage.jsx"
click node_login_ui "https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/LoginPage.jsx"
click node_express "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/app.js"
click node_auth_routes "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/routes/auth.js"
click node_auth_controller "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/authController.js"
click node_access "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/middleware/auth.js"
click node_member_api "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/memberController.js"
click node_program_api "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/programController.js"
click node_attendance_api "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/attendanceController.js"
click node_fees_api "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/feeController.js"
click node_payments_api "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/paymentController.js"
click node_staff_api "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/staffController.js"
click node_dash_api "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/dashboardController.js"
click node_reports_api "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/reportController.js"
click node_settings_api "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/settingsController.js"
click node_audit "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/utils/activityLogger.js"
click node_database "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/config/database.js"
click node_jwt "https://github.com/bavishkmr/xenotrack/blob/main/backend/src/config/jwt.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_routing,node_auth_ui,node_api_client,node_api_transport,node_member_ui,node_member_profile,node_groups_ui,node_group_detail,node_attendance_ui,node_fees_ui,node_settings_ui,node_login_ui toneBlue
class node_express,node_auth_routes,node_auth_controller,node_access,node_jwt toneAmber
class node_member_api,node_program_api,node_attendance_api,node_fees_api,node_payments_api,node_staff_api toneMint
class node_dash_api,node_reports_api,node_settings_api,node_audit toneRose
class node_database,node_user toneIndigo
```

## Components

### Web application

- [App routing](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Session context](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`
- [API services](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/services/index.js): `frontend/src/services/index.js`
- [HTTP client](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/services/api.js): `frontend/src/services/api.js`
- [Member management](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/MembersPage.jsx): `frontend/src/pages/MembersPage.jsx`
- [Member profiles](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/MemberProfile.jsx): `frontend/src/pages/MemberProfile.jsx`
- [Programs and groups](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/GroupsPage.jsx): `frontend/src/pages/GroupsPage.jsx`
- [Group detail](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/GroupDetail.jsx): `frontend/src/pages/GroupDetail.jsx`
- [Attendance pages](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/MarkAttendance.jsx): `frontend/src/pages/MarkAttendance.jsx`
- [Fee records](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/FeeRecordsPage.jsx): `frontend/src/pages/FeeRecordsPage.jsx`
- [Settings](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/SettingsPage.jsx): `frontend/src/pages/SettingsPage.jsx`
- [Login](https://github.com/bavishkmr/xenotrack/blob/main/frontend/src/pages/LoginPage.jsx): `frontend/src/pages/LoginPage.jsx`

### API and access

- [Express API](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/app.js): `backend/src/app.js`
- [Auth routes](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/routes/auth.js): `backend/src/routes/auth.js`
- [Authentication](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/authController.js): `backend/src/controllers/authController.js`
- [Authorization](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/middleware/auth.js): `backend/src/middleware/auth.js`
- [Token utilities](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/config/jwt.js): `backend/src/config/jwt.js`

### Institute operations

- [Member API](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/memberController.js): `backend/src/controllers/memberController.js`
- [Programs and groups API](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/programController.js): `backend/src/controllers/programController.js`
- [Attendance API](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/attendanceController.js): `backend/src/controllers/attendanceController.js`
- [Fee plans and records](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/feeController.js): `backend/src/controllers/feeController.js`
- [Payments and receipts](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/paymentController.js): `backend/src/controllers/paymentController.js`
- [Staff management](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/staffController.js): `backend/src/controllers/staffController.js`

### Reporting and settings

- [Dashboards](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/dashboardController.js): `backend/src/controllers/dashboardController.js`
- [Reports](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/reportController.js): `backend/src/controllers/reportController.js`
- [Institute settings](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/controllers/settingsController.js): `backend/src/controllers/settingsController.js`
- [Activity audit](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/utils/activityLogger.js): `backend/src/utils/activityLogger.js`

### Persistence

- [PostgreSQL access](https://github.com/bavishkmr/xenotrack/blob/main/backend/src/config/database.js): `backend/src/config/database.js`

### Other components

- **Admin or staff**

## Connections

- Admin or staff → App routing: uses (evidence: `frontend/src/App.jsx`)
- App routing → Session context: provides session (evidence: `frontend/src/App.jsx`)
- App routing → Login: routes to (evidence: `frontend/src/App.jsx`)
- Session context → API services: calls auth (evidence: `frontend/src/context/AuthContext.jsx`)
- API services → HTTP client: sends requests (evidence: `frontend/src/services/index.js`)
- App routing → Member management: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Member profiles: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Programs and groups: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Group detail: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Attendance pages: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Fee records: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Settings: routes to (evidence: `frontend/src/App.jsx`)
- Member management → API services: requests data (evidence: `frontend/src/pages/MembersPage.jsx`)
- Member profiles → API services: requests data (evidence: `frontend/src/pages/MemberProfile.jsx`)
- Programs and groups → API services: requests data (evidence: `frontend/src/pages/GroupsPage.jsx`)
- Group detail → API services: requests data (evidence: `frontend/src/pages/GroupDetail.jsx`)
- Fee records → API services: requests data (evidence: `frontend/src/pages/FeeRecordsPage.jsx`)
- Settings → API services: requests data (evidence: `frontend/src/pages/SettingsPage.jsx`)
- Login → API services: auth requests
- HTTP client → Express API: HTTP API
- Express API → Auth routes: mounts (evidence: `backend/src/app.js`)
- Auth routes → Authentication: dispatches (evidence: `backend/src/routes/auth.js`)
- Auth routes → Authorization: applies auth (evidence: `backend/src/routes/auth.js`)
- Authorization → Token utilities: verifies token (evidence: `backend/src/middleware/auth.js`)
- Authorization → PostgreSQL access: reloads user (evidence: `backend/src/middleware/auth.js`)
- Authentication → PostgreSQL access: reads and writes (evidence: `backend/src/controllers/authController.js`)
- Authentication → Token utilities: uses tokens (evidence: `backend/src/controllers/authController.js`)
- Express API → Member API: routes requests (evidence: `backend/src/app.js`)
- Express API → Programs and groups API: routes requests (evidence: `backend/src/app.js`)
- Express API → Attendance API: routes requests (evidence: `backend/src/app.js`)
- Express API → Fee plans and records: routes requests (evidence: `backend/src/app.js`)
- Express API → Payments and receipts: routes requests (evidence: `backend/src/app.js`)
- Express API → Staff management: routes requests (evidence: `backend/src/app.js`)
- Express API → Dashboards: routes requests (evidence: `backend/src/app.js`)
- Express API → Reports: routes requests (evidence: `backend/src/app.js`)
- Express API → Institute settings: routes requests (evidence: `backend/src/app.js`)
- Member API → PostgreSQL access: queries (evidence: `backend/src/controllers/memberController.js`)
- Programs and groups API → PostgreSQL access: queries (evidence: `backend/src/controllers/programController.js`)
- Attendance API → PostgreSQL access: queries (evidence: `backend/src/controllers/attendanceController.js`)
- Payments and receipts → PostgreSQL access: transactions (evidence: `backend/src/controllers/paymentController.js`)
- Institute settings → PostgreSQL access: queries (evidence: `backend/src/controllers/settingsController.js`)
- Dashboards → PostgreSQL access: queries (evidence: `backend/src/controllers/dashboardController.js`)
- Member API → Activity audit: logs actions (evidence: `backend/src/controllers/memberController.js`)
- Programs and groups API → Activity audit: logs actions (evidence: `backend/src/controllers/programController.js`)
- Attendance API → Activity audit: logs actions (evidence: `backend/src/controllers/attendanceController.js`)
- Payments and receipts → Activity audit: logs actions (evidence: `backend/src/controllers/paymentController.js`)
- Institute settings → Activity audit: logs actions (evidence: `backend/src/controllers/settingsController.js`)
- Activity audit → PostgreSQL access: writes logs (evidence: `backend/src/utils/activityLogger.js`)
