# TUAH NUMERASI
## Spesifikasi Lengkap Web Application
### SDN 002 Batu Ampar

**Versi:** 1.0  
**Status:** Draft untuk Development  
**Jenis Sistem:** Web Application Pembelajaran, Asesmen, Monitoring, dan Pelaporan Numerasi  
**Target Pengguna:** Administrator, Kepala Sekolah, Guru, Murid  
**Stack Rekomendasi:** Laravel 12, PHP 8.3+, MySQL/MariaDB, Livewire, Tailwind CSS

---

# 1. Ringkasan Sistem

TUAH NUMERASI adalah platform pembelajaran numerasi yang mengintegrasikan aktivitas harian, bank soal, asesmen diagnostik, proyek numerasi, peta kemampuan murid, monitoring guru, galeri kegiatan, serta laporan perkembangan.

Konsep utama:

> **Tumbuh Unggul melalui Aktivitas Harian Numerasi**  
> **Berhitung, Bernalar, Memecahkan Masalah**

Sistem tidak hanya menyimpan nilai, tetapi membentuk alur:

```text
Murid
  ↓
Aktivitas Numerasi
  ↓
Jawaban dan Proses Berpikir
  ↓
Penilaian
  ↓
Pemetaan Domain Kemampuan
  ↓
Monitoring Guru
  ↓
Penguatan / Pendampingan
  ↓
Perkembangan
  ↓
Laporan
```

Target program satu semester:

- 100 Tantangan Numerasi
- 20 Aktivitas Numerasi
- 6 Proyek Numerasi
- 3 Asesmen utama
- 5 Domain Numerasi
- 1 Semester

---

# 2. Tujuan

## 2.1 Tujuan Utama

- Membiasakan numerasi melalui aktivitas rutin.
- Mengukur kemampuan awal, tengah, dan akhir.
- Memetakan kemampuan murid per domain.
- Membantu guru mengidentifikasi kebutuhan penguatan.
- Menyediakan data perkembangan kelas.
- Mengurangi rekap manual.
- Menyediakan dokumentasi program numerasi sekolah.
- Menyediakan laporan untuk guru dan kepala sekolah.

## 2.2 Prinsip Pengembangan

1. Mudah dipakai.
2. Data akurat.
3. Aman.
4. Responsive.
5. Tidak over-engineered.
6. Mudah dikembangkan.
7. Tidak membuat guru menambah pekerjaan administratif yang berlebihan.

---

# 3. Domain Numerasi

Sistem menggunakan lima domain utama:

1. **Bilangan**
2. **Geometri**
3. **Pengukuran**
4. **Data**
5. **Penalaran**

Setiap soal dapat memiliki:

- kelas,
- domain,
- subdomain,
- materi,
- konteks,
- level kesulitan,
- bentuk soal,
- bobot.

---

# 4. Role Pengguna

## 4.1 Administrator

Hak akses:

- Dashboard admin.
- User management.
- Guru.
- Kepala sekolah.
- Murid.
- Kelas.
- Tahun ajaran.
- Semester.
- Domain dan materi.
- Bank soal.
- Tantangan.
- Asesmen.
- Proyek.
- Galeri.
- Laporan.
- Import/export.
- Audit log.
- Pengaturan.
- Reset akun.
- Mengatur threshold kemampuan.

## 4.2 Kepala Sekolah

Hak akses:

- Dashboard sekolah.
- Monitoring seluruh kelas.
- Statistik perkembangan.
- Perbandingan kelas.
- Monitoring asesmen.
- Monitoring proyek.
- Galeri.
- Laporan.
- Export laporan.

Secara default kepala sekolah lebih banyak **view/monitoring**, bukan mengubah transaksi guru.

## 4.3 Guru

Hak akses:

- Dashboard kelas.
- Data murid.
- Bank soal.
- Tantangan harian.
- Asesmen.
- Penilaian uraian.
- Peta kemampuan.
- Proyek.
- Rubrik.
- Galeri.
- Laporan kelas.
- Catatan murid.
- Export PDF/Excel.

## 4.4 Murid

Hak akses:

- Dashboard pribadi.
- Tantangan hari ini.
- Asesmen.
- Proyek.
- Submission tugas.
- Feedback.
- Progress pribadi.
- Profil.

Murid tidak boleh melihat data pribadi atau nilai murid lain.

---

# 5. Matriks Hak Akses

| Modul | Admin | Kepala Sekolah | Guru | Murid |
|---|---|---|---|---|
| Dashboard Sekolah | Full | View | Terbatas | Tidak |
| Dashboard Kelas | Full | View | Full kelasnya | Tidak |
| Data Murid | Full | View | Kelasnya | Diri sendiri |
| Bank Soal | Full | View | CRUD | Tidak |
| Tantangan | Full | View | CRUD | Kerjakan |
| Asesmen | Full | View | CRUD | Kerjakan |
| Peta Kemampuan | Full | View | Kelasnya | Pribadi terbatas |
| Proyek | Full | View | CRUD | Ikut/submit |
| Galeri | Full | View | CRUD | View |
| Laporan | Full | Full | Kelasnya | Pribadi terbatas |
| User Management | Full | Tidak | Tidak | Tidak |
| Settings | Full | Tidak | Tidak | Tidak |
| Audit Log | Full | Tidak | Tidak | Tidak |

Authorization wajib diperiksa di backend, bukan hanya dengan menyembunyikan menu.

---

# 6. Struktur Menu

## Administrator

```text
Dashboard
Master Data
  - Tahun Ajaran
  - Semester
  - Kelas
  - Domain
  - Materi
User
  - Kepala Sekolah
  - Guru
  - Murid
Pembelajaran
  - Bank Soal
  - Tantangan Harian
  - Asesmen
  - Proyek Numerasi
  - Galeri
Monitoring
  - Peta Kemampuan
  - Laporan
System
  - Import
  - Audit Log
  - Settings
```

## Guru

```text
Dashboard
Murid
Tantangan Harian
Asesmen
Peta Kemampuan
Proyek Numerasi
Bank Soal
Galeri
Laporan
```

## Kepala Sekolah

```text
Dashboard
Monitoring Kelas
Perkembangan Numerasi
Asesmen
Proyek
Galeri
Laporan
```

## Murid

```text
Beranda
Tantangan Hari Ini
Asesmen
Proyek Saya
Perkembangan Saya
Profil
```

---

# 7. Landing Page

Landing page bersifat publik.

## Komponen

### Header

- Logo TUAH NUMERASI.
- Nama sekolah.
- Beranda.
- Tentang.
- Tantangan.
- Fitur.
- Galeri.
- Kontak.
- Login.

### Hero

Konten:

