FTMS v2.5.0 — Alarm Pengajuan Substitusi

UNTUK PROYEK LAMA / LARAGON
1. Cadangkan database dan storage/app/public.
2. Salin pembaruan; pertahankan vendor, .env, database dan file unggahan.
3. Buka terminal di folder yang berisi artisan, lalu jalankan:

   php repair-cache.php
   php artisan migrate
   php artisan optimize:clear

   Folder vendor TIDAK disertakan. Gunakan vendor dari proyek sebelumnya.
   Tidak ada dependensi Composer baru. public/build sudah disertakan.
   Hanya bila vendor belum ada, jalankan composer install --no-dev.

4. Jalankan php artisan storage:link jika public/storage belum tersedia.
5. Jika memperbarui dari sebelum v2.4, manajer/coach login ulang setelah migrasi.
   v2.5 tidak menambah migrasi atau dependensi. Data lama tetap tersedia.
   Muat ulang halaman admin/panitia, lalu klik Aktifkan suara pada panel Alarm substitusi.
   Untuk menambah contoh bila diperlukan: Turnamen > Contoh Mallise Cup 2026.

Jangan memakai migrate:fresh pada database yang ingin dipertahankan.
Jika memakai Vite lama, hentikan npm run dev dan hapus public/hot.
Error Laravel\Pail\PailServiceProvider not found berasal dari cache paket lama;
repair-cache.php bisa dijalankan walaupun Artisan belum dapat dibuka.
Pastikan bootstrap/cache dan storage dapat ditulis.

CARA HAPUS MASSAL
- Pilih turnamen aktif di bagian atas.
- Centang baris, gunakan "Pilih halaman ini", atau "Pilih semua" untuk
  memilih seluruh data yang ditawarkan pada daftar (termasuk halaman lain).
- Klik "Hapus terpilih", periksa jumlah dan dampaknya, lalu konfirmasi.
- Tersedia pada pertandingan, pemain, tim, akun, panitia, penghargaan,
  turnamen, aturan turnamen, dan aturan pertandingan.
- Admin memiliki akses hapus massal; manager hanya pemain tim sendiri.
- Akun yang sedang login tidak dapat dihapus.
- Hapus laga lanjutan bersama laga sumbernya pada bagan terhubung.
- Hapus pertandingan terkait sebelum menghapus tim. Pemainnya ikut dihapus.
- Menghapus turnamen mempertahankan profil tim dan akun login.
- Untuk menghapus seluruh contoh melalui daftar biasa: pertandingan,
  kemudian tim, lalu turnamen. Periksa dampak yang tampil pada konfirmasi.
- Menu Data Contoh sudah dihapus dari sidebar.

ISI MALLISE CUP 2026
- 16 tim, 22 pemain per tim (352 nama pemain contoh), logo tiap tim.
- 4 grup dengan 24 pertandingan pada 1–12 Oktober 2026, dua laga per hari.
- Nama klub, pemain, dan pelatih adalah contoh fiktif yang dapat diedit.
- Setelah fase grup selesai, buat knockout melalui menu Bagan, sumber hasil
  grup, dua peserta per grup, ukuran 8 untuk perempat final hingga final.
- Impor ulang mempertahankan edit dan penghapusan pada contoh yang sudah ada.
- Seeder standar tidak mengembalikan contoh yang telah dihapus. Klik tombol
  contoh secara sengaja untuk membuat ulang setelah turnamennya dihapus.

Instalasi baru: baca README.md. php artisan migrate --seed membuat admin
serta Mallise Cup 2026. Login awal admin@ftms.test / password.

FITUR V2.2.0
- Halaman formasi: lapangan, daftar substitusi, lalu Meja Formasi Lengkap.
- Geser dari ikon pegangan ke posisi di lapangan atau baris meja.
- Bisa ketuk cadangan lalu ketuk posisi/tombol Masukkan, kemudian Simpan Formasi.
- Ikon pojok kanan atas: Terang, Gelap, Sistem. Mode tersimpan di browser.
- Menu Tema: pilih palet dan Template Tampilan (Standar/Stadion/Kompak).
- Dashboard dan landing memakai tema/template yang sama. Mode bawaan dari
  admin dipakai sampai pengunjung memilih mode sendiri.
- Tidak ada perubahan struktur database pada v2.2.0. Jalankan langkah update
  di atas bila juga memperbarui dari rilis yang lebih lama, lalu muat ulang
  browser agar build tampilan terbaru dimuat.

FITUR V2.3.0 — AKUN MANAJER/COACH
- Login sebagai admin atau panitia aktif dan pilih turnamen.
- Tim baru: Tim > Tambah Tim > centang Buat akun manajer/coach untuk tim ini.
  Isi nama, email login, password minimal 8 karakter, dan konfirmasi.
  Klik Simpan Tim & Akun. Akun boleh ditambahkan nanti jika pilihan tidak dicentang.
- Tim yang sudah ada: Tim > Akun Manajer/Coach > Tambah Akun > Buat Akun.
  Satu tim dapat memiliki beberapa akun dengan email yang berbeda.
- Panitia dapat mendaftarkan tim baru dengan logo dan membuat akun untuk
  tim peserta turnamen penugasannya. Penugasan harus masih aktif.
- Akun baru langsung dapat login dan hanya mengelola tim/pemain/formasi
  serta pengajuan substitusi timnya. Akun mengikuti turnamen yang diikuti tim.
- Password tersimpan sebagai hash. Pemilik akun mengganti password di Profil.
  Email yang sudah digunakan ditolak; akun lama tidak ditimpa.
