# tensorsiitm/tensors-school-app architecture

> Architecture diagram of the GitHub repository tensorsiitm/tensors-school-app, 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/tensorsiitm/tensors-school-app
- Repository: https://github.com/tensorsiitm/tensors-school-app

## Overview

This is a teacher-and-student school management app: users sign in, then use role-specific mobile screens to manage or view school records. The backend exposes API routes whose controllers implement authentication, student/class administration, attendance, exams and marks, timetables, and announcements or leave requests, with PostgreSQL-backed records. The frontend API service connects screens to the backend; authentication utilities and local token storage support sessions. The README is empty, and sampled sources do not establish every screen-to-endpoint mapping, so those links are shown only at the shared service boundary.

Main entry points: [`school-app/backend/config/db.js`](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/config/db.js) (PostgreSQL), [`school-app/frontend/src/navigation/AppNavigator.jsx`](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/frontend/src/navigation/AppNavigator.jsx) (App navigator), [`school-app/backend/middleware/auth.js`](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/middleware/auth.js) (Access middleware), [`school-app/backend/index.js`](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/index.js) (API server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Mobile app"]
  node_navigator["App navigator<br/>[AppNavigator.jsx]"]
  node_teacher_screens["Teacher screens"]
  node_student_screens["Student screens"]
  node_api_client["API service<br/>[api.js]"]
  node_session["Session utilities<br/>[auth.js]"]
  node_token_storage["Token storage<br/>[storage.js]"]
end

subgraph group_api["API and access"]
  node_server["API server<br/>[index.js]"]
  node_route_index["Route registry<br/>[index.js]"]
  node_auth_routes["Auth routes<br/>[authRoutes.js]"]
  node_auth_controller["Authentication<br/>[authController.js]"]
  node_access["Access middleware<br/>[auth.js]"]
end

subgraph group_school["School records"]
  node_db[("PostgreSQL<br/>[db.js]")]
  node_student_controller["Student records"]
  node_class_controller["Class records<br/>[classController.js]"]
  node_attendance_controller["Attendance"]
  node_teacher_controller["Teacher records"]
end

subgraph group_academic["Academic work"]
  node_exam_controller["Exams<br/>[examController.js]"]
  node_marks_controller["Marks and results<br/>[marksController.js]"]
  node_subject_controller["Subjects"]
  node_timetable_controller["Timetables"]
  node_marks_routes["Marks routes<br/>[marksRoutes.js]"]
end

subgraph group_communication["Communication"]
  node_notification_controller["Announcements and leave"]
  node_notification_routes["Notification routes"]
end

node_teacher(("Teacher"))
node_student(("Student"))

node_teacher -->|"uses app"| node_navigator
node_student -->|"uses app"| node_navigator
node_navigator -->|"navigates"| node_teacher_screens
node_navigator -->|"navigates"| node_student_screens
node_teacher_screens -->|"requests data"| node_api_client
node_student_screens -->|"requests data"| node_api_client
node_session -->|"stores token"| node_token_storage
node_api_client -->|"HTTP requests"| node_server
node_server -->|"dispatches"| node_route_index
node_route_index -->|"mounts routes"| node_auth_routes
node_auth_routes -->|"dispatches"| node_auth_controller
node_auth_controller -->|"reads/writes"| node_db
node_auth_controller -->|"creates tokens"| node_access
node_server -->|"applies access"| node_access
node_notification_routes -->|"checks roles"| node_access
node_notification_routes -->|"dispatches"| node_notification_controller
node_notification_controller -->|"reads/writes"| node_db
node_marks_routes -->|"checks roles"| node_access
node_marks_routes -->|"dispatches"| node_marks_controller
node_marks_controller -->|"reads/writes"| node_db
node_student_controller -->|"reads/writes"| node_db
node_class_controller -->|"reads/writes"| node_db
node_attendance_controller -->|"reads/writes"| node_db
node_exam_controller -->|"reads/writes"| node_db
node_subject_controller -->|"reads/writes"| node_db
node_timetable_controller -->|"reads/writes"| node_db
node_teacher_controller -->|"reads/writes"| node_db

click node_navigator "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/frontend/src/navigation/AppNavigator.jsx"
click node_teacher_screens "https://github.com/tensorsiitm/tensors-school-app/tree/main/school-app/frontend/src/screens"
click node_student_screens "https://github.com/tensorsiitm/tensors-school-app/tree/main/school-app/frontend/src/screens"
click node_api_client "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/frontend/src/services/api.js"
click node_session "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/frontend/src/utils/auth.js"
click node_token_storage "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/frontend/src/utils/storage.js"
click node_server "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/index.js"
click node_route_index "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/routes/index.js"
click node_auth_routes "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/routes/authRoutes.js"
click node_auth_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/authController.js"
click node_access "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/middleware/auth.js"
click node_db "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/config/db.js"
click node_student_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/studentController.js"
click node_class_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/classController.js"
click node_attendance_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/attendanceController.js"
click node_exam_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/examController.js"
click node_marks_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/marksController.js"
click node_subject_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/subjectController.js"
click node_timetable_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/timetableController.js"
click node_teacher_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/teacherController.js"
click node_notification_controller "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/notificationController.js"
click node_notification_routes "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/routes/notificationRoutes.js"
click node_marks_routes "https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/routes/marksRoutes.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_navigator,node_teacher_screens,node_student_screens,node_api_client,node_session,node_token_storage toneBlue
class node_server,node_route_index,node_auth_routes,node_auth_controller,node_access toneAmber
class node_db,node_student_controller,node_class_controller,node_attendance_controller,node_teacher_controller toneMint
class node_exam_controller,node_marks_controller,node_subject_controller,node_timetable_controller,node_marks_routes toneRose
class node_notification_controller,node_notification_routes,node_teacher,node_student toneIndigo
```

## Components

### Mobile app

- [App navigator](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/frontend/src/navigation/AppNavigator.jsx): `school-app/frontend/src/navigation/AppNavigator.jsx`
- [Teacher screens](https://github.com/tensorsiitm/tensors-school-app/tree/main/school-app/frontend/src/screens): `school-app/frontend/src/screens`
- [Student screens](https://github.com/tensorsiitm/tensors-school-app/tree/main/school-app/frontend/src/screens): `school-app/frontend/src/screens`
- [API service](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/frontend/src/services/api.js): `school-app/frontend/src/services/api.js`
- [Session utilities](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/frontend/src/utils/auth.js): `school-app/frontend/src/utils/auth.js`
- [Token storage](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/frontend/src/utils/storage.js): `school-app/frontend/src/utils/storage.js`

### API and access

- [API server](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/index.js): `school-app/backend/index.js`
- [Route registry](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/routes/index.js): `school-app/backend/routes/index.js`
- [Auth routes](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/routes/authRoutes.js): `school-app/backend/routes/authRoutes.js`
- [Authentication](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/authController.js): `school-app/backend/controllers/authController.js`
- [Access middleware](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/middleware/auth.js): `school-app/backend/middleware/auth.js`

### School records

- [PostgreSQL](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/config/db.js): `school-app/backend/config/db.js`
- [Student records](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/studentController.js): `school-app/backend/controllers/studentController.js`
- [Class records](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/classController.js): `school-app/backend/controllers/classController.js`
- [Attendance](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/attendanceController.js): `school-app/backend/controllers/attendanceController.js`
- [Teacher records](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/teacherController.js): `school-app/backend/controllers/teacherController.js`

### Academic work

- [Exams](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/examController.js): `school-app/backend/controllers/examController.js`
- [Marks and results](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/marksController.js): `school-app/backend/controllers/marksController.js`
- [Subjects](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/subjectController.js): `school-app/backend/controllers/subjectController.js`
- [Timetables](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/timetableController.js): `school-app/backend/controllers/timetableController.js`
- [Marks routes](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/routes/marksRoutes.js): `school-app/backend/routes/marksRoutes.js`

### Communication

- [Announcements and leave](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/controllers/notificationController.js): `school-app/backend/controllers/notificationController.js`
- [Notification routes](https://github.com/tensorsiitm/tensors-school-app/blob/main/school-app/backend/routes/notificationRoutes.js): `school-app/backend/routes/notificationRoutes.js`

### Other components

- **Teacher**
- **Student**

## Connections

- Teacher → App navigator: uses app
- Student → App navigator: uses app
- App navigator → Teacher screens: navigates
- App navigator → Student screens: navigates
- Teacher screens → API service: requests data
- Student screens → API service: requests data
- Session utilities → Token storage: stores token
- API service → API server: HTTP requests
- API server → Route registry: dispatches
- Route registry → Auth routes: mounts routes
- Auth routes → Authentication: dispatches
- Authentication → PostgreSQL: reads/writes
- Authentication → Access middleware: creates tokens
- API server → Access middleware: applies access
- Notification routes → Access middleware: checks roles
- Notification routes → Announcements and leave: dispatches
- Announcements and leave → PostgreSQL: reads/writes
- Marks routes → Access middleware: checks roles
- Marks routes → Marks and results: dispatches
- Marks and results → PostgreSQL: reads/writes
- Student records → PostgreSQL: reads/writes
- Class records → PostgreSQL: reads/writes
- Attendance → PostgreSQL: reads/writes
- Exams → PostgreSQL: reads/writes
- Subjects → PostgreSQL: reads/writes
- Timetables → PostgreSQL: reads/writes
- Teacher records → PostgreSQL: reads/writes
