SK CENTRAL MANAGER v1.0.1  —  Powered by SK.Dev
================================================
Panel admin di cPanel untuk mengelola daftar aplikasi SK Central App.
Tanpa MySQL: "database"-nya file JSON. Bisa banyak daftar (multi JSON),
tiap daftar punya URL server sendiri, tinggal pilih mana yang dipakai di aplikasi.

Butuh: PHP 8.0+ (disarankan 8.1/8.2/8.3), ekstensi GD (bawaan cPanel) untuk potong logo.


1. PASANG (lokasi bawaan: https://skcentral.ardinanta.com/app/)
------------------------------------------------------------
SK Central App (.exe v2.1.1) bawaannya membaca:
   https://skcentral.ardinanta.com/app/noapp.json
Jadi pasang panel ini di subdomain skcentral.ardinanta.com, folder /app/.

a. cPanel -> Subdomains -> buat "skcentral" (domain ardinanta.com). Catat
   Document Root-nya (mis. public_html/skcentral.ardinanta.com). Pastikan SSL
   (AutoSSL) aktif untuk subdomain itu karena aplikasi memakai https.
b. File Manager -> masuk ke Document Root subdomain -> Upload zip ini -> Extract.
   Hasilnya folder:  <document root>/app/   (berisi index.php, api.php, feed.php ...)
   (Boleh ditaruh di tempat lain; URL feed mengikuti otomatis — tapi URL bawaan
   .exe hanya jalan kalau lokasinya persis seperti di atas.)
c. Buka di browser:  https://skcentral.ardinanta.com/app/
   Pertama kali diminta membuat SANDI ADMIN (min. 6 karakter). Langsung buat,
   jangan ditunda -> setelah itu halaman ini selalu minta sandi.
d. Cek:  https://skcentral.ardinanta.com/app/noapp.json  harus menampilkan JSON
   10 aplikasi. Selesai — SK Central App langsung membaca daftar ini tanpa setting.

Daftar "default" sudah terisi 10 aplikasi SK.Dev: SK Cloud, SK OTA, GABKIDS,
KSM 168, VMAIL, KSM P3K, KSM KEYS, KSM ATTD, KDP 168, SK TASKING.

Catatan izin: folder data/, feeds/, logos/ + file .htaccess dibuat otomatis.
Kalau muncul error "tidak bisa ditulis", set permission folder app/ ke 755
(File Manager -> klik kanan -> Change Permissions).


2. HUBUNGKAN KE SK CENTRAL APP
------------------------------
Daftar "default" = URL bawaan .exe (noapp.json), tidak perlu setting apa pun.
noapp.json dilayani dinamis oleh feed.php lewat .htaccess (mod_rewrite); bila
mod_rewrite tidak ada, dipakai file statis noapp.json yang ditulis ulang tiap Simpan.

Untuk daftar lain (multi JSON) atau lokasi lain, di panel kotak kiri
"URL server untuk SK Central App" ada URL yang bisa disalin:

   https://skcentral.ardinanta.com/app/feed.php?m=<id>      <- dinamis (disarankan)
   https://skcentral.ardinanta.com/app/feeds/<id>.json      <- salinan statis

Di SK Central App: ikon gear (kanan atas) -> "Server (JSON aplikasi)" -> tempel URL
-> Tes & Simpan. Aplikasi cek daftar dari server tiap kali dibuka + tiap 30 menit
(ada tombol "Segarkan daftar" di beranda). Kalau server tidak terjangkau, aplikasi
memakai daftar terakhir yang tersimpan, atau daftar bawaan (10 aplikasi yang sama,
tanpa logo).


3. MENGELOLA APLIKASI
---------------------
- "+ Tambah aplikasi"  : nama, ID, deskripsi, URL, warna monogram, tampil/sembunyi.
- Logo                 : "Unggah logo..." (PNG/JPG/WEBP/GIF, maks 6 MB) -> otomatis
                         dipotong persegi & diperkecil ke 512x512 PNG, disimpan di
                         app/logos/<id>.png. Atau isi URL gambar. Kosong = monogram.
- Auto-login           : sakelar "Auto-login (login data)":
                           URL halaman form login  -> di-GET dulu untuk ambil token/csrf
                           URL POST login data     -> tujuan POST username & password
                           Nama field username/password (bawaan: username / password)
                           Deteksi sukses: Redirect (umum PHP) / mengandung teks /
                                           tidak mengandung teks / JSON key = true
                           Field tambahan tetap (JSON), mis. {"remember":"1"}
                         Aplikasi buatan SK.Dev (KSM 168, KSM P3K, KSM KEYS) sudah terisi:
                         .../auth/login.php  field username + password, sukses = redirect.
                         Aplikasi lain (SK Cloud, SK OTA, GABKIDS, VMAIL, KSM ATTD, KDP 168,
                         SK TASKING) belum diisi -> isi sesuai form login masing-masing.
- Badge notifikasi     : URL JSON {"unread":N,...} (KSM 168 sudah terisi).
- Panah naik/turun     : urutan di beranda SK Central App.
- "Aplikasi untuk verifikasi login pertama": saat user pertama kali membuka SK Central
                         App, username+password dicek ke aplikasi ini; kalau benar
                         disimpan & dipakai auto-login ke semua aplikasi ber-login.
- "Layanan"            : teks yang tampil di beranda app sebagai "Layanan: ...".

Setiap selesai mengubah -> klik "Simpan perubahan" (bar bawah). Sebelum disimpan,
tidak ada yang berubah di aplikasi.


4. MULTI DAFTAR (MULTI JSON)
----------------------------
- "+ Baru"     : daftar kosong baru, mis. ID "cabang-2"  -> feed.php?m=cabang-2
- "Duplikat"   : salin daftar aktif jadi daftar baru lalu ubah seperlunya.
- "Impor"      : tempel JSON (format SK Central / hasil Ekspor) ke daftar aktif.
- "Ekspor"     : unduh JSON daftar aktif (untuk backup).
- "Hapus"      : hapus daftar + URL feed-nya (minimal harus tersisa 1 daftar).
Tiap daftar = 1 URL server. Di tiap PC/klien SK Central App tinggal tempel URL
daftar yang dikehendaki.


5. STRUKTUR FILE
----------------
app/
  index.php               panel admin
  api.php                 API panel (butuh login + token)
  feed.php                endpoint publik untuk SK Central App  (?m=<id daftar>)
  lib.php                 pustaka
  .htaccess               rewrite noapp.json -> feed.php?m=default
  noapp.json              salinan statis daftar "default" (fallback)
  data/config.json        sandi admin (hash)        } data/ diblokir dari web (.htaccess)
  data/manifests/<id>.json  DATABASE daftar (JSON)   }
  feeds/<id>.json         salinan statis publik (dibuat ulang tiap Simpan)
  logos/<id-app>.png      logo hasil unggah

Backup = salin folder data/ dan logos/.
Lupa sandi admin = hapus file data/config.json lewat File Manager, buka panel lagi,
buat sandi baru (daftar aplikasi tidak hilang).


6. FORMAT JSON (yang dibaca SK Central App)
-------------------------------------------
{
  "name": "SK Central",
  "services": "SK.Dev",
  "auth_app": "ksm168",
  "apps": [
    {
      "id": "ksm168", "name": "KSM 168", "description": "Inventaris & inspeksi",
      "icon": "https://skcentral.ardinanta.com/app/logos/ksm168.png",
      "url": "https://ksm168.biz.id/", "color": "#6d3ff0", "order": 1, "enabled": true,
      "login": {
        "page": "https://ksm168.biz.id/auth/login.php",
        "post": "https://ksm168.biz.id/auth/login.php",
        "fields": { "username": "username", "password": "password" },
        "extra": {}, "success": "redirect"
      },
      "badge": "https://ksm168.biz.id/api/poll.php?type=notifications"
    }
  ]
}
"success" bisa juga: {"type":"contains","value":"dashboard"} /
{"type":"not_contains","value":"Login gagal"} / {"type":"json","key":"ok"}.