- Tidak ada email otomatis. Admin/panitia menentukan kredensial saat membuat akun.
- Daftar dan penghapusan akun global tetap melalui menu Akun khusus admin.
- Tidak ada migrasi baru dari v2.2.0. Jalankan optimize:clear setelah menyalin
  rilis v2.3.0 dan muat ulang browser. Untuk v2.4.0, ikuti langkah migrasi di atas.

FITUR V2.4.0
- Sebelum kickoff: manager/coach mengatur timnya melalui Simpan Formasi
  atau Ganti Pemain Langsung. Tidak membutuhkan persetujuan admin/panitia.
- Setelah panitia menekan Mulai: setiap pergantian yang diajukan manager
  harus dikonfirmasi admin/panitia. Drag-and-drop di halaman Formasi atau
  pilihan pemain di detail pertandingan menghasilkan pengajuan.
- Menunggu persetujuan: pemain belum berubah. Disetujui: susunan pemain
  dan timeline berubah bersama. Ditolak: susunan tetap seperti semula.
- Laga selesai mengunci susunan; pengajuan tertunda menjadi tidak berlaku.
- Admin/panitia masih dapat mencatat substitusi langsung melalui Input Event.
  Koreksi event substitusi dilakukan dari urutan terakhir tim saat laga live.
- Satu akun manager/coach hanya memiliki satu sesi aktif. Login di perangkat
  baru memutus sesi lama. Perangkat lama ditolak pada akses berikutnya dan
  halaman terbuka memeriksa sesi setiap 5 detik saat terlihat/aktif.
- Login gagal tidak memutus sesi yang benar. Logout perangkat lama tidak
  memutus perangkat baru. Ingat saya hanya berlaku bagi admin/panitia.
- Akun manager yang berbeda tetap dapat bekerja bersamaan sesuai timnya.
- WAJIB php artisan migrate: ada migrasi baru untuk sesi dan riwayat substitusi.
- Paket source + public/build ini tidak membawa vendor atau node_modules.

FITUR V2.5.0 — ALARM SUBSTITUSI
- Panel Alarm substitusi tersedia pada seluruh halaman aplikasi admin/panitia.
- Panitia: hanya turnamen dengan penugasan aktif. Admin: seluruh turnamen.
  Pemantauan tetap mencakup penugasan lain saat berganti menu/turnamen.
- Klik Aktifkan suara. Tiga nada uji diputar; pastikan volume terdengar.
  Setelah itu pengajuan baru pada laga live otomatis membunyikan alarm.
- Pemeriksaan setiap 5 detik; alarm berulang sekitar setiap 15 detik selama
  ada pengajuan baru yang belum dibuka/dihentikan dan koneksi tersedia.
- Notifikasi berisi turnamen, laga, tim, pemain keluar/masuk, menit dan pengaju.
  Klik Lihat pengajuan lalu Buka pengajuan untuk menuju konfirmasi yang benar.
- Hentikan alarm hanya menghentikan pengingat pengajuan saat ini pada tab
  tersebut; persetujuan/penolakan tetap dilakukan di detail pertandingan.
  Pengajuan berikutnya membunyikan alarm kembali.
- Tes suara menguji speaker. Matikan suara notifikasi mematikan bunyi;
  notifikasi visual dan daftar menunggu tetap tersedia.
- Sebelum kickoff tidak ada alarm. Disetujui/ditolak/tidak berlaku atau laga
  selesai: pengajuan hilang dari notifikasi pada pembaruan berikutnya.
- Biarkan halaman aplikasi terbuka. Setelah refresh penuh, aktifkan kembali
  suara bila diminta. Browser dapat menangguhkan tab/perangkat terkunci;
  bunyi ketika aplikasi ditutup atau perangkat terkunci tidak dijamin.
- Saat koneksi terputus, pesan muncul dan notifikasi mencoba terhubung kembali.
- Tidak perlu layanan antrean, WebSocket, cron, atau dependensi baru.

FITUR V2.6.3 — TANPA PHP ARTISAN SERVE
- Aplikasi dapat dibuka lewat Apache Laragon/XAMPP dengan VirtualHost ftms.test.
- DocumentRoot harus diarahkan ke folder public proyek.
- public/.htaccess sudah tersedia untuk rewrite route Laravel.
- Contoh konfigurasi ada di apache/ftms-laragon-vhost.conf dan apache/ftms-xampp-vhost.conf.
- Jalankan SETUP-APACHE.bat untuk membuat .env, storage link, install dependency bila belum ada, build frontend, dan migrasi/seeder.
- Setelah setup, buka http://ftms.test. Tidak perlu menjalankan php artisan serve.
- APP_URL contoh memakai http://ftms.test. Jika memakai domain lokal lain, sesuaikan APP_URL di .env.
- Paket tetap tanpa vendor dan node_modules.

FITUR V2.6.4 — WEBHOSTING TANPA NODE DAN COMPOSER
- Hosting tidak perlu menjalankan Node/npm atau Composer.
- Buat paket siap upload dari komputer lokal dengan BUAT-PAKET-WEBHOSTING.bat.
- Hasilnya ada di dist/FTMS-WEBHOSTING-SIAP-UPLOAD.zip dan berisi vendor,
  public/build, source aplikasi, serta template .env webhosting.
- Paket source utama tetap tanpa vendor/node_modules. Vendor hanya masuk ke
  paket siap-upload yang dibuat oleh script webhosting.
- Tambahkan .env webhosting dari webhosting/.env.webhosting.example.
- Untuk cPanel/public_html, gunakan contoh webhosting/cpanel-public-index.php.example.
- Jika hosting tidak bisa membuat symlink public/storage, isi PUBLIC_DISK_ROOT
  ke path absolut public_html/storage agar upload tetap tampil.
