admin-mvp-1-pricing-base-override.html · model = Base + Override cascade (SubjectLevel ?? Subject ?? Base) · Stack: React 19 + TanStack Start (SPA) · shadcn amber b1MJ9vRwY6
Cara nampilin admin UI untuk model Base + Override. Layout decision untuk partner engineering — bukan model decision (model sudah final di file canonical).
SubjectLevel ?? Subject ?? Base
Catatan istilah: Tingkat (SD 1 … Profesional) ≠ SubjectLevel (jenjang internal mapel, mis. HSK 1–6) ≠ Kategori (grouping SD/SMP/SMA — pengelompokan, bukan dimensi harga).
| Segmentasi | SD | SMP | Non-sekolah | |||||
|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 7 | 8 | 9 | Umum | Prof | |
| REG | 130rb | 135rb | 140rb | 170rb | 175rb | 180rb | 200rb | 220rb |
| REG+ | 180rb | 185rb | 190rb | 220rb | 225rb | 230rb | 250rb | 270rb |
| INT | 230rb | 235rb | 240rb | 270rb | 275rb | 280rb | 300rb | 320rb |
?tab=override)| Seg | SMA 10 | SMA 11 | SMA 12 | Umum |
|---|---|---|---|---|
| REG | 200rbbase | 205rbbase | 210rbbase | base 250rb250rb |
| INT | 300rbbase | 305rbbase | base 320rb300rb | 350rbbase |
| Seg | SMA | Non-sekolah | |||
|---|---|---|---|---|---|
| 10 | 11 | 12 | Umum | Prof | |
| REG | 200rb | 205rb | 210rb | 230rb | 250rb |
| INT | 300rb | 305rb | 310rb | 330rb | 350rb |
SubjectLevel ?? Subject ?? Base — sel abu = inherit Harga Dasar di atas, sel amber = Harga Khusus subject ini.| Seg | SMA | Non-sekolah | |||
|---|---|---|---|---|---|
| 10 | 11 | 12 | Umum | Prof | |
| REG | 200rbbase | 205rbbase | 210rbbase | base 230rb350rb | base 250rb400rb |
| INT | 300rbbase | 305rbbase | tidak ditawarkan | 330rbbase | base 350rb450rb |
| Seg | SMA 10 | SMA 11 | Umum | Prof |
|---|---|---|---|---|
| REG | 200rb | 205rb | 230rb | 250rb |
| INT | 300rb | 305rb | 330rb | 350rb |
Base ~45 sel di-set sekali (kerja ringan). Beban nyata = atur applicability + override per subject untuk puluhan subject. 6 mekanisme checkpoint + reduce-entry, di-reframe ke model baru.
Sel base atau override blur → debounce 500ms → tersimpan otomatis. Tanpa tombol "Simpan semua" + cemas kehilangan kerja. Toast Sonner konfirmasi tiap simpan.
Sel yang diubah (belum publish) bertanda titik. Hitung override per subject ("3 Harga Khusus") = momentum + discoverability tanpa buka detail.
Preset Tingkat ("SD–SMA", "SMA + Umum"), "Samakan ke base" (hapus semua override → balik inherit), %-bump pada override. Kurangi entry — mayoritas subject cukup inherit.
Override & applicability digarap di draft — tak live sampai "Publikasikan". Subject setengah-jadi tak nyentuh production. Bisa garap bertahap tanpa takut salah live.
Applicability default OFF → admin hanya nyalakan Tingkat yang relevan, tak isi sel yang tak ditawarkan. Mengecilkan permukaan kerja secara struktural.
Buka lagi → "Terakhir diedit: IELTS · INT · Prof. [Lanjut dari sini]". Tak perlu ingat berhenti di mana saat sapu banyak subject.
Saat bikin subject baru, tawarkan "Salin override + applicability dari subject serupa" (mis. Mandarin baru ← struktur Inggris). Head-start, tak mulai dari kosong.