- TUAH NUMERASI.
- Tumbuh Unggul melalui Aktivitas Harian Numerasi.
- Berhitung, Bernalar, Memecahkan Masalah.
- Tombol **Mulai Sekarang**.
- Tombol **Login**.

### Statistik Program

- 100 Tantangan.
- 20 Aktivitas.
- 6 Proyek.
- 1 Semester.

### Fitur

- Tantangan Harian.
- Asesmen.
- Peta Kemampuan.
- Proyek.
- Bank Soal.
- Galeri.
- Laporan.

### Footer

- Identitas sekolah.
- Kontak.
- Copyright.
- Privacy policy jika diperlukan.

---

# 8. Login dan Authentication

## Field

- Email / NIP / NISN / Username.
- Password.
- Remember me.
- Forgot password.

## Security

- Password hash menggunakan Bcrypt/Argon.
- CSRF protection.
- Rate limiting.
- Session regeneration setelah login.
- Session timeout.
- Secure cookie di production.
- Login activity log.
- Tidak menyimpan password plaintext.
- Account inactive tidak boleh login.

## Account Murid

Login dapat menggunakan:

```text
NISN + password
```

atau:

```text
NIS + password
```

Admin/guru yang diberi hak dapat reset password murid.

---

# 9. Tahun Ajaran dan Semester

## Tahun Ajaran

Field:

- id
- nama
- tanggal mulai
- tanggal selesai
- aktif/tidak

Contoh:

```text
2026/2027
```

## Semester

Field:

- tahun ajaran
- nama semester
- tanggal mulai
- tanggal selesai
- aktif/tidak

Contoh:

- Ganjil.
- Genap.

Data historis tidak boleh hilang ketika semester berganti.

---

# 10. Kelas

Field:

- ID.
- Tahun ajaran.
- Nama kelas.
- Tingkat.
- Wali/guru.
- Status.

Contoh:

```text
5A
5B
6A
```

Murid harus memiliki histori kelas agar data tahun sebelumnya tetap bisa dibuka.

---

# 11. Data Murid

## Field

- ID.
- User ID.
- NISN.
- NIS.
- Nama lengkap.
- Nama panggilan.
- Jenis kelamin.
- Tempat lahir.
- Tanggal lahir.
- Kelas.
- Status.
- Foto.
- Nama wali.
- Nomor wali.
- Catatan.

## Fitur

- Tambah.
- Edit.
- Arsip.
- Cari.
- Filter kelas.
- Import Excel.
- Export Excel.
- Detail.
- Riwayat kelas.
- Riwayat asesmen.
- Riwayat tantangan.
- Riwayat proyek.

## Profil Murid

Menampilkan:

- Biodata.
- Kelas.
- Nilai domain.
- Grafik perkembangan.
- Asesmen awal/tengah/akhir.
- Tantangan.
- Proyek.
- Catatan guru.
- Rekomendasi penguatan.

---

# 12. Dashboard Guru

Dashboard guru menjadi pusat aktivitas.

## KPI

- Jumlah murid.
- Tantangan selesai.
- Rata-rata numerasi.
- Persentase murid berkembang.
- Proyek selesai.
- Asesmen aktif.
- Murid perlu perhatian.

Contoh:

```text
Jumlah Murid            38
Tantangan Selesai       42 / 100
Rata-rata Numerasi      82
Murid Berkembang        86%
Proyek Selesai          3 / 6
```

## Grafik

### Perkembangan kelas

```text
Awal → Bulan 1 → Bulan 2 → Bulan 3 → Bulan 4 → Akhir
```

### Nilai per domain

- Bilangan.
- Geometri.
- Pengukuran.
- Data.
- Penalaran.

## Tantangan Hari Ini

Menampilkan:

- nomor,
- judul,
- materi,
- level,
- jumlah murid selesai,
- progress,
- tombol lihat soal,
- tombol lihat hasil.

## Murid yang Memerlukan Perhatian

| Nama | Domain | Nilai | Tren | Status | Aksi |
|---|---|---:|---|---|---|

---

# 13. Peta Kemampuan Murid

Peta kemampuan adalah salah satu fitur inti.

## Format

| Murid | Bilangan | Geometri | Pengukuran | Data | Penalaran | Status |
|---|---:|---:|---:|---:|---:|---|

## Threshold Default

```text
>= 75     = Baik
60 - 74   = Perlu Penguatan
< 60      = Perlu Pendampingan
```

Threshold harus configurable.

## Trend

- Naik.
- Stabil.
- Turun.

## Detail Murid

Sistem menampilkan:

- score terkini,
- riwayat score,
- sumber nilai,
- domain lemah,
- domain kuat,
- catatan guru.

Contoh insight berbasis rule:

> Nilai Data Ahmad berada di bawah 60 pada tiga aktivitas terakhir. Disarankan penguatan membaca tabel dan diagram sederhana.

---

# 14. Bank Soal

## Field Soal

- ID.
- Kode.
- Kelas.
- Domain.
- Subdomain.
- Materi.
- Kompetensi.
- Konteks.
- Level.
- Bentuk soal.
- Pertanyaan.
- Gambar.
- Pilihan jawaban.
- Jawaban benar.
- Pembahasan.
- Bobot.
- Durasi opsional.
- Status.
- Pembuat.
- Created at.
- Updated at.

## Bentuk Soal

MVP:

- Pilihan Ganda.
- Benar/Salah.
- Isian Singkat.
- Uraian.

Future:

- Multiple Answer.
- Matching.
- Drag and Drop.

## Level

- Mudah.
- Sedang.
- HOTS.

## Fitur

- CRUD.
- Search.
- Filter.
- Pagination.
- Preview.
- Duplicate.
- Archive.
- Import Excel.
- Export.
- Acak soal.
- Tambah ke tantangan.
- Tambah ke asesmen.
- Cetak LKPD.

## Validasi

Untuk pilihan ganda:

- minimal 2 pilihan,
- harus ada jawaban benar,
- pertanyaan wajib,
- domain wajib,
- bobot > 0.

---

# 15. Format Kode Soal

Contoh:

```text
Q-NUM-5-001
Q-DATA-5-002
Q-GEO-5-003
```

Keuntungan:

- mudah dicari,
- mudah dilacak,
- mudah dibahas guru.

---

# 16. Tantangan Numerasi Harian

## Tujuan

Memberikan latihan singkat dan rutin.

## Field

- ID.
- Nomor tantangan.
- Judul.
- Kelas.
- Domain.
- Materi.
- Level.
- Tanggal.
- Waktu mulai.
- Waktu selesai.
- Deskripsi.
- Status.
- Dibuat oleh.

## Status

```text
draft
scheduled
published
closed
archived
```

## Alur Guru

