# kotajakarta/sekolah-app architecture

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

- Interactive diagram: https://gitdiagram.com/kotajakarta/sekolah-app
- Repository: https://github.com/kotajakarta/sekolah-app

## Overview

eSantri is a web-based pesantren management platform spanning student and institution records, formal academics, attendance, operations, and family-facing services. Users enter through public pages or authenticated role-based views; feature screens retrieve or change data through the shared API client, with the web server forwarding API requests to a separate backend. The sampled authentication code shows credential validation and database access. Other backend feature handlers and their storage relationships are not present in the sampled source, so those links are not expanded.

Main entry points: [`src/App.tsx`](https://github.com/kotajakarta/sekolah-app/blob/main/src/App.tsx) (Application routes), [`src/lib/apiClient.ts`](https://github.com/kotajakarta/sekolah-app/blob/main/src/lib/apiClient.ts) (API client), [`src/pages/auth/LoginPage.tsx`](https://github.com/kotajakarta/sekolah-app/blob/main/src/pages/auth/LoginPage.tsx) (Login page), [`src/pages/core`](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/core) (Student and staff records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and shell"]
  node_app["Application routes<br/>[App.tsx]"]
  node_login["Login page<br/>[LoginPage.tsx]"]
  node_auth["Auth state<br/>[useAuth.tsx]"]
  node_api["API client<br/>[apiClient.ts]"]
  node_public["Public pages"]
  node_dashboard["Dashboard<br/>[Dashboard.tsx]"]
end

subgraph group_records["People and institutions"]
  node_core["Student and staff records"]
  node_institutions["Branch and region records"]
end

subgraph group_learning["Academic services"]
  node_formal["Formal academics"]
  node_assessment["Question bank"]
  node_attendance["Attendance"]
  node_learning_ops["Learning activity"]
end

subgraph group_operations["Operations"]
  node_family["Family portal"]
  node_requests["Student requests"]
  node_discipline["Disciplinary records"]
  node_facilities["Facilities"]
  node_reports["Reports"]
end

subgraph group_external["API and persistence"]
  node_proxy["API proxy<br/>[server.ts]"]
  node_backend{{"Backend API"}}
  node_auth_controller["Auth controller<br/>[auth.controller.ts]"]
  node_auth_service["Auth service<br/>[auth.service.ts]"]
  node_db[("Prisma database<br/>[db.ts]")]
  node_postgres[("PostgreSQL")]
end

node_browser(("Browser user"))

node_browser -->|"opens"| node_app
node_browser -->|"visits"| node_public
node_app -->|"routes"| node_login
node_app -->|"provides auth"| node_auth
node_app -->|"routes"| node_dashboard
node_app -->|"routes"| node_core
node_app -->|"routes"| node_institutions
node_app -->|"routes"| node_formal
node_app -->|"routes"| node_assessment
node_app -->|"routes"| node_attendance
node_app -->|"routes"| node_learning_ops
node_app -->|"routes"| node_family
node_app -->|"routes"| node_requests
node_app -->|"routes"| node_discipline
node_app -->|"routes"| node_facilities
node_app -->|"routes"| node_reports
node_login -->|"requests login"| node_api
node_api -->|"forwards API"| node_proxy
node_proxy -->|"proxies requests"| node_backend
node_auth_controller -->|"calls"| node_auth_service
node_auth_service -->|"queries user"| node_db
node_db -->|"reads"| node_postgres
node_core -->|"requests data"| node_api
node_formal -->|"requests data"| node_api
node_assessment -->|"requests data"| node_api
node_attendance -->|"requests data"| node_api
node_family -->|"requests data"| node_api
node_requests -->|"requests data"| node_api
node_discipline -->|"requests data"| node_api
node_facilities -->|"requests data"| node_api
node_reports -->|"requests data"| node_api

click node_app "https://github.com/kotajakarta/sekolah-app/blob/main/src/App.tsx"
click node_login "https://github.com/kotajakarta/sekolah-app/blob/main/src/pages/auth/LoginPage.tsx"
click node_auth "https://github.com/kotajakarta/sekolah-app/blob/main/src/hooks/useAuth.tsx"
click node_api "https://github.com/kotajakarta/sekolah-app/blob/main/src/lib/apiClient.ts"
click node_public "https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/public"
click node_dashboard "https://github.com/kotajakarta/sekolah-app/blob/main/src/pages/Dashboard.tsx"
click node_core "https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/core"
click node_institutions "https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/core"
click node_formal "https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/formal"
click node_assessment "https://github.com/kotajakarta/sekolah-app/tree/main/src/features/bank_soal"
click node_attendance "https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/absensi"
click node_learning_ops "https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/pembelajaran"
click node_family "https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/portal"
click node_requests "https://github.com/kotajakarta/sekolah-app/tree/main/src/features/permohonan"
click node_discipline "https://github.com/kotajakarta/sekolah-app/tree/main/src/features/indisipliner"
click node_facilities "https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/sarpras"
click node_reports "https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/laporan"
click node_proxy "https://github.com/kotajakarta/sekolah-app/blob/main/server.ts"
click node_auth_controller "https://github.com/kotajakarta/sekolah-app/blob/main/server/auth.controller.ts"
click node_auth_service "https://github.com/kotajakarta/sekolah-app/blob/main/server/auth.service.ts"
click node_db "https://github.com/kotajakarta/sekolah-app/blob/main/server/db.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_api,node_public,node_dashboard,node_browser toneBlue
class node_core,node_institutions toneAmber
class node_formal,node_assessment,node_attendance,node_learning_ops toneMint
class node_family,node_requests,node_discipline,node_facilities,node_reports toneRose
class node_proxy,node_backend,node_auth_controller,node_auth_service,node_db,node_postgres toneIndigo
```

## Components

### Access and shell

- [Application routes](https://github.com/kotajakarta/sekolah-app/blob/main/src/App.tsx): `src/App.tsx`
- [Login page](https://github.com/kotajakarta/sekolah-app/blob/main/src/pages/auth/LoginPage.tsx): `src/pages/auth/LoginPage.tsx`
- [Auth state](https://github.com/kotajakarta/sekolah-app/blob/main/src/hooks/useAuth.tsx): `src/hooks/useAuth.tsx`
- [API client](https://github.com/kotajakarta/sekolah-app/blob/main/src/lib/apiClient.ts): `src/lib/apiClient.ts`
- [Public pages](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/public): `src/pages/public`
- [Dashboard](https://github.com/kotajakarta/sekolah-app/blob/main/src/pages/Dashboard.tsx): `src/pages/Dashboard.tsx`

### People and institutions

- [Student and staff records](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/core): `src/pages/core`
- [Branch and region records](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/core): `src/pages/core`

### Academic services

- [Formal academics](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/formal): `src/pages/formal`
- [Question bank](https://github.com/kotajakarta/sekolah-app/tree/main/src/features/bank_soal): `src/features/bank_soal`
- [Attendance](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/absensi): `src/pages/absensi`
- [Learning activity](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/pembelajaran): `src/pages/pembelajaran`

### Operations

- [Family portal](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/portal): `src/pages/portal`
- [Student requests](https://github.com/kotajakarta/sekolah-app/tree/main/src/features/permohonan): `src/features/permohonan`
- [Disciplinary records](https://github.com/kotajakarta/sekolah-app/tree/main/src/features/indisipliner): `src/features/indisipliner`
- [Facilities](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/sarpras): `src/pages/sarpras`
- [Reports](https://github.com/kotajakarta/sekolah-app/tree/main/src/pages/laporan): `src/pages/laporan`

### API and persistence

- [API proxy](https://github.com/kotajakarta/sekolah-app/blob/main/server.ts): `server.ts`
- **Backend API**
- [Auth controller](https://github.com/kotajakarta/sekolah-app/blob/main/server/auth.controller.ts): `server/auth.controller.ts`
- [Auth service](https://github.com/kotajakarta/sekolah-app/blob/main/server/auth.service.ts): `server/auth.service.ts`
- [Prisma database](https://github.com/kotajakarta/sekolah-app/blob/main/server/db.ts): `server/db.ts`
- **PostgreSQL**

### Other components

- **Browser user**

## Connections

- Browser user → Application routes: opens
- Browser user → Public pages: visits
- Application routes → Login page: routes
- Application routes → Auth state: provides auth
- Application routes → Dashboard: routes
- Application routes → Student and staff records: routes
- Application routes → Branch and region records: routes
- Application routes → Formal academics: routes
- Application routes → Question bank: routes
- Application routes → Attendance: routes
- Application routes → Learning activity: routes
- Application routes → Family portal: routes
- Application routes → Student requests: routes
- Application routes → Disciplinary records: routes
- Application routes → Facilities: routes
- Application routes → Reports: routes
- Login page → API client: requests login
- API client → API proxy: forwards API
- API proxy → Backend API: proxies requests
- Auth controller → Auth service: calls
- Auth service → Prisma database: queries user
- Prisma database → PostgreSQL: reads
- Student and staff records → API client: requests data
- Formal academics → API client: requests data
- Question bank → API client: requests data
- Attendance → API client: requests data
- Family portal → API client: requests data
- Student requests → API client: requests data
- Disciplinary records → API client: requests data
- Facilities → API client: requests data
- Reports → API client: requests data
