# jidd26/website-kelas-d-sisteminformasi architecture

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

- Interactive diagram: https://gitdiagram.com/jidd26/website-kelas-d-sisteminformasi
- Repository: https://github.com/jidd26/website-kelas-d-sisteminformasi

## Overview

Kelas D is a class community portal with student and lecturer attendance features alongside schedules, class structure, and activity documentation. The main attendance flow is student login, dashboard review, QR scanning, and server-side attendance validation and recording; lecturer dashboard and QR-generation routes represent the session-management side. The sampled dashboard calls the attendance-list endpoint, and the attendance endpoint persists through Prisma. Several pages and routes are unsampled, so their internal interactions are omitted or shown as unverified rather than inferred.

Main entry points: [`lib/prisma.ts`](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/lib/prisma.ts) (Prisma Client), [`app/page.tsx`](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/page.tsx) (Home), [`app/mahasiswa/dashboard/page.tsx`](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/mahasiswa/dashboard/page.tsx) (Student Dashboard), [`app/api/absen/route.ts`](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/absen/route.ts) (Attendance Submission)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_community["Class Portal"]
  node_home["Home<br/>[page.tsx]"]
  node_navigation["Navigation<br/>[Navbar.tsx]"]
  node_class_schedule["Class Schedule<br/>[page.tsx]"]
  node_schedule_data["Schedule Data<br/>[jadwal.json]"]
  node_documentation["Activity Documentation<br/>[page.tsx]"]
  node_documentation_data["Documentation Data<br/>[dokumentasi.json]"]
  node_class_structure["Class Structure<br/>[page.tsx]"]
  node_structure_data["Structure Data<br/>[struktur.json]"]
  node_member_data["Member Directory Data<br/>[anggota.json]"]
  node_count_hook["Count Animation Hook<br/>[useCountUp.ts]"]
  node_typing_hook["Typing Animation Hook<br/>[useTyping.ts]"]
  node_splash["Splash Screen<br/>[SplashScreen.tsx]"]
  node_carousel["Activity Carousel<br/>[ScrollCarousel.tsx]"]
  node_layout["App Layout<br/>[layout.tsx]"]
end

subgraph group_student["Student Experience"]
  node_student_login["Student Login<br/>[page.tsx]"]
  node_student_dashboard["Student Dashboard<br/>[page.tsx]"]
  node_map_view["Campus Map<br/>[MapView.tsx]"]
  node_qr_scan["QR Scan<br/>[page.tsx]"]
  node_auth_page["Authentication Page<br/>[page.tsx]"]
end

subgraph group_lecturer["Lecturer Tools"]
  node_lecturer_dashboard["Lecturer Dashboard<br/>[page.tsx]"]
  node_lecturer_qr["Lecturer QR<br/>[page.tsx]"]
end

subgraph group_api["Application API"]
  node_login_api["Student Login API<br/>[route.ts]"]
  node_lecturer_login_api["Lecturer Login API<br/>[route.ts]"]
  node_attendance_api["Attendance Submission<br/>[route.ts]"]
  node_attendance_list_api["Attendance List<br/>[route.ts]"]
  node_active_session_api["Active Session<br/>[route.ts]"]
  node_meeting_api["Meeting Generation<br/>[route.ts]"]
  node_qr_api["QR Generation API<br/>[route.ts]"]
end

subgraph group_data["Data Layer"]
  node_prisma_client["Prisma Client<br/>[prisma.ts]"]
  node_database_schema["Database Schema<br/>[schema.prisma]"]
end

node_visitor(("Visitor"))
node_student_actor(("Student"))
node_lecturer_actor(("Lecturer"))

