SK CENTRAL MANAGER v1.0  —  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
---------
a. cPanel -> File Manager -> public_html -> Upload file zip ini -> Extract.
   Hasilnya folder:  public_html/skcentral/
   (boleh diganti nama / ditaruh di subdomain, URL feed mengikuti otomatis)

b. Buka di browser:  https://DOMAIN-ANDA/skcentral/
   Pertama kali diminta membuat SANDI ADMIN (min. 6 karakter). Langsung buat,
   jangan ditunda -> setelah itu halaman ini selalu minta sandi.

c. Selesai. 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/ dibuat otomatis. Kalau muncul
   error "tidak bisa ditulis", set permission folder skcentral/ ke 755
   (File Manager -> klik kanan -> Change Permissions).


2. HUBUNGKAN KE SK CENTRAL APP
------------------------------
Di panel, kotak kiri "URL server untuk SK Central App" ada 2 URL, salin salah satu:

   https://DOMAIN-ANDA/skcentral/feed.php?m=default      <- dinamis (disarankan)
   https://DOMAIN-ANDA/skcentral/feeds/default.json      <- salinan statis

Di SK Central App: ikon gear (kanan atas) -> "Server (JSON aplikasi)" -> tempel URL
-> Simpan. Aplikasi cek daftar dari server tiap kali dibuka + tiap 30 menit
(ada tombol "Segarkan daftar" di beranda).

Opsional (biar app baru tanpa setting apa pun langsung dapat daftar):
SK Central App bawaannya membaca https://ksm168.biz.id/ksmapps.json. Kalau manager
dipasang di ksm168.biz.id, tambahkan di public_html/.htaccess baris berikut:

   RewriteEngine On
   RewriteRule ^ksmapps\.json$ /skcentral/feed.php?m=default [L,QSA]


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
                         skcentral/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
----------------
skcentral/
  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
  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://DOMAIN/skcentral/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"}.