```text
Tambah Tantangan
↓
Pilih Kelas
↓
Pilih Tanggal
↓
Pilih Soal
↓
Atur Waktu
↓
Preview
↓
Publish
```

## Alur Murid

```text
Login
↓
Tantangan Hari Ini
↓
Buka
↓
Jawab
↓
Tulis proses berpikir
↓
Submit
↓
Feedback
```

## Jawaban Disimpan

- student_id.
- question_id.
- challenge_id.
- jawaban.
- reasoning.
- benar/salah.
- skor.
- teacher feedback.
- started_at.
- submitted_at.
- duration.

## Feedback

Mode:

- langsung,
- setelah deadline,
- setelah guru membuka hasil.

---

# 17. Asesmen Diagnostik

## Jenis

1. Asesmen Awal.
2. Asesmen Tengah.
3. Asesmen Akhir.

## Tujuan

**Awal:** baseline.  
**Tengah:** monitoring.  
**Akhir:** evaluasi.

## Field

- Nama.
- Jenis.
- Tahun ajaran.
- Semester.
- Kelas.
- Deskripsi.
- Mulai.
- Berakhir.
- Durasi.
- Shuffle soal.
- Shuffle jawaban.
- Tampilkan skor.
- Tampilkan pembahasan.
- Status.

## Status

```text
draft
scheduled
active
closed
review
completed
archived
```

## Komposisi Contoh

```text
Bilangan       20
Geometri       15
Pengukuran     15
Data           20
Penalaran      15
```

Komposisi harus configurable.

## Assessment Player

Murid melihat:

- nomor soal,
- progress,
- timer,
- previous,
- next,
- flag/ragu-ragu,
- tombol submit.

## Timer

- dikontrol server,
- refresh tidak mengulang timer,
- waktu habis dapat auto-submit.

## Autosave

Jawaban disimpan secara periodik atau saat berpindah soal.

---

# 18. Scoring

## Pilihan Ganda

```text
score = weight jika benar
score = 0 jika salah
```

## Persentase

```text
percentage =
total_score / maximum_score * 100
```

## Domain Score

```text
domain_score =
total_score_domain / maximum_score_domain * 100
```

## Growth

```text
growth = final_score - initial_score
```

Contoh:

```text
Awal  = 68
Akhir = 84

Growth = +16
```

## Uraian

Uraian dinilai guru menggunakan:

- skor,
- rubrik bila tersedia,
- feedback.

---

# 19. Hasil Asesmen

Per murid:

- jumlah soal,
- benar,
- salah,
- tidak dijawab,
- total skor,
- persentase,
- domain score,
- durasi,
- status grading.

Perbandingan:

- Awal vs Tengah.
- Tengah vs Akhir.
- Awal vs Akhir.

---

# 20. Question Snapshot

Saat asesmen dipublish, disarankan membuat snapshot isi soal:

- pertanyaan,
- pilihan,
- jawaban benar,
- bobot.

Tujuannya agar histori asesmen tidak berubah jika soal di bank soal diedit kemudian.

Setelah asesmen aktif, soal tidak boleh diedit bebas.

---

# 21. Proyek Numerasi

Enam proyek contoh:

1. Pasar Mini TUAH.
2. Ukur Sekolahku.
3. Detektif Data.
4. Kantin Sehat.
5. Numerasi Lingkunganku.
6. Festival TUAH Numerasi.

## Field

- Judul.
- Slug.
- Deskripsi.
- Tujuan.
- Kompetensi.
- Kelas.
- Guru.
- Tanggal mulai.
- Tanggal selesai.
- Instruksi.
- LKPD.
- Status.
- Dokumentasi.

## Status

```text
draft
planned
active
review
completed
archived
```

## Submission

Murid dapat mengirim:

- teks,
- file,
- foto,
- link.

## Rubrik

Contoh:

- Pemahaman konsep.
- Ketepatan.
- Penalaran.
- Kreativitas.
- Presentasi.
- Kerja sama.

---

# 22. Galeri TUAH

## Isi

- Foto.
- Judul.
- Deskripsi.
- Kategori.
- Proyek.
- Tanggal.
- Caption.
- Status publish.

## Kategori

- Pasar Mini.
- Ukur Sekolahku.
- Detektif Data.
- Kantin Sehat.
- Numerasi Lingkunganku.
- Festival.
- Aktivitas Umum.

## Catatan Privasi

Karena melibatkan anak, publikasi galeri harus mengikuti kebijakan sekolah dan persetujuan yang berlaku.

---

# 23. Dashboard Kepala Sekolah

## KPI

- Total murid.
- Total kelas.
- Rata-rata sekolah.
- Persentase berkembang.
- Tantangan selesai.
- Proyek selesai.
- Asesmen selesai.

## Monitoring Kelas

| Kelas | Murid | Rata-rata | Growth | Tantangan | Proyek | Status |
|---|---:|---:|---:|---:|---:|---|

## Analisis Domain

| Domain | Awal | Tengah | Akhir | Growth |
|---|---:|---:|---:|---:|

Dashboard kepala sekolah sebaiknya mengutamakan agregat dan indikator program.

---

# 24. Dashboard Murid

Tampilan sederhana:

- Halo, Nama.
- Tantangan Hari Ini.
- Progress.
- Asesmen aktif.
- Proyek aktif.
- Feedback terbaru.

Gamification opsional:

- badge,
- poin,
- streak,
- trophy.

Leaderboard terbuka tidak direkomendasikan menjadi fitur utama.

---

# 25. Laporan

## Jenis

### Laporan Murid

- identitas,
- hasil asesmen,
- domain,
- grafik,
- tantangan,
- proyek,
- catatan guru,
- rekomendasi.

### Laporan Kelas

- kelas,
- guru,
- jumlah murid,
- rata-rata,
- growth,
- domain,
- murid perlu perhatian,
- aktivitas,
- proyek.

### Laporan Sekolah

- semua kelas,
- perkembangan,
- perbandingan,
- pencapaian program.

### Laporan Tantangan

- peserta,
- completion,
- score,
- soal sulit.

### Laporan Asesmen

- distribusi score,
- domain,
- murid,
- comparison.

### Laporan Proyek

- progress,
- score,
- dokumentasi.

## Export

- PDF.
- Excel.
- CSV opsional.

---

# 26. Formula KPI

Semua KPI harus memiliki definisi.

## Murid Berkembang

```text
jumlah murid dengan growth positif
---------------------------------- x 100
jumlah murid dengan data pembanding lengkap
```

Murid tanpa baseline tidak boleh dianggap turun atau naik.

Tampilkan:

> Data belum cukup.

jika perbandingan tidak tersedia.

---

# 27. Analisis Tingkat Kesulitan Soal

Future/advanced:

```text
difficulty_index =
jumlah murid menjawab benar / jumlah murid menjawab * 100
```

