# jonathanrodrigues15287/scholaris architecture

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

## Overview

Scholaris is a student productivity app whose workflow runs from browser interactions through a FastAPI API to academic services and PostgreSQL-backed records, then returns data for display. Its major domains include assignments, attendance and predictions, courses and semesters, timetable, study history, grade calculations, and the dashboard. The sampled files show app registration, authentication, and attendance internals; other feature branches are preserved from the README and file tree, with unverified connections left dashed.

Main entry points: [`backend/app/main.py`](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/main.py) (FastAPI app), [`frontend/js/api.js`](https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/api.js) (Browser app), [`backend/app/models`](https://github.com/jonathanrodrigues15287/scholaris/tree/main/backend/app/models) (Domain records), [`backend/app/routers/auth.py`](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/routers/auth.py) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Student interface"]
  node_web["Browser app<br/>[api.js]"]
  node_assign_ui["Assignments UI<br/>[assignments.js]"]
  node_att_ui["Attendance UI<br/>[attendance.js]"]
  node_schedule_ui["Timetable UI<br/>[timetable.js]"]
  node_study_ui["Study timer<br/>[timer.js]"]
  node_grades_ui["Grade UI<br/>[cgpa.js]"]
  node_dashboard_ui["Dashboard UI<br/>[dashboard.js]"]
end

subgraph group_api["API and identity"]
  node_app["FastAPI app<br/>[main.py]"]
  node_auth["Authentication<br/>[auth.py]"]
end

subgraph group_academic["Academic workflows"]
  node_assignment["Assignment tracking"]
  node_attendance["Attendance and forecasts"]
  node_courses["Courses and semesters<br/>[course_service.py]"]
  node_timetable["Weekly timetable"]
  node_study["Study history<br/>[study_service.py]"]
  node_grades["SGPA and CGPA<br/>[cgpa_service.py]"]
  node_dashboard["Dashboard aggregation"]
end

subgraph group_persistence["Persistence and shared logic"]
  node_records["Domain records"]
  node_database[("PostgreSQL access<br/>[database.py]")]
  node_shared["Validation and helpers"]
end

node_student(("Student"))

node_student -.->|"uses"| node_web
node_web -.->|"API requests"| node_app
node_app -->|"registers routes"| node_auth
node_app -->|"registers routes"| node_attendance
node_app -->|"registers routes"| node_assignment
node_app -->|"registers routes"| node_timetable
node_app -->|"registers routes"| node_study
node_app -->|"registers routes"| node_grades
node_app -->|"registers routes"| node_dashboard
node_auth -->|"gets sessions"| node_database
node_auth -->|"authenticates users"| node_records
node_auth -->|"normalizes input"| node_shared
node_attendance -->|"reads and writes"| node_records
node_attendance -->|"validates and pages"| node_shared
node_assignment -->|"reads and writes"| node_records
node_assignment -->|"validates and pages"| node_shared
node_timetable -->|"reads and writes"| node_records
node_study -->|"reads and writes"| node_records
node_dashboard -->|"aggregates records"| node_records
node_dashboard -->|"uses attendance logic"| node_attendance
node_grades -.->|"calculates grades"| node_records
node_assign_ui -.->|"uses API client"| node_web
node_att_ui -.->|"uses API client"| node_web
node_schedule_ui -.->|"uses API client"| node_web
node_study_ui -.->|"uses API client"| node_web
node_grades_ui -.->|"uses API client"| node_web
node_dashboard_ui -.->|"uses API client"| node_web

click node_web "https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/api.js"
click node_assign_ui "https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/assignments.js"
click node_att_ui "https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/attendance.js"
click node_schedule_ui "https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/timetable.js"
click node_study_ui "https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/timer.js"
click node_grades_ui "https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/cgpa.js"
click node_dashboard_ui "https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/dashboard.js"
click node_app "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/main.py"
click node_auth "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/routers/auth.py"
click node_assignment "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/assignment_service.py"
click node_attendance "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/attendance_service.py"
click node_courses "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/course_service.py"
click node_timetable "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/timetable_service.py"
click node_study "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/study_service.py"
click node_grades "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/cgpa_service.py"
click node_dashboard "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/dashboard_service.py"
click node_records "https://github.com/jonathanrodrigues15287/scholaris/tree/main/backend/app/models"
click node_database "https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/core/database.py"
click node_shared "https://github.com/jonathanrodrigues15287/scholaris/tree/main/backend/app/utils"

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_assign_ui,node_att_ui,node_schedule_ui,node_study_ui,node_grades_ui,node_dashboard_ui toneBlue
class node_app,node_auth toneAmber
class node_assignment,node_attendance,node_courses,node_timetable,node_study,node_grades,node_dashboard toneMint
class node_records,node_database,node_shared toneRose
class node_student toneIndigo
```

## Components

### Student interface

- [Browser app](https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/api.js): `frontend/js/api.js`
- [Assignments UI](https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/assignments.js): `frontend/js/assignments.js`
- [Attendance UI](https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/attendance.js): `frontend/js/attendance.js`
- [Timetable UI](https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/timetable.js): `frontend/js/timetable.js`
- [Study timer](https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/timer.js): `frontend/js/timer.js`
- [Grade UI](https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/cgpa.js): `frontend/js/cgpa.js`
- [Dashboard UI](https://github.com/jonathanrodrigues15287/scholaris/blob/main/frontend/js/dashboard.js): `frontend/js/dashboard.js`

### API and identity

- [FastAPI app](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/main.py): `backend/app/main.py`
- [Authentication](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/routers/auth.py): `backend/app/routers/auth.py`

### Academic workflows

- [Assignment tracking](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/assignment_service.py): `backend/app/services/assignment_service.py`
- [Attendance and forecasts](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/attendance_service.py): `backend/app/services/attendance_service.py`
- [Courses and semesters](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/course_service.py): `backend/app/services/course_service.py`
- [Weekly timetable](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/timetable_service.py): `backend/app/services/timetable_service.py`
- [Study history](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/study_service.py): `backend/app/services/study_service.py`
- [SGPA and CGPA](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/cgpa_service.py): `backend/app/services/cgpa_service.py`
- [Dashboard aggregation](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/services/dashboard_service.py): `backend/app/services/dashboard_service.py`

### Persistence and shared logic

- [Domain records](https://github.com/jonathanrodrigues15287/scholaris/tree/main/backend/app/models): `backend/app/models`
- [PostgreSQL access](https://github.com/jonathanrodrigues15287/scholaris/blob/main/backend/app/core/database.py): `backend/app/core/database.py`
- [Validation and helpers](https://github.com/jonathanrodrigues15287/scholaris/tree/main/backend/app/utils): `backend/app/utils`

### Other components

- **Student**

## Connections

- Student → Browser app: uses (evidence: `README.md`)
- Browser app → FastAPI app: API requests
- FastAPI app → Authentication: registers routes (evidence: `backend/app/main.py`)
- FastAPI app → Attendance and forecasts: registers routes (evidence: `backend/app/main.py`)
- FastAPI app → Assignment tracking: registers routes (evidence: `backend/app/main.py`)
- FastAPI app → Weekly timetable: registers routes (evidence: `backend/app/main.py`)
- FastAPI app → Study history: registers routes (evidence: `backend/app/main.py`)
- FastAPI app → SGPA and CGPA: registers routes (evidence: `backend/app/main.py`)
- FastAPI app → Dashboard aggregation: registers routes (evidence: `backend/app/main.py`)
- Authentication → PostgreSQL access: gets sessions (evidence: `backend/app/routers/auth.py`)
- Authentication → Domain records: authenticates users (evidence: `backend/app/routers/auth.py`)
- Authentication → Validation and helpers: normalizes input
- Attendance and forecasts → Domain records: reads and writes (evidence: `backend/app/services/attendance_service.py`)
- Attendance and forecasts → Validation and helpers: validates and pages (evidence: `backend/app/services/attendance_service.py`)
- Assignment tracking → Domain records: reads and writes (evidence: `backend/app/services/assignment_service.py`)
- Assignment tracking → Validation and helpers: validates and pages (evidence: `backend/app/services/assignment_service.py`)
- Weekly timetable → Domain records: reads and writes (evidence: `backend/app/services/timetable_service.py`)
- Study history → Domain records: reads and writes (evidence: `backend/app/services/study_service.py`)
- Dashboard aggregation → Domain records: aggregates records (evidence: `backend/app/services/dashboard_service.py`)
- Dashboard aggregation → Attendance and forecasts: uses attendance logic (evidence: `backend/app/services/dashboard_service.py`)
- SGPA and CGPA → Domain records: calculates grades
- Assignments UI → Browser app: uses API client
- Attendance UI → Browser app: uses API client
- Timetable UI → Browser app: uses API client
- Study timer → Browser app: uses API client
- Grade UI → Browser app: uses API client
- Dashboard UI → Browser app: uses API client
