# alfitosantosa/lms-sera-app architecture

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

- Interactive diagram: https://gitdiagram.com/alfitosantosa/lms-sera-app
- Repository: https://github.com/alfitosantosa/lms-sera-app

## Overview

This is a multi-tenant school-management LMS. The main workflow is staff, students, and administrators using role-specific dashboard pages to manage academic and school records; frontend hooks connect those pages to API routes, which enforce foundation tenancy and persist data through Prisma. Finance, attendance, scheduling, Tahfidz, and discipline are distinct product domains. The README documents reporting, exports, WhatsApp messaging, and Midtrans; their wiring is shown only at the level supported by the tree and documentation, since those implementations were not sampled.

Main entry points: [`app/(hooks)/hooks/Attendances/useAttendance.ts`](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(hooks)/hooks/Attendances/useAttendance.ts) (Data hooks), [`lib/prisma.ts`](https://github.com/alfitosantosa/lms-sera-app/blob/main/lib/prisma.ts) (Prisma data access), [`lib/tenant.ts`](https://github.com/alfitosantosa/lms-sera-app/blob/main/lib/tenant.ts) (Tenant resolution), [`app/(frontend)/(dashboard)/dashboard/page.tsx`](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/page.tsx) (Role dashboards)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_dashboard["Role dashboards<br/>[page.tsx]"]
  node_adminui["Admin workspace<br/>[page.tsx]"]
  node_studentui["Student workspace<br/>[page.tsx]"]
  node_teacherui["Teacher workspace<br/>[page.tsx]"]
  node_hooks["Data hooks<br/>[useAttendance.ts]"]
end

subgraph group_identity["Identity and tenancy"]
  node_authui["Sign-in and sign-up<br/>[page.tsx]"]
  node_authapi["Authentication API<br/>[route.ts]"]
  node_authconfig["Auth client<br/>[authClients.ts]"]
  node_userdataapi["User records API<br/>[route.ts]"]
  node_tenant["Tenant resolution<br/>[tenant.ts]"]
end

subgraph group_academics["Academic operations"]
  node_academicui["Academic workspace<br/>[page.tsx]"]
  node_scheduleapi["Schedules API<br/>[route.ts]"]
  node_tahfidzapi["Tahfidz records API<br/>[route.ts]"]
end

subgraph group_schoolops["School operations"]
  node_attendanceui["Attendance workspace<br/>[page.tsx]"]
  node_attendanceapi["Attendance API<br/>[route.ts]"]
  node_teacherattendance["Teacher attendance API<br/>[route.ts]"]
  node_violationsui["Discipline workspace<br/>[page.tsx]"]
  node_violationsapi["Violations API<br/>[route.ts]"]
  node_whatsappapi["WhatsApp messaging API<br/>[route.ts]"]
end

subgraph group_finance["Finance and reporting"]
  node_paymentui["Payment workspace<br/>[page.tsx]"]
  node_billingui["Billing workspace<br/>[page.tsx]"]
  node_paymentapi["Payments API<br/>[route.ts]"]
  node_paymenttypeapi["Payment types API<br/>[route.ts]"]
  node_bankchartapi["Finance analytics API<br/>[route.ts]"]
  node_exports["Finance exports<br/>[exportBilling.ts]"]
  node_midtransapi["Midtrans API<br/>[route.ts]"]
end

node_users(("School users"))
node_midtrans{{"Midtrans gateway"}}
node_whatsapp{{"WhatsApp service"}}
node_prisma["Prisma data access<br/>[prisma.ts]"]
node_database[("PostgreSQL")]

node_users -->|"use dashboards"| node_dashboard
node_users -->|"sign in"| node_authui
node_authui -->|"uses client"| node_authconfig
node_authconfig -->|"auth requests"| node_authapi
node_dashboard -->|"opens"| node_adminui
node_dashboard -->|"opens"| node_studentui
node_dashboard -->|"opens"| node_teacherui
node_adminui -->|"fetches data"| node_hooks
node_studentui -->|"fetches data"| node_hooks
node_teacherui -->|"fetches data"| node_hooks
node_academicui -->|"fetches data"| node_hooks
node_attendanceui -->|"fetches data"| node_hooks
node_hooks -->|"API requests"| node_attendanceapi
node_hooks -->|"API requests"| node_scheduleapi
node_hooks -->|"API requests"| node_tahfidzapi
node_hooks -->|"API requests"| node_userdataapi
node_paymentui -->|"fetches data"| node_hooks
node_billingui -->|"fetches data"| node_hooks
node_hooks -->|"API requests"| node_paymentapi
node_hooks -->|"API requests"| node_paymenttypeapi
node_hooks -->|"API requests"| node_bankchartapi
node_violationsui -->|"fetches data"| node_hooks
node_hooks -->|"API requests"| node_violationsapi
node_attendanceui -->|"attendance requests"| node_teacherattendance
node_attendanceapi -->|"resolves foundation"| node_tenant
node_teacherattendance -->|"resolves foundation"| node_tenant
node_violationsapi -->|"resolves foundation"| node_tenant
node_paymentapi -->|"resolves foundation"| node_tenant
node_paymenttypeapi -->|"resolves foundation"| node_tenant
node_scheduleapi -->|"resolves foundation"| node_tenant
node_userdataapi -->|"resolves foundation"| node_tenant
node_attendanceapi -->|"reads and writes"| node_prisma
node_teacherattendance -->|"reads and writes"| node_prisma
node_violationsapi -->|"reads and writes"| node_prisma
node_paymentapi -->|"reads and writes"| node_prisma
node_paymenttypeapi -->|"reads and writes"| node_prisma
node_scheduleapi -->|"reads and writes"| node_prisma
node_tahfidzapi -->|"record access"| node_prisma
node_userdataapi -->|"reads and writes"| node_prisma
node_bankchartapi -->|"queries data"| node_prisma
node_prisma -->|"database access"| node_database
node_billingui -->|"exports billing"| node_exports
node_paymentapi -.->|"payment flow"| node_midtransapi
node_midtransapi -.->|"gateway requests"| node_midtrans
node_whatsappapi -.->|"sends messages"| node_whatsapp

click node_dashboard "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/page.tsx"
click node_adminui "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/admin/master/users/page.tsx"
click node_studentui "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/student/attendance/page.tsx"
click node_teacherui "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/teacher/attendance/%5Bid%5D/page.tsx"
click node_hooks "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(hooks)/hooks/Attendances/useAttendance.ts"
click node_authui "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(auth)/auth/sign-in/page.tsx"
click node_authapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/auth/%5B...all%5D/route.ts"
click node_authconfig "https://github.com/alfitosantosa/lms-sera-app/blob/main/lib/authClients.ts"
click node_userdataapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/userdata/route.ts"
click node_tenant "https://github.com/alfitosantosa/lms-sera-app/blob/main/lib/tenant.ts"
click node_academicui "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/admin/academic/schedules/page.tsx"
click node_scheduleapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/schedules/route.ts"
click node_tahfidzapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/tahfidzrecord/route.ts"
click node_attendanceui "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/attendance/page.tsx"
click node_attendanceapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/attendance/route.ts"
click node_teacherattendance "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/teacherattendance/route.ts"
click node_violationsui "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/violations/page.tsx"
click node_violationsapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/violations/route.ts"
click node_paymentui "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/payments/page.tsx"
click node_billingui "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/admin/finance/billing/page.tsx"
click node_paymentapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/payment/route.ts"
click node_paymenttypeapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/paymenttype/route.ts"
click node_bankchartapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/accountbank/chart/route.ts"
click node_exports "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(action)/createExcel/paymentItems/exportBilling.ts"
click node_midtransapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/midtrans/route.ts"
click node_whatsappapi "https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/botwa/send/route.ts"
click node_prisma "https://github.com/alfitosantosa/lms-sera-app/blob/main/lib/prisma.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_dashboard,node_adminui,node_studentui,node_teacherui,node_hooks,node_users toneBlue
class node_authui,node_authapi,node_authconfig,node_userdataapi,node_tenant,node_database toneAmber
class node_academicui,node_scheduleapi,node_tahfidzapi toneMint
class node_attendanceui,node_attendanceapi,node_teacherattendance,node_violationsui,node_violationsapi,node_whatsappapi toneRose
class node_paymentui,node_billingui,node_paymentapi,node_paymenttypeapi,node_bankchartapi,node_exports,node_midtransapi,node_midtrans,node_whatsapp toneIndigo
class node_prisma toneTeal
```

## Components

### User experience

- [Role dashboards](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/page.tsx): `app/(frontend)/(dashboard)/dashboard/page.tsx`
- [Admin workspace](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/admin/master/users/page.tsx): `app/(frontend)/(dashboard)/dashboard/admin/master/users/page.tsx`
- [Student workspace](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/student/attendance/page.tsx): `app/(frontend)/(dashboard)/dashboard/student/attendance/page.tsx`
- [Teacher workspace](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/teacher/attendance/%5Bid%5D/page.tsx): `app/(frontend)/(dashboard)/dashboard/teacher/attendance/[id]/page.tsx`
- [Data hooks](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(hooks)/hooks/Attendances/useAttendance.ts): `app/(hooks)/hooks/Attendances/useAttendance.ts`

### Identity and tenancy

- [Sign-in and sign-up](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(auth)/auth/sign-in/page.tsx): `app/(frontend)/(auth)/auth/sign-in/page.tsx`
- [Authentication API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/auth/%5B...all%5D/route.ts): `app/(backend)/api/auth/[...all]/route.ts`
- [Auth client](https://github.com/alfitosantosa/lms-sera-app/blob/main/lib/authClients.ts): `lib/authClients.ts`
- [User records API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/userdata/route.ts): `app/(backend)/api/userdata/route.ts`
- [Tenant resolution](https://github.com/alfitosantosa/lms-sera-app/blob/main/lib/tenant.ts): `lib/tenant.ts`

### Academic operations

- [Academic workspace](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/admin/academic/schedules/page.tsx): `app/(frontend)/(dashboard)/dashboard/admin/academic/schedules/page.tsx`
- [Schedules API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/schedules/route.ts): `app/(backend)/api/schedules/route.ts`
- [Tahfidz records API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/tahfidzrecord/route.ts): `app/(backend)/api/tahfidzrecord/route.ts`

### School operations

- [Attendance workspace](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/attendance/page.tsx): `app/(frontend)/(dashboard)/dashboard/attendance/page.tsx`
- [Attendance API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/attendance/route.ts): `app/(backend)/api/attendance/route.ts`
- [Teacher attendance API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/teacherattendance/route.ts): `app/(backend)/api/teacherattendance/route.ts`
- [Discipline workspace](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/violations/page.tsx): `app/(frontend)/(dashboard)/dashboard/violations/page.tsx`
- [Violations API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/violations/route.ts): `app/(backend)/api/violations/route.ts`
- [WhatsApp messaging API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/botwa/send/route.ts): `app/(backend)/api/botwa/send/route.ts`

### Finance and reporting

- [Payment workspace](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/payments/page.tsx): `app/(frontend)/(dashboard)/dashboard/payments/page.tsx`
- [Billing workspace](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(frontend)/(dashboard)/dashboard/admin/finance/billing/page.tsx): `app/(frontend)/(dashboard)/dashboard/admin/finance/billing/page.tsx`
- [Payments API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/payment/route.ts): `app/(backend)/api/payment/route.ts`
- [Payment types API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/paymenttype/route.ts): `app/(backend)/api/paymenttype/route.ts`
- [Finance analytics API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/accountbank/chart/route.ts): `app/(backend)/api/accountbank/chart/route.ts`
- [Finance exports](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(action)/createExcel/paymentItems/exportBilling.ts): `app/(action)/createExcel/paymentItems/exportBilling.ts`
- [Midtrans API](https://github.com/alfitosantosa/lms-sera-app/blob/main/app/(backend)/api/midtrans/route.ts): `app/(backend)/api/midtrans/route.ts`

### Other components

- **School users**
- **Midtrans gateway**
- **WhatsApp service**
- [Prisma data access](https://github.com/alfitosantosa/lms-sera-app/blob/main/lib/prisma.ts): `lib/prisma.ts`
- **PostgreSQL**

## Connections

- School users → Role dashboards: use dashboards
- School users → Sign-in and sign-up: sign in
- Sign-in and sign-up → Auth client: uses client
- Auth client → Authentication API: auth requests
- Role dashboards → Admin workspace: opens
- Role dashboards → Student workspace: opens
- Role dashboards → Teacher workspace: opens
- Admin workspace → Data hooks: fetches data
- Student workspace → Data hooks: fetches data
- Teacher workspace → Data hooks: fetches data
- Academic workspace → Data hooks: fetches data
- Attendance workspace → Data hooks: fetches data
- Data hooks → Attendance API: API requests
- Data hooks → Schedules API: API requests
- Data hooks → Tahfidz records API: API requests
- Data hooks → User records API: API requests
- Payment workspace → Data hooks: fetches data
- Billing workspace → Data hooks: fetches data
- Data hooks → Payments API: API requests
- Data hooks → Payment types API: API requests
- Data hooks → Finance analytics API: API requests
- Discipline workspace → Data hooks: fetches data
- Data hooks → Violations API: API requests
- Attendance workspace → Teacher attendance API: attendance requests
- Attendance API → Tenant resolution: resolves foundation
- Teacher attendance API → Tenant resolution: resolves foundation
- Violations API → Tenant resolution: resolves foundation
- Payments API → Tenant resolution: resolves foundation
- Payment types API → Tenant resolution: resolves foundation
- Schedules API → Tenant resolution: resolves foundation
- User records API → Tenant resolution: resolves foundation
- Attendance API → Prisma data access: reads and writes
- Teacher attendance API → Prisma data access: reads and writes
- Violations API → Prisma data access: reads and writes
- Payments API → Prisma data access: reads and writes
- Payment types API → Prisma data access: reads and writes
- Schedules API → Prisma data access: reads and writes
- Tahfidz records API → Prisma data access: record access
- User records API → Prisma data access: reads and writes
- Finance analytics API → Prisma data access: queries data
- Prisma data access → PostgreSQL: database access
- Billing workspace → Finance exports: exports billing
- Payments API → Midtrans API: payment flow
- Midtrans API → Midtrans gateway: gateway requests
- WhatsApp messaging API → WhatsApp service: sends messages
