# aldikurniawan19/dashboard-absesnsi architecture

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

## Overview

This is a role-based school attendance and academic-management web application. Users sign in and enter a dashboard; teachers manage schedules and attendance sessions, while administrators configure school data and schedules and homeroom teachers handle approvals and student reports. The route tree also documents grading, exams, extracurriculars, and attendance reporting. Source excerpts confirm authentication/API calls and schedule-file parsing, but not the wiring of most page workflows or the live-session socket, so those connections are not inferred.

Main entry points: [`src/components/layout/sidebar.tsx`](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/components/layout/sidebar.tsx) (Role navigation), [`src/lib/api.ts`](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/lib/api.ts) (API client), [`src/hooks/use-auth.tsx`](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/hooks/use-auth.tsx) (Auth provider), [`src/app/(dashboard)/page.tsx`](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/page.tsx) (Role dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and navigation"]
  node_login["Login page<br/>[page.tsx]"]
  node_auth["Auth provider<br/>[use-auth.tsx]"]
  node_dashboard["Role dashboard<br/>[page.tsx]"]
  node_nav["Role navigation<br/>[sidebar.tsx]"]
  node_api["API client<br/>[api.ts]"]
end

subgraph group_attendance["Attendance and schedules"]
  node_schedule["Timetable management<br/>[page.tsx]"]
  node_schedule_import["Schedule file parser<br/>[excel-parser.ts]"]
  node_exam["Exam schedules<br/>[page.tsx]"]
  node_teacher_schedule["Teacher timetable<br/>[page.tsx]"]
  node_sessions["Attendance sessions<br/>[page.tsx]"]
  node_manual_attendance["Manual attendance<br/>[page.tsx]"]
  node_live_socket["Session socket hook<br/>[use-sesi-socket.ts]"]
end

subgraph group_academics["Academic management"]
  node_master_data["School master data<br/>[page.tsx]"]
  node_grades["Grade entry<br/>[page.tsx]"]
  node_grade_config["Grade configuration<br/>[page.tsx]"]
  node_extracurricular["Extracurricular grades<br/>[page.tsx]"]
end

subgraph group_oversight["Reports and oversight"]
  node_approvals["Leave approvals<br/>[page.tsx]"]
  node_reports["Attendance reports<br/>[page.tsx]"]
  node_subject_reports["Subject reports<br/>[page.tsx]"]
  node_student_reports["Class and student reports<br/>[page.tsx]"]
  node_audit["Audit log<br/>[page.tsx]"]
  node_school_settings["School settings<br/>[page.tsx]"]
  node_year_settings["Academic year<br/>[page.tsx]"]
end

node_user(("School user"))
node_backend["School API"]

node_user -->|"opens"| node_login
node_login -->|"submits credentials"| node_auth
node_auth -->|"requests authentication"| node_api
node_api -->|"sends requests"| node_backend
node_auth -->|"routes after login"| node_dashboard
node_user -->|"selects role page"| node_nav
node_nav -->|"links to overview"| node_dashboard
node_nav -->|"links to timetable"| node_schedule
node_nav -->|"links to exams"| node_exam
node_nav -->|"links to teacher schedule"| node_teacher_schedule
node_nav -->|"links to attendance"| node_manual_attendance
node_nav -->|"links to master data"| node_master_data
node_nav -->|"links to grade entry"| node_grades
node_nav -->|"links to approvals"| node_approvals
node_nav -->|"links to reports"| node_reports
node_nav -->|"links to subject reports"| node_subject_reports
node_nav -->|"links to student reports"| node_student_reports
node_nav -->|"links to audit"| node_audit
node_schedule -->|"parses schedule file"| node_schedule_import
node_exam -->|"queries and mutates exam data"| node_api
node_audit -->|"queries audit data"| node_api
node_dashboard -->|"shows geofence status"| node_school_settings

click node_login "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(auth)/login/page.tsx"
click node_auth "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/hooks/use-auth.tsx"
click node_dashboard "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/page.tsx"
click node_nav "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/components/layout/sidebar.tsx"
click node_api "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/lib/api.ts"
click node_schedule "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/jadwal/page.tsx"
click node_schedule_import "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/lib/excel-parser.ts"
click node_exam "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/jadwal/ujian/page.tsx"
click node_teacher_schedule "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/guru/jadwal/page.tsx"
click node_sessions "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/guru/sesi/%5Bid%5D/page.tsx"
click node_manual_attendance "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/guru/absensi-manual/page.tsx"
click node_live_socket "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/hooks/use-sesi-socket.ts"
click node_master_data "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/master-data/page.tsx"
click node_grades "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/guru/nilai/%5BkelasId%5D/%5BmapelId%5D/page.tsx"
click node_grade_config "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/penilaian/konfigurasi/page.tsx"
click node_extracurricular "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/penilaian/ekstrakurikuler/page.tsx"
click node_approvals "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/wali-kelas/persetujuan-izin/page.tsx"
click node_reports "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/laporan/kelas/page.tsx"
click node_subject_reports "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/laporan/mapel/page.tsx"
click node_student_reports "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/wali-kelas/raport/page.tsx"
click node_audit "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/audit-log/page.tsx"
click node_school_settings "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/sekolah/page.tsx"
click node_year_settings "https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/tahun-ajaran/page.tsx"

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_login,node_auth,node_dashboard,node_nav,node_api,node_user toneBlue
class node_schedule,node_schedule_import,node_exam,node_teacher_schedule,node_sessions,node_manual_attendance,node_live_socket toneAmber
class node_master_data,node_grades,node_grade_config,node_extracurricular,node_backend toneMint
class node_approvals,node_reports,node_subject_reports,node_student_reports,node_audit,node_school_settings,node_year_settings toneRose
```

## Components

### Identity and navigation

- [Login page](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(auth)/login/page.tsx): `src/app/(auth)/login/page.tsx`
- [Auth provider](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/hooks/use-auth.tsx): `src/hooks/use-auth.tsx`
- [Role dashboard](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/page.tsx): `src/app/(dashboard)/page.tsx`
- [Role navigation](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/components/layout/sidebar.tsx): `src/components/layout/sidebar.tsx`
- [API client](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/lib/api.ts): `src/lib/api.ts`

### Attendance and schedules

- [Timetable management](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/jadwal/page.tsx): `src/app/(dashboard)/admin/jadwal/page.tsx`
- [Schedule file parser](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/lib/excel-parser.ts): `src/lib/excel-parser.ts`
- [Exam schedules](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/jadwal/ujian/page.tsx): `src/app/(dashboard)/admin/jadwal/ujian/page.tsx`
- [Teacher timetable](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/guru/jadwal/page.tsx): `src/app/(dashboard)/guru/jadwal/page.tsx`
- [Attendance sessions](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/guru/sesi/%5Bid%5D/page.tsx): `src/app/(dashboard)/guru/sesi/[id]/page.tsx`
- [Manual attendance](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/guru/absensi-manual/page.tsx): `src/app/(dashboard)/guru/absensi-manual/page.tsx`
- [Session socket hook](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/hooks/use-sesi-socket.ts): `src/hooks/use-sesi-socket.ts`

### Academic management

- [School master data](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/master-data/page.tsx): `src/app/(dashboard)/admin/master-data/page.tsx`
- [Grade entry](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/guru/nilai/%5BkelasId%5D/%5BmapelId%5D/page.tsx): `src/app/(dashboard)/guru/nilai/[kelasId]/[mapelId]/page.tsx`
- [Grade configuration](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/penilaian/konfigurasi/page.tsx): `src/app/(dashboard)/admin/penilaian/konfigurasi/page.tsx`
- [Extracurricular grades](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/penilaian/ekstrakurikuler/page.tsx): `src/app/(dashboard)/admin/penilaian/ekstrakurikuler/page.tsx`

### Reports and oversight

- [Leave approvals](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/wali-kelas/persetujuan-izin/page.tsx): `src/app/(dashboard)/wali-kelas/persetujuan-izin/page.tsx`
- [Attendance reports](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/laporan/kelas/page.tsx): `src/app/(dashboard)/laporan/kelas/page.tsx`
- [Subject reports](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/laporan/mapel/page.tsx): `src/app/(dashboard)/laporan/mapel/page.tsx`
- [Class and student reports](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/wali-kelas/raport/page.tsx): `src/app/(dashboard)/wali-kelas/raport/page.tsx`
- [Audit log](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/audit-log/page.tsx): `src/app/(dashboard)/admin/audit-log/page.tsx`
- [School settings](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/sekolah/page.tsx): `src/app/(dashboard)/admin/sekolah/page.tsx`
- [Academic year](https://github.com/aldikurniawan19/dashboard-absesnsi/blob/main/src/app/(dashboard)/admin/tahun-ajaran/page.tsx): `src/app/(dashboard)/admin/tahun-ajaran/page.tsx`

### Other components

- **School user**
- **School API**

## Connections

- School user → Login page: opens
- Login page → Auth provider: submits credentials
- Auth provider → API client: requests authentication
- API client → School API: sends requests
- Auth provider → Role dashboard: routes after login
- School user → Role navigation: selects role page
- Role navigation → Role dashboard: links to overview
- Role navigation → Timetable management: links to timetable
- Role navigation → Exam schedules: links to exams
- Role navigation → Teacher timetable: links to teacher schedule
- Role navigation → Manual attendance: links to attendance
- Role navigation → School master data: links to master data
- Role navigation → Grade entry: links to grade entry
- Role navigation → Leave approvals: links to approvals
- Role navigation → Attendance reports: links to reports
- Role navigation → Subject reports: links to subject reports
- Role navigation → Class and student reports: links to student reports
- Role navigation → Audit log: links to audit
- Timetable management → Schedule file parser: parses schedule file
- Exam schedules → API client: queries and mutates exam data
- Audit log → API client: queries audit data
- Role dashboard → School settings: shows geofence status
