# trinovaputra/tracking-dash architecture

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

## Overview

This is a Next.js training-management application for participants and administrators. The participant workflow covers registration, training enrollment, attendance check-in/out, and certificates; administrators manage training schedules, participants, attendance, and certificates. The sampled routes show persistence, certificate generation, and file upload/download behavior. Several pages and services are represented from their exact tree paths, but their internal wiring is not asserted because their source was not sampled.

Main entry points: [`server/actions/absensi.ts`](https://github.com/trinovaputra/tracking-dash/blob/main/server/actions/absensi.ts) (Attendance actions), [`lib/prisma.ts`](https://github.com/trinovaputra/tracking-dash/blob/main/lib/prisma.ts) (Application database), [`components/absensi-client.tsx`](https://github.com/trinovaputra/tracking-dash/blob/main/components/absensi-client.tsx) (Attendance reports), [`app/api/pendaftaran/route.ts`](https://github.com/trinovaputra/tracking-dash/blob/main/app/api/pendaftaran/route.ts) (Enrollment API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Application experience"]
  node_user_portal["Participant portal"]
  node_admin_portal["Admin portal"]
  node_auth_ui["Login and registration<br/>[page.tsx]"]
end

subgraph group_training["Training operations"]
  node_course_ops["Training management<br/>[page.tsx]"]
  node_schedule_ops["Schedule management<br/>[page.tsx]"]
  node_enrollment_ui["Enrollment<br/>[page.tsx]"]
  node_attendance_admin["Attendance reports<br/>[absensi-client.tsx]"]
  node_attendance_user["Check-in and out"]
  node_certificate_ui["Certificate management<br/>[page.tsx]"]
end

subgraph group_services["Application services"]
  node_auth_api["Authentication API<br/>[route.ts]"]
  node_register_api["Account registration API<br/>[route.ts]"]
  node_training_api["Training API<br/>[route.ts]"]
  node_schedule_api["Schedule API<br/>[route.ts]"]
  node_enrollment_api["Enrollment API<br/>[route.ts]"]
  node_attendance_actions["Attendance actions<br/>[absensi.ts]"]
  node_certificate_api["Certificate API<br/>[route.ts]"]
  node_upload_api["Document upload API<br/>[route.ts]"]
  node_download_api["File download API<br/>[route.ts]"]
  node_pdf_generator["Certificate PDF generation"]
end

subgraph group_data["Data and integrations"]
  node_database[("Application database<br/>[prisma.ts]")]
  node_sql_pool[("PostgreSQL connection<br/>[db.ts]")]
  node_uploadthing["UploadThing storage<br/>[uploadthing.ts]"]
end

node_participant(("Participant"))
node_admin(("Administrator"))
node_file_host["Remote file host"]

node_participant -->|"starts account access"| node_auth_ui
node_admin -->|"manages operations"| node_admin_portal
node_participant -->|"uses portal"| node_user_portal
node_attendance_admin -->|"requests filtered attendance"| node_attendance_actions
node_attendance_admin -->|"requests statistics"| node_attendance_actions
node_attendance_admin -->|"loads schedules"| node_attendance_actions
node_attendance_user -->|"loads registrations and status"| node_attendance_actions
node_attendance_user -->|"submits check-in/out"| node_attendance_actions
node_register_api -->|"checks and creates user"| node_database
node_training_api -->|"reads active training"| node_database
node_schedule_api -->|"reads and writes schedules"| node_sql_pool
node_enrollment_api -->|"creates enrollment"| node_sql_pool
node_enrollment_api -->|"updates enrollment and certificates"| node_database
node_enrollment_api -->|"generates on passing"| node_pdf_generator
node_certificate_api -->|"reads and updates certificates"| node_database
node_certificate_api -->|"regenerates certificate"| node_pdf_generator
node_pdf_generator -->|"uploads PDF"| node_uploadthing
node_upload_api -->|"uploads document"| node_uploadthing
node_download_api -->|"fetches file"| node_file_host

click node_user_portal "https://github.com/trinovaputra/tracking-dash/tree/main/app/dashboard/user"
click node_admin_portal "https://github.com/trinovaputra/tracking-dash/tree/main/app/dashboard/admin"
click node_auth_ui "https://github.com/trinovaputra/tracking-dash/blob/main/app/login/page.tsx"
click node_course_ops "https://github.com/trinovaputra/tracking-dash/blob/main/app/dashboard/admin/pelatihan/page.tsx"
click node_schedule_ops "https://github.com/trinovaputra/tracking-dash/blob/main/app/dashboard/admin/jadwal/page.tsx"
click node_enrollment_ui "https://github.com/trinovaputra/tracking-dash/blob/main/app/dashboard/user/pendaftaran/page.tsx"
click node_attendance_admin "https://github.com/trinovaputra/tracking-dash/blob/main/components/absensi-client.tsx"
click node_attendance_user "https://github.com/trinovaputra/tracking-dash/blob/main/components/user-absensi-client.tsx"
click node_certificate_ui "https://github.com/trinovaputra/tracking-dash/blob/main/app/dashboard/admin/sertifikat/page.tsx"
click node_auth_api "https://github.com/trinovaputra/tracking-dash/blob/main/app/api/auth/%5B...nextauth%5D/route.ts"
click node_register_api "https://github.com/trinovaputra/tracking-dash/blob/main/app/api/register/route.ts"
click node_training_api "https://github.com/trinovaputra/tracking-dash/blob/main/app/api/pelatihan/route.ts"
click node_schedule_api "https://github.com/trinovaputra/tracking-dash/blob/main/app/api/jadwal/route.ts"
click node_enrollment_api "https://github.com/trinovaputra/tracking-dash/blob/main/app/api/pendaftaran/route.ts"
click node_attendance_actions "https://github.com/trinovaputra/tracking-dash/blob/main/server/actions/absensi.ts"
click node_certificate_api "https://github.com/trinovaputra/tracking-dash/blob/main/app/api/sertifikat/%5Bid%5D/route.ts"
click node_upload_api "https://github.com/trinovaputra/tracking-dash/blob/main/app/api/pendaftaran/upload/route.ts"
click node_download_api "https://github.com/trinovaputra/tracking-dash/blob/main/app/api/download/route.ts"
click node_pdf_generator "https://github.com/trinovaputra/tracking-dash/blob/main/lib/generateSertifikat.ts"
click node_database "https://github.com/trinovaputra/tracking-dash/blob/main/lib/prisma.ts"
click node_sql_pool "https://github.com/trinovaputra/tracking-dash/blob/main/lib/db.ts"
click node_uploadthing "https://github.com/trinovaputra/tracking-dash/blob/main/lib/uploadthing.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_user_portal,node_admin_portal,node_auth_ui toneBlue
class node_course_ops,node_schedule_ops,node_enrollment_ui,node_attendance_admin,node_attendance_user,node_certificate_ui toneAmber
class node_auth_api,node_register_api,node_training_api,node_schedule_api,node_enrollment_api,node_attendance_actions,node_certificate_api,node_upload_api,node_download_api,node_pdf_generator toneMint
class node_database,node_sql_pool,node_uploadthing toneRose
class node_participant,node_admin,node_file_host toneIndigo
```

## Components

### Application experience

- [Participant portal](https://github.com/trinovaputra/tracking-dash/tree/main/app/dashboard/user): `app/dashboard/user`
- [Admin portal](https://github.com/trinovaputra/tracking-dash/tree/main/app/dashboard/admin): `app/dashboard/admin`
- [Login and registration](https://github.com/trinovaputra/tracking-dash/blob/main/app/login/page.tsx): `app/login/page.tsx`

### Training operations

- [Training management](https://github.com/trinovaputra/tracking-dash/blob/main/app/dashboard/admin/pelatihan/page.tsx): `app/dashboard/admin/pelatihan/page.tsx`
- [Schedule management](https://github.com/trinovaputra/tracking-dash/blob/main/app/dashboard/admin/jadwal/page.tsx): `app/dashboard/admin/jadwal/page.tsx`
- [Enrollment](https://github.com/trinovaputra/tracking-dash/blob/main/app/dashboard/user/pendaftaran/page.tsx): `app/dashboard/user/pendaftaran/page.tsx`
- [Attendance reports](https://github.com/trinovaputra/tracking-dash/blob/main/components/absensi-client.tsx): `components/absensi-client.tsx`
- [Check-in and out](https://github.com/trinovaputra/tracking-dash/blob/main/components/user-absensi-client.tsx): `components/user-absensi-client.tsx`
- [Certificate management](https://github.com/trinovaputra/tracking-dash/blob/main/app/dashboard/admin/sertifikat/page.tsx): `app/dashboard/admin/sertifikat/page.tsx`

### Application services

- [Authentication API](https://github.com/trinovaputra/tracking-dash/blob/main/app/api/auth/%5B...nextauth%5D/route.ts): `app/api/auth/[...nextauth]/route.ts`
- [Account registration API](https://github.com/trinovaputra/tracking-dash/blob/main/app/api/register/route.ts): `app/api/register/route.ts`
- [Training API](https://github.com/trinovaputra/tracking-dash/blob/main/app/api/pelatihan/route.ts): `app/api/pelatihan/route.ts`
- [Schedule API](https://github.com/trinovaputra/tracking-dash/blob/main/app/api/jadwal/route.ts): `app/api/jadwal/route.ts`
- [Enrollment API](https://github.com/trinovaputra/tracking-dash/blob/main/app/api/pendaftaran/route.ts): `app/api/pendaftaran/route.ts`
- [Attendance actions](https://github.com/trinovaputra/tracking-dash/blob/main/server/actions/absensi.ts): `server/actions/absensi.ts`
- [Certificate API](https://github.com/trinovaputra/tracking-dash/blob/main/app/api/sertifikat/%5Bid%5D/route.ts): `app/api/sertifikat/[id]/route.ts`
- [Document upload API](https://github.com/trinovaputra/tracking-dash/blob/main/app/api/pendaftaran/upload/route.ts): `app/api/pendaftaran/upload/route.ts`
- [File download API](https://github.com/trinovaputra/tracking-dash/blob/main/app/api/download/route.ts): `app/api/download/route.ts`
- [Certificate PDF generation](https://github.com/trinovaputra/tracking-dash/blob/main/lib/generateSertifikat.ts): `lib/generateSertifikat.ts`

### Data and integrations

- [Application database](https://github.com/trinovaputra/tracking-dash/blob/main/lib/prisma.ts): `lib/prisma.ts`
- [PostgreSQL connection](https://github.com/trinovaputra/tracking-dash/blob/main/lib/db.ts): `lib/db.ts`
- [UploadThing storage](https://github.com/trinovaputra/tracking-dash/blob/main/lib/uploadthing.ts): `lib/uploadthing.ts`

### Other components

- **Participant**
- **Administrator**
- **Remote file host**

## Connections

- Participant → Login and registration: starts account access
- Administrator → Admin portal: manages operations
- Participant → Participant portal: uses portal
- Attendance reports → Attendance actions: requests filtered attendance
- Attendance reports → Attendance actions: requests statistics
- Attendance reports → Attendance actions: loads schedules
- Check-in and out → Attendance actions: loads registrations and status
- Check-in and out → Attendance actions: submits check-in/out
- Account registration API → Application database: checks and creates user
- Training API → Application database: reads active training
- Schedule API → PostgreSQL connection: reads and writes schedules
- Enrollment API → PostgreSQL connection: creates enrollment
- Enrollment API → Application database: updates enrollment and certificates
- Enrollment API → Certificate PDF generation: generates on passing
- Certificate API → Application database: reads and updates certificates
- Certificate API → Certificate PDF generation: regenerates certificate
- Certificate PDF generation → UploadThing storage: uploads PDF
- Document upload API → UploadThing storage: uploads document
- File download API → Remote file host: fetches file