Contoh:

```text
8 benar / 40 menjawab = 20%
```

Dapat membantu guru mengevaluasi soal.

---

# 28. Analisis Distractor

Untuk pilihan ganda, tampilkan distribusi:

```text
A = 5 murid
B = 30 murid
C = 3 murid
D = 2 murid
```

Guru dapat melihat pilihan salah mana yang paling sering dipilih.

---

# 29. Notifikasi

Guru:

- submission baru,
- asesmen selesai,
- deadline,
- murid belum mengerjakan.

Murid:

- tantangan baru,
- asesmen aktif,
- proyek baru,
- feedback.

Kepala sekolah:

- laporan program tersedia,
- asesmen selesai.

Hindari notifikasi berlebihan.

---

# 30. Audit Log

Aktivitas penting:

- login,
- logout,
- tambah/edit/hapus murid,
- publish tantangan,
- publish asesmen,
- perubahan nilai,
- reset attempt,
- export data.

Field:

- user_id.
- action.
- module.
- record_type.
- record_id.
- old_values JSON.
- new_values JSON.
- IP.
- user agent.
- timestamp.

---

# 31. Struktur Database

## users

```text
id
name
email
username
password
status
last_login_at
remember_token
timestamps
```

## teachers

```text
id
user_id
nip
employee_number
full_name
gender
phone
photo
status
timestamps
```

## students

```text
id
user_id
nisn
nis
full_name
nickname
gender
birth_place
birth_date
guardian_name
guardian_phone
photo
status
notes
timestamps
deleted_at
```

## academic_years

```text
id
name
start_date
end_date
is_active
timestamps
```

## semesters

```text
id
academic_year_id
name
start_date
end_date
is_active
timestamps
```

## classes

```text
id
academic_year_id
name
grade
teacher_id
status
timestamps
```

## class_students

```text
id
class_id
student_id
academic_year_id
start_date
end_date
status
timestamps
```

## numeracy_domains

```text
id
code
name
description
color
icon
order_no
status
timestamps
```

## numeracy_materials

```text
id
domain_id
grade
name
description
status
timestamps
```

## questions

```text
id
code
grade
domain_id
material_id
level
question_type
context
question_text
image_path
correct_answer
explanation
weight
duration_seconds
created_by
status
timestamps
deleted_at
```

## question_options

```text
id
question_id
option_key
option_text
image_path
is_correct
order_no
timestamps
```

## daily_challenges

```text
id
challenge_number
class_id
title
description
challenge_date
level
start_at
end_at
status
created_by
timestamps
```

## daily_challenge_questions

```text
id
daily_challenge_id
question_id
order_no
weight
timestamps
```

## student_challenge_answers

```text
id
daily_challenge_id
question_id
student_id
answer
reasoning
is_correct
score
teacher_feedback
started_at
submitted_at
duration_seconds
timestamps
```

## assessments

```text
id
class_id
academic_year_id
semester_id
name
assessment_type
description
start_at
end_at
duration_minutes
shuffle_questions
shuffle_options
show_score
show_explanation
status
created_by
timestamps
```

## assessment_questions

```text
id
assessment_id
question_id
order_no
weight
snapshot_json
timestamps
```

## student_assessments

```text
id
assessment_id
student_id
status
started_at
submitted_at
score
percentage
duration_seconds
timestamps
```

## student_assessment_answers

```text
id
student_assessment_id
question_id
answer
reasoning
is_correct
score
teacher_feedback
timestamps
```

## student_domain_scores

```text
id
student_id
class_id
domain_id
source_type
source_id
score
calculated_at
timestamps
```

## student_competency_summaries

```text
id
student_id
class_id
domain_id
average_score
level
trend
calculated_at
timestamps
```

## projects

```text
id
class_id
title
slug
description
objective
instruction
start_date
end_date
worksheet_path
status
created_by
timestamps
```

## project_rubrics

```text
id
project_id
criterion
description
max_score
weight
order_no
timestamps
```

## project_submissions

```text
id
project_id
student_id
submission_text
file_path
link
submitted_at
status
timestamps
```

## project_scores

```text
id
project_submission_id
rubric_id
score
notes
assessed_by
timestamps
```

## galleries

```text
id
project_id
title
description
category
event_date
status
uploaded_by
timestamps
```

## gallery_media

```text
id
gallery_id
media_type
file_path
thumbnail_path
external_url
caption
order_no
timestamps
```

## activity_logs

```text
id
user_id
action
module
record_type
record_id
old_values
new_values
ip_address
user_agent
created_at
```

---

# 32. Relasi Utama

```text
users
 ├─ teachers
 └─ students

academic_years
 ├─ semesters
 └─ classes
     └─ class_students
         └─ students

numeracy_domains
 └─ numeracy_materials
     └─ questions
         └─ question_options

daily_challenges
 └─ daily_challenge_questions
     └─ questions
         └─ student_challenge_answers

assessments
 ├─ assessment_questions
 └─ student_assessments
     └─ student_assessment_answers

projects
 ├─ project_rubrics
 ├─ project_submissions
 └─ galleries
```

---

# 33. Business Rules

## Kelas

- Murid hanya aktif di kelas sesuai tahun ajaran.
- Histori kelas disimpan.

## Tantangan

- Murid hanya melihat tantangan kelasnya.
- Tantangan mengikuti window waktu.
- Double submit dicegah.

## Asesmen

- Satu attempt default.
- Guru dapat reset attempt sesuai permission.
- Reset tercatat audit log.
- Timer server-side.
- Setelah waktu habis dapat auto-submit.
- Uraian dapat menunggu grading.
- Nilai final setelah grading selesai.

## Nilai

- Formula disimpan di service terpusat.
- Perubahan nilai manual dicatat.

---

# 34. Arsitektur Laravel

Rekomendasi:

```text
app/
├── Actions/
├── DTO/
├── Enums/
├── Events/
├── Http/
│   ├── Controllers/
│   ├── Middleware/
│   ├── Requests/
│   └── Resources/
├── Livewire/
├── Models/
├── Notifications/
├── Policies/
├── Services/
└── Support/
```

## Service

```text
ChallengeService
AssessmentService
ScoringService
CompetencyService
ProjectService
ReportService
FileUploadService
NotificationService
```

Formula jangan tersebar di controller.

---

# 35. Model Laravel

```text
User
Teacher
Student
AcademicYear
Semester
SchoolClass
ClassStudent
NumeracyDomain
NumeracyMaterial
Question
QuestionOption
DailyChallenge
DailyChallengeQuestion
StudentChallengeAnswer
Assessment
AssessmentQuestion
StudentAssessment
StudentAssessmentAnswer
StudentDomainScore
StudentCompetencySummary
Project
ProjectRubric
ProjectSubmission
ProjectScore
Gallery
GalleryMedia
ActivityLog
```

