# azriel-ae/xitkj1 architecture

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

- Interactive diagram: https://gitdiagram.com/azriel-ae/xitkj1
- Repository: https://github.com/azriel-ae/xitkj1

## Overview

XI TKJ 1 is a class website with a public-facing portal and an administrative panel. The tree indicates public areas for student profiles, schedules, gallery, news, social links, chat, and feedback; the server excerpt confirms static-file serving and routes for several APIs. Admin endpoints support authentication and management of class content. The excerpts show shared JSON/blob storage and helper layers. Chat and feedback files are present, but their routing and browser connections are not established by the supplied excerpts, so those links are omitted.

Main entry points: [`server.js`](https://github.com/azriel-ae/xitkj1/blob/main/server.js) (HTTP server), [`lib/kvStore.js`](https://github.com/azriel-ae/xitkj1/blob/main/lib/kvStore.js) (Persistent storage), [`api/admin/gallery.js`](https://github.com/azriel-ae/xitkj1/blob/main/api/admin/gallery.js) (Content management), [`lib/auth.js`](https://github.com/azriel-ae/xitkj1/blob/main/lib/auth.js) (Auth services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public portal"]
  node_site["Website pages<br/>[index.html]"]
  node_student_ui["Student profiles<br/>[siswa.js]"]
  node_schedule_ui["Class schedule<br/>[jadwal.js]"]
  node_gallery_ui["Gallery<br/>[gallery.js]"]
  node_news_ui["News pages<br/>[berita.html]"]
  node_chat_api["Class chatbot<br/>[chat.js]"]
  node_feedback_api["Feedback<br/>[feedback.js]"]
  node_social_api["Social links<br/>[social.js]"]
end

subgraph group_admin["Administration"]
  node_admin_ui["Admin panel<br/>[admin.html]"]
  node_admin_auth["Admin authentication<br/>[auth.js]"]
  node_admin_session["Session status<br/>[session.js]"]
  node_admin_students["Student management<br/>[siswa.js]"]
  node_admin_accounts["Admin accounts<br/>[admins.js]"]
  node_admin_content["Content management<br/>[gallery.js]"]
end

subgraph group_content["Class content"]
  node_public_content["Public content API<br/>[gallery.js]"]
  node_students_api["Student data API<br/>[siswa.js]"]
  node_image_api["Image delivery<br/>[img.js]"]
  node_news["News logic<br/>[news.js]"]
  node_schedule["Schedule logic<br/>[jadwal.js]"]
  node_social_avatar["Social avatars<br/>[socialAvatar.js]"]
end

subgraph group_runtime["Runtime and storage"]
  node_server["HTTP server<br/>[server.js]"]
  node_auth["Auth services<br/>[auth.js]"]
  node_activity["Activity logging<br/>[activityLog.js]"]
  node_http_helpers["HTTP helpers<br/>[http.js]"]
  node_store[("Persistent storage<br/>[kvStore.js]")]
end

node_visitor(("Visitor"))
node_gemini["Google Gemini"]

node_visitor -->|"visits"| node_site
node_server -->|"serves files"| node_site
node_server -->|"routes requests"| node_admin_auth
node_server -->|"routes requests"| node_admin_session
node_server -->|"routes requests"| node_admin_content
node_server -->|"routes requests"| node_admin_students
node_server -->|"routes requests"| node_admin_accounts
node_server -->|"routes requests"| node_public_content
node_server -->|"routes requests"| node_students_api
node_server -->|"routes requests"| node_social_api
node_server -->|"routes requests"| node_image_api
node_server -->|"generates responses"| node_gemini
node_admin_auth -->|"verifies credentials"| node_auth
node_admin_auth -->|"records events"| node_activity
node_admin_session -->|"checks session"| node_auth
node_admin_students -->|"checks access"| node_auth
node_admin_students -->|"validates images"| node_http_helpers
node_admin_accounts -->|"manages accounts"| node_auth
node_admin_accounts -->|"reads activity"| node_activity
node_admin_content -->|"checks access"| node_auth
node_admin_content -->|"writes news"| node_news
node_admin_content -->|"updates schedule"| node_schedule
node_admin_content -->|"manages avatars"| node_social_avatar
node_admin_content -->|"records events"| node_activity
node_public_content -->|"serves news"| node_news
node_public_content -->|"serves schedule"| node_schedule
node_public_content -->|"reads gallery"| node_store
node_news -->|"reads and writes"| node_store
node_schedule -->|"reads and writes"| node_store
node_auth -->|"reads and writes"| node_store
node_activity -->|"reads and writes"| node_store
node_social_avatar -->|"uses storage"| node_store
node_image_api -->|"reads images"| node_store
node_students_api -->|"loads overrides"| node_store
node_students_api -.->|"uses student data"| node_site

click node_site "https://github.com/azriel-ae/xitkj1/blob/main/index.html"
click node_student_ui "https://github.com/azriel-ae/xitkj1/blob/main/assets/js/siswa.js"
click node_schedule_ui "https://github.com/azriel-ae/xitkj1/blob/main/assets/js/jadwal.js"
click node_gallery_ui "https://github.com/azriel-ae/xitkj1/blob/main/assets/js/gallery.js"
click node_news_ui "https://github.com/azriel-ae/xitkj1/blob/main/berita.html"
click node_chat_api "https://github.com/azriel-ae/xitkj1/blob/main/api/chat.js"
click node_feedback_api "https://github.com/azriel-ae/xitkj1/blob/main/api/feedback.js"
click node_social_api "https://github.com/azriel-ae/xitkj1/blob/main/api/social.js"
click node_server "https://github.com/azriel-ae/xitkj1/blob/main/server.js"
click node_admin_ui "https://github.com/azriel-ae/xitkj1/blob/main/admin.html"
click node_admin_auth "https://github.com/azriel-ae/xitkj1/blob/main/api/admin/auth.js"
click node_admin_session "https://github.com/azriel-ae/xitkj1/blob/main/api/admin/session.js"
click node_admin_students "https://github.com/azriel-ae/xitkj1/blob/main/api/admin/siswa.js"
click node_admin_accounts "https://github.com/azriel-ae/xitkj1/blob/main/api/admin/admins.js"
click node_admin_content "https://github.com/azriel-ae/xitkj1/blob/main/api/admin/gallery.js"
click node_public_content "https://github.com/azriel-ae/xitkj1/blob/main/api/gallery.js"
click node_students_api "https://github.com/azriel-ae/xitkj1/blob/main/api/siswa.js"
click node_image_api "https://github.com/azriel-ae/xitkj1/blob/main/api/img.js"
click node_news "https://github.com/azriel-ae/xitkj1/blob/main/lib/news.js"
click node_schedule "https://github.com/azriel-ae/xitkj1/blob/main/lib/jadwal.js"
click node_social_avatar "https://github.com/azriel-ae/xitkj1/blob/main/lib/socialAvatar.js"
click node_auth "https://github.com/azriel-ae/xitkj1/blob/main/lib/auth.js"
click node_activity "https://github.com/azriel-ae/xitkj1/blob/main/lib/activityLog.js"
click node_http_helpers "https://github.com/azriel-ae/xitkj1/blob/main/lib/http.js"
click node_store "https://github.com/azriel-ae/xitkj1/blob/main/lib/kvStore.js"

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_site,node_student_ui,node_schedule_ui,node_gallery_ui,node_news_ui,node_chat_api,node_feedback_api,node_social_api toneBlue
class node_admin_ui,node_admin_auth,node_admin_session,node_admin_students,node_admin_accounts,node_admin_content toneAmber
class node_public_content,node_students_api,node_image_api,node_news,node_schedule,node_social_avatar toneMint
class node_server,node_auth,node_activity,node_http_helpers,node_store toneRose
class node_visitor,node_gemini toneIndigo
```

## Components

### Public portal

- [Website pages](https://github.com/azriel-ae/xitkj1/blob/main/index.html): `index.html`
- [Student profiles](https://github.com/azriel-ae/xitkj1/blob/main/assets/js/siswa.js): `assets/js/siswa.js`
- [Class schedule](https://github.com/azriel-ae/xitkj1/blob/main/assets/js/jadwal.js): `assets/js/jadwal.js`
- [Gallery](https://github.com/azriel-ae/xitkj1/blob/main/assets/js/gallery.js): `assets/js/gallery.js`
- [News pages](https://github.com/azriel-ae/xitkj1/blob/main/berita.html): `berita.html`
- [Class chatbot](https://github.com/azriel-ae/xitkj1/blob/main/api/chat.js): `api/chat.js`
- [Feedback](https://github.com/azriel-ae/xitkj1/blob/main/api/feedback.js): `api/feedback.js`
- [Social links](https://github.com/azriel-ae/xitkj1/blob/main/api/social.js): `api/social.js`

### Administration

- [Admin panel](https://github.com/azriel-ae/xitkj1/blob/main/admin.html): `admin.html`
- [Admin authentication](https://github.com/azriel-ae/xitkj1/blob/main/api/admin/auth.js): `api/admin/auth.js`
- [Session status](https://github.com/azriel-ae/xitkj1/blob/main/api/admin/session.js): `api/admin/session.js`
- [Student management](https://github.com/azriel-ae/xitkj1/blob/main/api/admin/siswa.js): `api/admin/siswa.js`
- [Admin accounts](https://github.com/azriel-ae/xitkj1/blob/main/api/admin/admins.js): `api/admin/admins.js`
- [Content management](https://github.com/azriel-ae/xitkj1/blob/main/api/admin/gallery.js): `api/admin/gallery.js`

### Class content

- [Public content API](https://github.com/azriel-ae/xitkj1/blob/main/api/gallery.js): `api/gallery.js`
- [Student data API](https://github.com/azriel-ae/xitkj1/blob/main/api/siswa.js): `api/siswa.js`
- [Image delivery](https://github.com/azriel-ae/xitkj1/blob/main/api/img.js): `api/img.js`
- [News logic](https://github.com/azriel-ae/xitkj1/blob/main/lib/news.js): `lib/news.js`
- [Schedule logic](https://github.com/azriel-ae/xitkj1/blob/main/lib/jadwal.js): `lib/jadwal.js`
- [Social avatars](https://github.com/azriel-ae/xitkj1/blob/main/lib/socialAvatar.js): `lib/socialAvatar.js`

### Runtime and storage

- [HTTP server](https://github.com/azriel-ae/xitkj1/blob/main/server.js): `server.js`
- [Auth services](https://github.com/azriel-ae/xitkj1/blob/main/lib/auth.js): `lib/auth.js`
- [Activity logging](https://github.com/azriel-ae/xitkj1/blob/main/lib/activityLog.js): `lib/activityLog.js`
- [HTTP helpers](https://github.com/azriel-ae/xitkj1/blob/main/lib/http.js): `lib/http.js`
- [Persistent storage](https://github.com/azriel-ae/xitkj1/blob/main/lib/kvStore.js): `lib/kvStore.js`

### Other components

- **Visitor**
- **Google Gemini**

## Connections

- Visitor → Website pages: visits
- HTTP server → Website pages: serves files (evidence: `server.js`)
- HTTP server → Admin authentication: routes requests (evidence: `server.js`)
- HTTP server → Session status: routes requests (evidence: `server.js`)
- HTTP server → Content management: routes requests (evidence: `server.js`)
- HTTP server → Student management: routes requests (evidence: `server.js`)
- HTTP server → Admin accounts: routes requests (evidence: `server.js`)
- HTTP server → Public content API: routes requests (evidence: `server.js`)
- HTTP server → Student data API: routes requests (evidence: `server.js`)
- HTTP server → Social links: routes requests (evidence: `server.js`)
- HTTP server → Image delivery: routes requests (evidence: `server.js`)
- HTTP server → Google Gemini: generates responses (evidence: `server.js`)
- Admin authentication → Auth services: verifies credentials (evidence: `api/admin/auth.js`)
- Admin authentication → Activity logging: records events (evidence: `api/admin/auth.js`)
- Session status → Auth services: checks session (evidence: `api/admin/session.js`)
- Student management → Auth services: checks access (evidence: `api/admin/siswa.js`)
- Student management → HTTP helpers: validates images (evidence: `api/admin/siswa.js`)
- Admin accounts → Auth services: manages accounts (evidence: `api/admin/admins.js`)
- Admin accounts → Activity logging: reads activity (evidence: `api/admin/admins.js`)
- Content management → Auth services: checks access (evidence: `api/admin/gallery.js`)
- Content management → News logic: writes news (evidence: `api/admin/gallery.js`)
- Content management → Schedule logic: updates schedule (evidence: `api/admin/gallery.js`)
- Content management → Social avatars: manages avatars (evidence: `api/admin/gallery.js`)
- Content management → Activity logging: records events (evidence: `api/admin/gallery.js`)
- Public content API → News logic: serves news (evidence: `api/gallery.js`)
- Public content API → Schedule logic: serves schedule (evidence: `api/gallery.js`)
- Public content API → Persistent storage: reads gallery (evidence: `api/gallery.js`)
- News logic → Persistent storage: reads and writes (evidence: `lib/news.js`)
- Schedule logic → Persistent storage: reads and writes (evidence: `lib/jadwal.js`)
- Auth services → Persistent storage: reads and writes (evidence: `lib/auth.js`)
- Activity logging → Persistent storage: reads and writes (evidence: `lib/activityLog.js`)
- Social avatars → Persistent storage: uses storage (evidence: `lib/socialAvatar.js`)
- Image delivery → Persistent storage: reads images (evidence: `api/img.js`)
- Student data API → Persistent storage: loads overrides (evidence: `api/siswa.js`)
- Student data API → Website pages: uses student data