node_visitor -.->|"opens"| node_home
node_student_actor -.->|"signs in"| node_student_login
node_student_actor -.->|"views"| node_student_dashboard
node_student_actor -.->|"scans QR"| node_qr_scan
node_lecturer_actor -.->|"manages class"| node_lecturer_dashboard
node_home -->|"uses"| node_count_hook
node_home -->|"uses"| node_typing_hook
node_home -->|"renders"| node_splash
node_home -->|"renders"| node_carousel
node_layout -->|"renders"| node_navigation
node_class_schedule -->|"reads"| node_schedule_data
node_documentation -->|"filters"| node_documentation_data
node_class_structure -->|"reads"| node_structure_data
node_class_structure -->|"filters"| node_member_data
node_student_dashboard -->|"reads"| node_schedule_data
node_student_dashboard -->|"renders"| node_map_view
node_student_dashboard -->|"fetches"| node_attendance_list_api
node_student_login -.->|"submits to"| node_login_api
node_qr_scan -.->|"submits attendance"| node_attendance_api
node_lecturer_qr -.->|"requests QR"| node_qr_api
node_login_api -->|"queries"| node_prisma_client
node_lecturer_login_api -->|"queries"| node_prisma_client
node_attendance_api -->|"checks and records"| node_prisma_client
node_attendance_list_api -->|"queries"| node_prisma_client
node_active_session_api -->|"queries"| node_prisma_client
node_active_session_api -->|"matches schedule"| node_schedule_data
node_meeting_api -->|"uses"| node_prisma_client
node_attendance_api -.->|"persists attendance"| node_database_schema