---

# 36. Form Request

```text
StoreStudentRequest
UpdateStudentRequest
StoreQuestionRequest
UpdateQuestionRequest
StoreChallengeRequest
SubmitChallengeRequest
StoreAssessmentRequest
SubmitAssessmentRequest
StoreProjectRequest
SubmitProjectRequest
```

---

# 37. Policy

```text
StudentPolicy
QuestionPolicy
ChallengePolicy
AssessmentPolicy
ProjectPolicy
ReportPolicy
```

Contoh:

Guru kelas 5A tidak boleh membuka detail murid kelas 5B jika tidak memiliki permission.

---

# 38. API Future Ready

Prefix:

```text
/api/v1
```

## Auth

```http
POST /api/v1/login
POST /api/v1/logout
GET  /api/v1/me
```

## Students

```http
GET    /api/v1/students
POST   /api/v1/students
GET    /api/v1/students/{id}
PUT    /api/v1/students/{id}
DELETE /api/v1/students/{id}
```

## Questions

```http
GET    /api/v1/questions
POST   /api/v1/questions
GET    /api/v1/questions/{id}
PUT    /api/v1/questions/{id}
DELETE /api/v1/questions/{id}
```

## Challenges

```http
GET  /api/v1/challenges
POST /api/v1/challenges
GET  /api/v1/challenges/{id}
PUT  /api/v1/challenges/{id}
POST /api/v1/challenges/{id}/submit
GET  /api/v1/challenges/{id}/results
```

## Assessments

```http
GET  /api/v1/assessments
POST /api/v1/assessments
GET  /api/v1/assessments/{id}
POST /api/v1/assessments/{id}/start
POST /api/v1/assessments/{id}/submit
GET  /api/v1/assessments/{id}/result
```

## Projects

```http
GET  /api/v1/projects
POST /api/v1/projects
GET  /api/v1/projects/{id}
POST /api/v1/projects/{id}/submit
```

## Reports

```http
GET /api/v1/reports/student/{id}
GET /api/v1/reports/class/{id}
GET /api/v1/reports/school
```

Jika aplikasi tetap Laravel + Livewire monolith, API penuh belum wajib.

---

# 39. UI/UX

## Karakter Visual

- Ceria.
- Profesional.
- Ramah anak.
- Tidak terlalu ramai.
- Mudah digunakan guru.

## Warna

```text
Navy       #0E3A78
Blue       #2F80ED
Green      #18A957
Orange     #F47B20
Purple     #7D50D8
Pink       #E84A83
Background #F5F8FC
```

## Typography

Rekomendasi:

- Inter.
- Poppins.
- Nunito.

## Komponen

- Card.
- Table.
- Input.
- Select.
- Textarea.
- Button.
- Badge.
- Alert.
- Modal.
- Toast.
- Pagination.
- Tabs.
- Breadcrumb.
- Empty state.
- Skeleton/loading.

## Responsive

- Desktop.
- Laptop.
- Tablet.
- Smartphone.

---

# 40. UX Murid

Halaman murid dibuat sesederhana mungkin.

Contoh:

```text
Tantangan #27
Kamis Data
Interpretasi Data

[SOAL]

A
B
C
D

Jelaskan caramu:

[TEXTAREA]

[KIRIM]
```

Button harus besar dan mudah disentuh.

---

# 41. UX Guru

Guru harus dapat membuat tantangan secara singkat:

```text
Tambah
↓
Pilih Soal
↓
Pilih Kelas
↓
Pilih Jadwal
↓
Publish
```

Hindari form panjang bila tidak diperlukan.

---

# 42. Error dan Empty State

Contoh:

> Belum ada tantangan hari ini.

> Belum ada asesmen aktif.

> Belum ada dokumentasi untuk proyek ini.

Error:

> Jawaban belum berhasil disimpan. Periksa koneksi lalu coba kembali.

Jangan tampilkan stack trace di production.

---

# 43. Security Requirements

## Authentication

- Password hashing.
- Session secure.
- CSRF.
- Rate limit.

## Authorization

- Policy.
- Permission.
- Scope kelas.

## SQL Injection

Gunakan Eloquent/Query Builder/parameter binding.

## XSS

- Escape output.
- Sanitize rich text.
- Jangan render input user sebagai HTML mentah.

## IDOR

Periksa kepemilikan/hak akses setiap record.

## Mass Assignment

Atur `$fillable`/`$guarded`.

## Upload

- whitelist MIME,
- batasi ukuran,
- random filename,
- larang executable,
- jangan percaya extension saja.

## Secret

Gunakan `.env`.

Jangan commit credential.

---

# 44. Security Headers

Direkomendasikan:

- Content-Security-Policy.
- X-Content-Type-Options.
- Referrer-Policy.
- Permissions-Policy.
- frame-ancestors/X-Frame-Options.

Production wajib HTTPS.

---

# 45. Privacy Data Murid

- NISN tidak ditampilkan publik.
- Data pribadi dibatasi.
- Foto murid tidak otomatis menjadi publik.
- Akses laporan menggunakan permission.
- HTTPS.
- Audit aktivitas penting.
- Hindari menyalin data production ke staging tanpa masking.

---

# 46. File Storage

Awal:

```text
storage/app/public
```

Folder:

```text
students/
questions/
projects/
galleries/
reports/
```

Jika galeri membesar:

- object storage,
- S3-compatible,
- MinIO,
- storage cloud.

Video besar tidak disarankan disimpan langsung pada MVP.

---

# 47. Media Optimization

Foto:

- resize,
- compress,
- thumbnail.

Contoh limit:

```text
5 MB / foto
```

Sesuaikan kapasitas server.

---

# 48. Import Excel

Dapat digunakan untuk:

- murid,
- guru,
- bank soal.

Workflow:

```text
Upload
↓
Preview
↓
Validasi
↓
Tampilkan Error
↓
Konfirmasi
↓
Import
↓
Ringkasan
```

Jangan langsung memasukkan data yang belum tervalidasi.

---

# 49. Export

Excel:

- data murid,
- nilai,
- tantangan,
- asesmen,
- proyek,
- laporan.

PDF:

- laporan murid,
- laporan kelas,
- asesmen,
- LKPD.

Rekomendasi:

- Maatwebsite Excel.
- DomPDF.

---

# 50. Queue

Gunakan queue untuk:

- export besar,
- generate PDF besar,
- email,
- thumbnail,
- notifikasi,
- recalculation berat.

Untuk awal:

```text
QUEUE_CONNECTION=database
```

Redis dapat digunakan jika kebutuhan meningkat.

---

# 51. Scheduler

Laravel Scheduler:

