# ivankazzzz/unes-hebat architecture

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

- Interactive diagram: https://gitdiagram.com/ivankazzzz/unes-hebat
- Repository: https://github.com/ivankazzzz/unes-hebat

## Overview

UNES-Hebat is a university attendance-management application for structural lecturers and support staff, delivered as a web app and Capacitor mobile app. The main workflow is user sign-in, attendance clock-in/out with GPS, photo evidence and server-time validation, followed by stored attendance and optional Telegram notification. Separate workflows cover leave approvals, work schedules and holidays, user/access administration, dashboards and PDF reports. The graph follows documented capabilities and sampled entry points; many page implementations were not sampled, so uncertain page-to-service wiring is omitted.

Main entry points: [`src/lib/supabase.ts`](https://github.com/ivankazzzz/unes-hebat/blob/main/src/lib/supabase.ts) (Supabase client), [`src/App.tsx`](https://github.com/ivankazzzz/unes-hebat/blob/main/src/App.tsx) (App routes), [`src/pages/Attendance.tsx`](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/Attendance.tsx) (Clock in/out), [`src/pages/AttendanceKKN.tsx`](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/AttendanceKKN.tsx) (KKN attendance)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application entry"]
  node_app["App routes<br/>[App.tsx]"]
  node_login["Login<br/>[Login.tsx]"]
  node_auth["Custom auth<br/>[auth.ts]"]
end

subgraph group_attendance["Attendance workflow"]
  node_attendance_page["Clock in/out<br/>[Attendance.tsx]"]
  node_kkn_page["KKN attendance<br/>[AttendanceKKN.tsx]"]
  node_locations["Attendance points<br/>[TitikAbsensi.tsx]"]
  node_supabase_client["Supabase client<br/>[supabase.ts]"]
  node_telegram_api["Telegram endpoint"]
end

subgraph group_operations["Administration"]
  node_leave_user["Leave requests<br/>[IzinCutiUser.tsx]"]
  node_leave_admin["Leave approvals<br/>[KelolaIzinCuti.tsx]"]
  node_schedule["Work schedules<br/>[JamKerja.tsx]"]
  node_holidays["Holiday calendar<br/>[HariLibur.tsx]"]
  node_user_admin["User management<br/>[UserManagement.tsx]"]
  node_user_hook["User data operations"]
  node_access["Access revocation<br/>[RevokeAkses.tsx]"]
end

subgraph group_insights["Reports and insights"]
  node_dashboard["Dashboard and map<br/>[Index.tsx]"]
  node_history["Attendance history<br/>[History.tsx]"]
  node_reports["Attendance reports<br/>[Rekap.tsx]"]
  node_pdf["PDF generation<br/>[pdf-generator.ts]"]
end

node_staff(("Staff user"))
node_admin_actor(("Administrator"))
node_supabase[("Supabase")]
node_storage[("Supabase Storage")]
node_telegram["Telegram"]

node_staff -->|"opens"| node_app
node_admin_actor -->|"opens"| node_app
node_app -->|"routes"| node_login
node_app -->|"routes"| node_attendance_page
node_app -->|"routes"| node_kkn_page
node_app -->|"routes"| node_dashboard
node_app -->|"routes"| node_reports
node_login -->|"verifies credentials"| node_auth
node_auth -->|"calls RPC"| node_supabase_client
node_supabase_client -->|"queries"| node_supabase
node_attendance_page -->|"submits attendance"| node_supabase_client
node_kkn_page -->|"submits attendance"| node_supabase_client
node_attendance_page -->|"stores photo"| node_storage
node_kkn_page -->|"stores photo"| node_storage
node_attendance_page -.->|"sends evidence"| node_telegram_api
node_kkn_page -.->|"sends evidence"| node_telegram_api
node_telegram_api -->|"sends photo"| node_telegram
node_leave_user -->|"submits request"| node_supabase_client
node_leave_admin -->|"updates approval"| node_supabase_client
node_schedule -->|"updates schedules"| node_supabase_client
node_holidays -->|"updates holidays"| node_supabase_client
node_user_admin -->|"manages users"| node_user_hook
node_user_hook -->|"calls user RPCs"| node_supabase_client
node_access -->|"updates access"| node_supabase_client
node_dashboard -->|"loads data"| node_supabase_client
node_history -->|"loads records"| node_supabase_client
node_reports -->|"loads records"| node_supabase_client
node_reports -->|"generates PDF"| node_pdf

click node_app "https://github.com/ivankazzzz/unes-hebat/blob/main/src/App.tsx"
click node_login "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/Login.tsx"
click node_auth "https://github.com/ivankazzzz/unes-hebat/blob/main/src/lib/auth.ts"
click node_attendance_page "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/Attendance.tsx"
click node_kkn_page "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/AttendanceKKN.tsx"
click node_locations "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/TitikAbsensi.tsx"
click node_supabase_client "https://github.com/ivankazzzz/unes-hebat/blob/main/src/lib/supabase.ts"
click node_telegram_api "https://github.com/ivankazzzz/unes-hebat/blob/main/api/telegram-evidence.ts"
click node_leave_user "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/IzinCutiUser.tsx"
click node_leave_admin "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/KelolaIzinCuti.tsx"
click node_schedule "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/JamKerja.tsx"
click node_holidays "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/HariLibur.tsx"
click node_user_admin "https://github.com/ivankazzzz/unes-hebat/blob/main/src/components/UserManagement.tsx"
click node_user_hook "https://github.com/ivankazzzz/unes-hebat/blob/main/src/hooks/use-user-management.tsx"
click node_access "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/RevokeAkses.tsx"
click node_dashboard "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/Index.tsx"
click node_history "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/History.tsx"
click node_reports "https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/Rekap.tsx"
click node_pdf "https://github.com/ivankazzzz/unes-hebat/blob/main/src/lib/pdf-generator.ts"

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_login,node_auth,node_staff toneBlue
class node_attendance_page,node_kkn_page,node_locations,node_supabase_client,node_telegram_api,node_supabase,node_storage toneAmber
class node_leave_user,node_leave_admin,node_schedule,node_holidays,node_user_admin,node_user_hook,node_access toneMint
class node_dashboard,node_history,node_reports,node_pdf toneRose
class node_admin_actor,node_telegram toneIndigo
```

## Components

### Application entry

- [App routes](https://github.com/ivankazzzz/unes-hebat/blob/main/src/App.tsx): `src/App.tsx`
- [Login](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/Login.tsx): `src/pages/Login.tsx`
- [Custom auth](https://github.com/ivankazzzz/unes-hebat/blob/main/src/lib/auth.ts): `src/lib/auth.ts`

### Attendance workflow

- [Clock in/out](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/Attendance.tsx): `src/pages/Attendance.tsx`
- [KKN attendance](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/AttendanceKKN.tsx): `src/pages/AttendanceKKN.tsx`
- [Attendance points](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/TitikAbsensi.tsx): `src/pages/TitikAbsensi.tsx`
- [Supabase client](https://github.com/ivankazzzz/unes-hebat/blob/main/src/lib/supabase.ts): `src/lib/supabase.ts`
- [Telegram endpoint](https://github.com/ivankazzzz/unes-hebat/blob/main/api/telegram-evidence.ts): `api/telegram-evidence.ts`

### Administration

- [Leave requests](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/IzinCutiUser.tsx): `src/pages/IzinCutiUser.tsx`
- [Leave approvals](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/KelolaIzinCuti.tsx): `src/pages/KelolaIzinCuti.tsx`
- [Work schedules](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/JamKerja.tsx): `src/pages/JamKerja.tsx`
- [Holiday calendar](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/HariLibur.tsx): `src/pages/HariLibur.tsx`
- [User management](https://github.com/ivankazzzz/unes-hebat/blob/main/src/components/UserManagement.tsx): `src/components/UserManagement.tsx`
- [User data operations](https://github.com/ivankazzzz/unes-hebat/blob/main/src/hooks/use-user-management.tsx): `src/hooks/use-user-management.tsx`
- [Access revocation](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/RevokeAkses.tsx): `src/pages/RevokeAkses.tsx`

### Reports and insights

- [Dashboard and map](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/Index.tsx): `src/pages/Index.tsx`
- [Attendance history](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/History.tsx): `src/pages/History.tsx`
- [Attendance reports](https://github.com/ivankazzzz/unes-hebat/blob/main/src/pages/Rekap.tsx): `src/pages/Rekap.tsx`
- [PDF generation](https://github.com/ivankazzzz/unes-hebat/blob/main/src/lib/pdf-generator.ts): `src/lib/pdf-generator.ts`

### Other components

- **Staff user**
- **Administrator**
- **Supabase**
- **Supabase Storage**
- **Telegram**

## Connections

- Staff user → App routes: opens
- Administrator → App routes: opens
- App routes → Login: routes
- App routes → Clock in/out: routes
- App routes → KKN attendance: routes
- App routes → Dashboard and map: routes
- App routes → Attendance reports: routes
- Login → Custom auth: verifies credentials
- Custom auth → Supabase client: calls RPC
- Supabase client → Supabase: queries
- Clock in/out → Supabase client: submits attendance
- KKN attendance → Supabase client: submits attendance
- Clock in/out → Supabase Storage: stores photo
- KKN attendance → Supabase Storage: stores photo
- Clock in/out → Telegram endpoint: sends evidence
- KKN attendance → Telegram endpoint: sends evidence
- Telegram endpoint → Telegram: sends photo
- Leave requests → Supabase client: submits request
- Leave approvals → Supabase client: updates approval
- Work schedules → Supabase client: updates schedules
- Holiday calendar → Supabase client: updates holidays
- User management → User data operations: manages users
- User data operations → Supabase client: calls user RPCs
- Access revocation → Supabase client: updates access
- Dashboard and map → Supabase client: loads data
- Attendance history → Supabase client: loads records
- Attendance reports → Supabase client: loads records
- Attendance reports → PDF generation: generates PDF