click node_home "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/page.tsx"
click node_navigation "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/components/Navbar.tsx"
click node_class_schedule "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/jadwal/page.tsx"
click node_schedule_data "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/data/jadwal.json"
click node_documentation "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/dokumentasi/page.tsx"
click node_documentation_data "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/data/dokumentasi.json"
click node_class_structure "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/struktur/page.tsx"
click node_structure_data "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/data/struktur.json"
click node_member_data "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/data/anggota.json"
click node_student_login "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/login/page.tsx"
click node_student_dashboard "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/mahasiswa/dashboard/page.tsx"
click node_map_view "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/components/MapView.tsx"
click node_qr_scan "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/mahasiswa/scan/page.tsx"
click node_lecturer_dashboard "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/dosen/dashboard/page.tsx"
click node_lecturer_qr "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/dosen/qr/page.tsx"
click node_login_api "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/login/route.ts"
click node_lecturer_login_api "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/dosen/login/route.ts"
click node_attendance_api "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/absen/route.ts"
click node_attendance_list_api "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/absen/list/route.ts"
click node_active_session_api "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/session/active/route.ts"
click node_meeting_api "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/pertemuan/generate/route.ts"
click node_qr_api "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/qr/generate/route.ts"
click node_prisma_client "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/lib/prisma.ts"
click node_database_schema "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/prisma/schema.prisma"
click node_count_hook "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/hooks/useCountUp.ts"
click node_typing_hook "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/hooks/useTyping.ts"
click node_splash "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/components/SplashScreen.tsx"
click node_carousel "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/components/ScrollCarousel.tsx"
click node_layout "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/layout.tsx"
click node_auth_page "https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/auth/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_home,node_navigation,node_class_schedule,node_schedule_data,node_documentation,node_documentation_data,node_class_structure,node_structure_data,node_member_data,node_count_hook,node_typing_hook,node_splash,node_carousel,node_layout toneBlue
class node_student_login,node_student_dashboard,node_map_view,node_qr_scan,node_auth_page toneAmber
class node_lecturer_dashboard,node_lecturer_qr toneMint
class node_login_api,node_lecturer_login_api,node_attendance_api,node_attendance_list_api,node_active_session_api,node_meeting_api,node_qr_api toneRose
class node_prisma_client,node_database_schema,node_visitor,node_student_actor,node_lecturer_actor toneIndigo
```

## Components

### Class Portal

- [Home](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/page.tsx): `app/page.tsx`
- [Navigation](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/components/Navbar.tsx): `app/components/Navbar.tsx`
- [Class Schedule](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/jadwal/page.tsx): `app/jadwal/page.tsx`
- [Schedule Data](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/data/jadwal.json): `app/data/jadwal.json`
- [Activity Documentation](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/dokumentasi/page.tsx): `app/dokumentasi/page.tsx`
- [Documentation Data](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/data/dokumentasi.json): `app/data/dokumentasi.json`
- [Class Structure](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/struktur/page.tsx): `app/struktur/page.tsx`
- [Structure Data](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/data/struktur.json): `app/data/struktur.json`
- [Member Directory Data](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/data/anggota.json): `app/data/anggota.json`
- [Count Animation Hook](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/hooks/useCountUp.ts): `app/hooks/useCountUp.ts`
- [Typing Animation Hook](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/hooks/useTyping.ts): `app/hooks/useTyping.ts`
- [Splash Screen](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/components/SplashScreen.tsx): `app/components/SplashScreen.tsx`
- [Activity Carousel](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/components/ScrollCarousel.tsx): `app/components/ScrollCarousel.tsx`
- [App Layout](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/layout.tsx): `app/layout.tsx`

### Student Experience

- [Student Login](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/login/page.tsx): `app/login/page.tsx`
- [Student Dashboard](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/mahasiswa/dashboard/page.tsx): `app/mahasiswa/dashboard/page.tsx`
- [Campus Map](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/components/MapView.tsx): `app/components/MapView.tsx`
- [QR Scan](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/mahasiswa/scan/page.tsx): `app/mahasiswa/scan/page.tsx`
- [Authentication Page](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/auth/page.tsx): `app/api/auth/page.tsx`

### Lecturer Tools

- [Lecturer Dashboard](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/dosen/dashboard/page.tsx): `app/dosen/dashboard/page.tsx`
- [Lecturer QR](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/dosen/qr/page.tsx): `app/dosen/qr/page.tsx`

### Application API

- [Student Login API](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/login/route.ts): `app/api/login/route.ts`
- [Lecturer Login API](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/dosen/login/route.ts): `app/api/dosen/login/route.ts`
- [Attendance Submission](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/absen/route.ts): `app/api/absen/route.ts`
- [Attendance List](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/absen/list/route.ts): `app/api/absen/list/route.ts`
- [Active Session](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/session/active/route.ts): `app/api/session/active/route.ts`
- [Meeting Generation](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/pertemuan/generate/route.ts): `app/api/pertemuan/generate/route.ts`
- [QR Generation API](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/app/api/qr/generate/route.ts): `app/api/qr/generate/route.ts`

### Data Layer

- [Prisma Client](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/lib/prisma.ts): `lib/prisma.ts`
- [Database Schema](https://github.com/jidd26/website-kelas-d-sisteminformasi/blob/main/prisma/schema.prisma): `prisma/schema.prisma`

### Other components

- **Visitor**
- **Student**
- **Lecturer**

## Connections

- Visitor → Home: opens
- Student → Student Login: signs in
- Student → Student Dashboard: views
- Student → QR Scan: scans QR
- Lecturer → Lecturer Dashboard: manages class
- Home → Count Animation Hook: uses (evidence: `app/page.tsx`)
- Home → Typing Animation Hook: uses (evidence: `app/page.tsx`)
- Home → Splash Screen: renders (evidence: `app/page.tsx`)
- Home → Activity Carousel: renders (evidence: `app/page.tsx`)
- App Layout → Navigation: renders (evidence: `app/layout.tsx`)
- Class Schedule → Schedule Data: reads (evidence: `app/jadwal/page.tsx`)
- Activity Documentation → Documentation Data: filters (evidence: `app/dokumentasi/page.tsx`)
- Class Structure → Structure Data: reads (evidence: `app/struktur/page.tsx`)
- Class Structure → Member Directory Data: filters (evidence: `app/struktur/page.tsx`)
- Student Dashboard → Schedule Data: reads (evidence: `app/mahasiswa/dashboard/page.tsx`)
- Student Dashboard → Campus Map: renders (evidence: `app/mahasiswa/dashboard/page.tsx`)
- Student Dashboard → Attendance List: fetches (evidence: `app/mahasiswa/dashboard/page.tsx`)
- Student Login → Student Login API: submits to
- QR Scan → Attendance Submission: submits attendance
- Lecturer QR → QR Generation API: requests QR
- Student Login API → Prisma Client: queries (evidence: `app/api/login/route.ts`)
- Lecturer Login API → Prisma Client: queries (evidence: `app/api/dosen/login/route.ts`)
- Attendance Submission → Prisma Client: checks and records (evidence: `app/api/absen/route.ts`)
- Attendance List → Prisma Client: queries (evidence: `app/api/absen/list/route.ts`)
- Active Session → Prisma Client: queries (evidence: `app/api/session/active/route.ts`)
- Active Session → Schedule Data: matches schedule (evidence: `app/api/session/active/route.ts`)
- Meeting Generation → Prisma Client: uses (evidence: `app/api/pertemuan/generate/route.ts`)
- Attendance Submission → Database Schema: persists attendance