- menutup asesmen otomatis,
- reminder deadline,
- recalculation,
- cleanup temp file,
- backup.

---

# 52. Performance

Target:

- page normal < 3 detik pada koneksi wajar,
- pagination,
- eager loading,
- hindari N+1,
- cache master data,
- lazy load media,
- thumbnail galeri.

Index penting:

- users.email,
- students.nisn,
- class_students.class_id,
- class_students.student_id,
- questions.domain_id,
- daily_challenges.class_id,
- challenge_date,
- student_challenge_answers.student_id,
- assessments.class_id,
- student_assessments.student_id.

---

# 53. Backup

Minimal:

- database harian,
- file/media,
- backup sebelum deployment besar,
- prosedur restore.

Contoh retention:

```text
Daily   7 hari
Weekly  4 minggu
Monthly 3 bulan
```

Sesuaikan kebijakan sekolah.

---

# 54. Logging dan Monitoring

Monitor:

- aplikasi,
- database,
- disk,
- queue,
- backup,
- HTTP errors.

Jangan log:

- password,
- secret token,
- data sensitif yang tidak diperlukan.

---

# 55. Deployment

Rekomendasi:

```text
Linux
Nginx
PHP 8.3+
MySQL 8 / MariaDB
SSL
Supervisor optional
Redis optional
```

Contoh production:

```bash
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
npm ci
npm run build
```

---

# 56. Environment

```text
APP_ENV=production
APP_DEBUG=false
APP_URL=https://domain-sekolah

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tuah_numerasi
DB_USERNAME=tuah_user

SESSION_DRIVER=database
QUEUE_CONNECTION=database
CACHE_STORE=file
```

Credential asli tidak ditulis di dokumentasi.

---

# 57. Environment Development

Minimal:

- Local.
- Staging.
- Production.

Jangan coding langsung di production.

---

# 58. Testing

## Unit Test

- scoring,
- growth,
- domain score,
- competency level.

## Feature Test

- login,
- tambah murid,
- create question,
- publish challenge,
- submit challenge,
- start assessment,
- submit assessment,
- authorization,
- report.

## UAT

Melibatkan:

- Admin.
- Guru.
- Kepala sekolah.
- Perwakilan murid.

---

# 59. Contoh UAT

## UAT Login Guru

**Precondition:** akun guru aktif.

**Steps:**

1. Buka login.
2. Isi akun.
3. Klik Masuk.

**Expected:**

- Berhasil login.
- Masuk Dashboard Guru.
- Menu sesuai role.

## UAT Tantangan

**Expected:**

- Tantangan muncul hanya di kelas terkait.
- Jawaban tersimpan.
- Reasoning tersimpan.
- Guru dapat melihat hasil.

## UAT Permission

Guru kelas A membuka URL murid kelas B.

**Expected:**

```text
403 Forbidden
```

atau akses ditolak dengan aman.

---

# 60. Acceptance Criteria MVP

MVP siap digunakan apabila:

- [ ] Login berjalan.
- [ ] Role/permission berjalan.
- [ ] Master tahun ajaran berjalan.
- [ ] Semester berjalan.
- [ ] Kelas berjalan.
- [ ] Murid berjalan.
- [ ] Bank soal berjalan.
- [ ] Tantangan berjalan.
- [ ] Murid dapat submit.
- [ ] Asesmen berjalan.
- [ ] Timer dan submit aman.
- [ ] Scoring benar.
- [ ] Domain score benar.
- [ ] Peta kemampuan muncul.
- [ ] Dashboard guru berjalan.
- [ ] Laporan dapat diekspor.
- [ ] Responsive.
- [ ] Security dasar diterapkan.
- [ ] UAT selesai.

---

# 61. Roadmap

## Phase 1 — MVP

1. Authentication.
2. Role & Permission.
3. Tahun Ajaran.
4. Semester.
5. Kelas.
6. Guru.
7. Murid.
8. Domain.
9. Materi.
10. Bank Soal.
11. Tantangan.
12. Asesmen.
13. Scoring.
14. Peta Kemampuan.
15. Dashboard.
16. Laporan.

## Phase 2

- Proyek.
- Rubrik.
- Submission.
- Galeri.
- Notifikasi.
- Import Excel.
- Dashboard Kepala Sekolah lanjutan.

## Phase 3

- AI insight.
- AI draft soal.
- Rule-based recommendation.
- Parent portal.
- Gamification.
- PWA.
- Mobile API.
- Multi-school.

---

# 62. Sprint Rekomendasi

## Sprint 1

- Setup Laravel.
- Auth.
- Role.
- Layout.
- Master dasar.

## Sprint 2

- Guru.
- Murid.
- Kelas.
- Import.

## Sprint 3

- Domain.
- Materi.
- Bank soal.

## Sprint 4

- Tantangan.
- Student answer.

## Sprint 5

- Asesmen.
- Timer.
- Scoring.

## Sprint 6

- Peta kemampuan.
- Dashboard.

## Sprint 7

- Laporan.
- PDF.
- Excel.

## Sprint 8

- Proyek.
- Galeri.

## Sprint 9

- QA.
- Security hardening.
- UAT.
- Production release.

---

# 63. AI Insight — Future

AI dapat membantu guru dengan:

- merangkum performa,
- mendeteksi pola,
- menyusun rekomendasi,
- membuat draft soal.

Contoh:

> Ahmad menunjukkan perkembangan baik pada Bilangan, tetapi nilai Data berada di bawah rata-rata selama tiga aktivitas terakhir.

Rekomendasi:

> Berikan latihan membaca tabel dan diagram sederhana sebelum interpretasi data yang lebih kompleks.

AI tidak boleh:

- mengubah nilai otomatis,
- membuat keputusan final,
- publish soal tanpa review,
- memberi diagnosis klinis kepada murid.

---

# 64. Rule-Based Recommendation

Sebelum menggunakan AI, sistem dapat menggunakan aturan sederhana.

Contoh:

```text
Jika Data < 60
→ latihan tabel sederhana

Jika Geometri < 60
→ latihan bentuk dan luas

Jika Penalaran < 60
→ latihan soal bertahap dengan alasan
```

Ini lebih mudah divalidasi guru.

---

# 65. Multi-School Future

Jika suatu saat digunakan sekolah lain:

Tambahkan:

```text
schools
school_users
subscriptions
```

Tabel utama diberi:

```text
school_id
```

Semua query wajib ter-scope berdasarkan sekolah.

Untuk MVP SDN 002 Batu Ampar, multi-tenant belum diperlukan.

---

# 66. Server Awal

Untuk satu sekolah, contoh awal:

```text
2 vCPU
4 GB RAM
40–80 GB NVMe/SSD
```

Ukuran final tergantung:

- jumlah murid,
- foto,
- backup,
- traffic,
- file proyek.

Laravel monolith + MySQL sudah memadai untuk satu sekolah dan data ribuan murid apabila query dirancang baik.

---

# 67. Hal yang Tidak Perlu di Awal

Tidak perlu langsung menggunakan:

- Kubernetes.
- Microservices.
- Kafka.
- Elasticsearch.
- Banyak database.
- Arsitektur kompleks.

Fokus pada:

- stabil,
- mudah,
- aman,
- benar.

---

# 68. Definition of Done

Satu fitur selesai jika:

- requirement terpenuhi,
- validasi ada,
- permission benar,
- responsive,
- error state ada,
- test sesuai kebutuhan,
- QA selesai,
- tidak ada critical bug.

---

# 69. Prioritas Bug

## Critical

- sistem down,
- data hilang,
- security breach,
- nilai salah massal.

## High

- modul utama gagal,
- submit asesmen gagal,
- report salah.

## Medium

- filter salah,
- workflow terganggu sebagian.

## Low

- typo,
- cosmetic.

---

# 70. QA Checklist

## Login

- [ ] Login valid.
- [ ] Password salah.
- [ ] User inactive.
- [ ] Logout.
- [ ] Session expired.
- [ ] Forgot password.
- [ ] Rate limit.

## Bank Soal

- [ ] Create.
- [ ] Edit.
- [ ] Archive.
- [ ] Filter.
- [ ] Search.
- [ ] Pagination.
- [ ] Upload image.
- [ ] Jawaban benar.
- [ ] Import.
- [ ] Export.

## Tantangan

- [ ] Draft.
- [ ] Schedule.
- [ ] Publish.
- [ ] Close.
- [ ] Student access.
- [ ] Answer.
- [ ] Reasoning.
- [ ] Submit.
- [ ] Feedback.

## Asesmen

- [ ] Start.
- [ ] Timer.
- [ ] Refresh.
- [ ] Autosave.
- [ ] Navigation.
- [ ] Submit.
- [ ] Auto-submit.
- [ ] Scoring.
- [ ] Essay review.
- [ ] Domain score.

## Report

- [ ] Student.
- [ ] Class.
- [ ] School.
- [ ] Filter.
- [ ] PDF.
- [ ] Excel.
- [ ] Historical semester.

---

# 71. Developer Handover

Developer menerima:

- [ ] Dokumen spesifikasi ini.
- [ ] HTML prototype.
- [ ] Logo/brand.
- [ ] Wireframe.
- [ ] Database design.
- [ ] Role matrix.
- [ ] Acceptance criteria.
- [ ] Test scenario.
- [ ] Sample data.

Deliverable developer:

- [ ] Source code.
- [ ] Migration.
- [ ] Seeder.
- [ ] `.env.example`.
- [ ] README.
- [ ] Installation guide.
- [ ] Deployment guide.
- [ ] Backup/restore guide.
- [ ] Test result.
- [ ] UAT result.

---

# 72. Struktur View Laravel

```text
resources/views/
├── layouts/
│   ├── app.blade.php
│   ├── guest.blade.php
│   └── student.blade.php
├── dashboard/
├── students/
├── questions/
├── challenges/
├── assessments/
├── projects/
├── galleries/
├── reports/
└── settings/
```

---

# 73. Livewire Components

```text
DashboardTeacher
DashboardPrincipal
StudentTable
StudentProfile
QuestionTable
QuestionForm
ChallengeForm
ChallengePlayer
ChallengeResults
AssessmentBuilder
AssessmentPlayer
AssessmentResults
CompetencyMap
ProjectForm
ProjectSubmission
GalleryGrid
ReportStudent
ReportClass
```

---

# 74. Routes

Contoh:

```php
Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', ...);

    Route::resource('students', StudentController::class);
    Route::resource('questions', QuestionController::class);
    Route::resource('challenges', ChallengeController::class);
    Route::resource('assessments', AssessmentController::class);
    Route::resource('projects', ProjectController::class);
});
```

Tambahkan permission/policy pada masing-masing modul.

---

# 75. Seed Data Development

```text
1 Administrator
1 Kepala Sekolah
2 Guru
2 Kelas
20 Murid
5 Domain
50 Soal
5 Tantangan
1 Asesmen
```

Demo account hanya digunakan di staging, bukan production.

---

# 76. Git

Untuk tim kecil:

```text
main
feature/*
fix/*
```

Atau:

```text
main
develop
feature/*
fix/*
```

Jangan commit:

- `.env`,
- password,
- API key,
- file rahasia.

---

# 77. CI/CD

Flow yang dapat digunakan:

```text
Push
↓
Lint
↓
Test
↓
Build
↓
Deploy Staging
↓
UAT
↓
Approval
↓
Production
```

---

# 78. Production Checklist

- [ ] APP_DEBUG=false.
- [ ] HTTPS aktif.
- [ ] DB backup.
- [ ] Storage permission benar.
- [ ] Queue aktif.
- [ ] Scheduler aktif.
- [ ] Cache production.
- [ ] Tidak ada akun dummy.
- [ ] Permission diuji.
- [ ] UAT selesai.
- [ ] Backup restore pernah diuji.
- [ ] Error log bersih dari critical error.

---

# 79. Pertanyaan yang Perlu Dipastikan Sebelum Coding Final

1. Sistem hanya untuk kelas tertentu atau semua kelas?
2. Apakah satu guru bisa menangani beberapa kelas?
3. Apakah murid login sendiri?
4. Apakah semua asesmen menggunakan timer?
5. Apakah nilai langsung terlihat murid?
6. Apakah proyek individu, kelompok, atau keduanya?
7. Apakah galeri dapat dilihat publik?
8. Apakah orang tua perlu akun?
9. Apakah sekolah membutuhkan approval kepala sekolah sebelum publish program?
10. Apakah aplikasi hanya satu sekolah atau dipersiapkan menjadi produk untuk sekolah lain?

---

# 80. Asumsi MVP Jika Belum Diputuskan

- Satu sekolah.
- Banyak kelas.
- Guru dapat menangani satu atau lebih kelas.
- Murid login sendiri.
- Timer asesmen optional.
- Nilai dapat disembunyikan.
- Proyek individu pada MVP.
- Parent portal belum ada.
- Galeri dapat diatur publish/private.
- Kepala sekolah monitoring, bukan approval transaksi.

---

# 81. Prompt Master untuk Codex / AI Programmer

```text
Anda adalah Senior Laravel Developer.

Bangun web application bernama TUAH NUMERASI untuk SDN 002 Batu Ampar.

STACK:
- Laravel 12
- PHP 8.3+
- MySQL
- Blade
- Livewire
- Tailwind CSS
- Alpine.js
- Spatie Laravel Permission
- Maatwebsite Excel
- DomPDF

TUJUAN:
TUAH NUMERASI adalah platform pembelajaran, asesmen, monitoring, dan pelaporan numerasi.

ROLE:
1. Administrator
2. Kepala Sekolah
3. Guru
4. Murid

DOMAIN:
1. Bilangan
2. Geometri
3. Pengukuran
4. Data
5. Penalaran

MODUL:
- Authentication
- User Management
- Tahun Ajaran
- Semester
- Kelas
- Guru
- Murid
- Bank Soal
- Tantangan Harian
- Asesmen Awal/Tengah/Akhir
- Peta Kemampuan
- Dashboard
- Proyek Numerasi
- Galeri
- Laporan PDF/Excel
- Audit Log
- Settings

RULES:
- Authorization di backend.
- Gunakan Policy dan Permission.
- Form Request untuk validation.
- Service layer untuk scoring.
- Database transaction untuk submit penting.
- Hindari N+1.
- Pagination.
- Soft delete untuk data yang perlu histori.
- Password hash.
- CSRF.
- Rate limiting.
- Secure upload.
- Responsive UI.
- Jangan gunakan microservices.
- Jangan hard-code KPI.
- Jangan mengubah histori asesmen ketika bank soal diedit.

WORKFLOW:
Login
→ Asesmen Awal
→ Pemetaan Kemampuan
→ Tantangan Harian
→ Proyek
→ Monitoring Guru
→ Asesmen Tengah
→ Penguatan
→ Asesmen Akhir
→ Laporan

KERJAKAN BERTAHAP.

TAHAP 1:
1. Setup Laravel.
2. Authentication.
3. Role & Permission.
4. Academic Year.
5. Semester.
6. Classes.
7. Teachers.
8. Students.
9. Numeracy Domains.

SETELAH SELESAI TAHAP 1:
- tampilkan file yang dibuat
- migration
- model
- route
- policy
- permission
- test
- cara menjalankan
- risiko/hal yang belum selesai

Jangan lanjut modul berikutnya sebelum tahap pertama stabil.
```

---

# 82. Prompt Bank Soal

```text
Lanjutkan project TUAH NUMERASI.

Bangun modul Bank Soal.

Field:
- code
- grade
- domain
- material
- level
- question_type
- context
- question_text
- image
- explanation
- weight
- status

Multiple choice:
- options
- correct answer

Fitur:
- CRUD
- filter
- search
- pagination
- duplicate
- preview
- soft delete
- permission
- import Excel ready
- feature tests

Validasi:
- question wajib
- domain wajib
- minimal 2 pilihan untuk multiple choice
- harus ada jawaban benar
- weight > 0

Gunakan secure file upload.
```

---

# 83. Prompt Tantangan

```text
Bangun modul Tantangan Numerasi Harian.

Guru:
- create
- select class
- schedule
- select questions
- preview
- publish
- close
- results

Murid:
- hanya melihat challenge kelasnya
- answer
- reasoning
- submit
- feedback sesuai konfigurasi

Simpan:
- answer
- reasoning
- correct/incorrect
- score
- start time
- submitted time
- duration

Cegah:
- akses kelas lain
- double submit
- submit setelah close jika tidak diizinkan
```

---

# 84. Prompt Asesmen

```text
Bangun modul Asesmen Diagnostik.

TYPE:
INITIAL
MID
FINAL

Fitur:
- builder
- class
- question selection
- duration
- schedule
- shuffle
- publish
- start
- autosave
- timer
- submit
- auto-submit
- scoring
- essay grading
- domain score
- comparison
- result

Status:
draft
scheduled
active
closed
review
completed

Gunakan question snapshot ketika assessment dipublish.
Cegah double submit.
Timer wajib server-side.
```

---

# 85. Prompt Dashboard

```text
Bangun Dashboard Guru.

KPI:
- jumlah murid
- tantangan selesai
- rata-rata numerasi
- persentase murid berkembang
- proyek selesai

Charts:
- perkembangan kelas
- nilai per domain

Widgets:
- Tantangan Hari Ini
- Murid Membutuhkan Perhatian

Semua data berasal dari database.
Jangan hard-code angka.
Optimalkan query.
```

---

# 86. Prompt Security Review

```text
Review keamanan TUAH NUMERASI.

Periksa:
- authentication
- authorization
- IDOR
- CSRF
- XSS
- SQL injection
- mass assignment
- file upload
- session
- rate limiting
- password
- logs
- teacher accessing another class
- student accessing another student
- assessment double submit

Hasilkan:
1. Temuan terverifikasi
2. Risiko potensial
3. File/endpoint terkait
4. Dampak
5. Prioritas
6. Perbaikan
7. Cara verifikasi ulang

Jangan menyatakan vulnerability sebagai temuan jika belum diverifikasi.
```

---

# 87. Prompt QA

```text
Bertindak sebagai QA Engineer untuk TUAH NUMERASI.

Buat test case:
- Login
- User
- Student
- Class
- Question Bank
- Daily Challenge
- Assessment
- Scoring
- Competency Map
- Project
- Gallery
- Reports
- Permission
- Security

Format:
ID
Module
Scenario
Precondition
Steps
Expected Result
Priority
Status
```

---

# 88. Rekomendasi Implementasi

Urutan paling aman:

```text
1. UI Layout
2. Authentication
3. Role & Permission
4. Master Data
5. Murid & Kelas
6. Bank Soal
7. Tantangan
8. Asesmen
9. Scoring
10. Peta Kemampuan
11. Dashboard
12. Report
13. Project
14. Gallery
15. AI
```

Jangan mulai dari AI.

Data dan workflow utama harus stabil terlebih dahulu.

---

# 89. Kesimpulan

TUAH NUMERASI sebaiknya dikembangkan sebagai **platform pembelajaran numerasi berbasis data**, bukan hanya website pengerjaan soal.

Arsitektur yang direkomendasikan untuk tahap awal:

```text
Laravel Monolith
     │
     ├── Blade / Livewire
     │
     ├── MySQL
     │
     ├── File Storage
     │
     └── Queue/Scheduler
```

Prioritas utama:

1. Workflow mudah.
2. Hak akses aman.
3. Data nilai akurat.
4. Peta kemampuan bermanfaat.
5. Dashboard tidak sekadar dekorasi.
6. Laporan mengurangi pekerjaan manual.
7. Struktur tetap mudah dikembangkan ke fitur AI atau multi-school di masa depan.

---

## END OF DOCUMENT

**TUAH NUMERASI — SDN 002 Batu Ampar**  
**Tumbuh Unggul melalui Aktivitas Harian Numerasi**  
**Berhitung, Bernalar, Memecahkan Masalah!**
