Lewati ke konten
Kembali ke beranda
Karya pilihan

Punakawan Digital Scoring

Scoring pencak silat real-time yang tetap jalan tanpa internet.

Sistem penilaian per gelanggang yang mengantar ketukan juri ke layar dewan dan penonton dalam hitungan milidetik lewat jaringan lokal venue, ditambah website pendaftaran kejuaraan untuk manajer tim dan penyelenggara.

Peran
Co-founder · arsitektur & pengembangan
Periode
2026 — sekarang
Teknologi
  • Laravel 13
  • Vue 3 + Inertia
  • Laravel Reverb
  • FrankenPHP / Octane
  • SQLite (WAL)
  • Livewire 3
  • Tailwind CSS
Tautan
punakawanscoring.com

Sekilas angka

  • 32 mspesan real-time antar-perangkat lewat LAN venue
  • 0 error857 ketukan dari 10 gelanggang paralel dalam 20 detik
  • 1.095 → 6query per halaman kejuaraan setelah optimasi
  • 427test otomatis di aplikasi gelanggang

Sumber angka: dokumen pengukuran internal proyek.

Arsitektur gelanggang

Perangkat petugas

  • Juri ×3
  • Dewan
  • Timer
  • Sekretaris
  • Layar penonton
WebSocket (Reverb) lewat LAN

Server gelanggang

  • Laravel 13 · FrankenPHP
  • Event log append-only
  • SQLite per gelanggang
Antrean + coba ulang

Sistem manajemen kejuaraan

Jadwal masuk, hasil keluar

Masalah

Dalam pertandingan pencak silat, setiap poin ditentukan oleh beberapa juri yang menekan tombol hampir bersamaan. Jika skor terlambat muncul di layar dewan atau penonton, ofisial tim mulai mempertanyakan hasilnya, dan keributan di pinggir gelanggang adalah risiko nyata.

Sistem scoring generasi sebelumnya mengandalkan polling: setiap layar bertanya ke server berulang kali apakah ada perubahan. Saat kejuaraan membesar, beban itu terasa. Targetnya kini adalah kejuaraan hingga 3.000 peserta, 10 gelanggang paralel, dan sekitar 100–150 perangkat aktif sekaligus.

Keputusan utama

Daripada menambal sistem lama, aplikasi gelanggang dibangun ulang dari nol dengan satu tugas: menjalankan pertandingan yang sedang berlangsung, dan tidak lebih dari itu.

  • Offline-first. Setelah jadwal sesi ditarik dari sistem manajemen kejuaraan, gelanggang berjalan penuh tanpa internet. Hasil dikirim balik lewat antrean dan dicoba ulang otomatis.
  • Satu database SQLite per gelanggang. Gangguan di gelanggang A tidak menyentuh gelanggang B, dan backup cukup dengan menyalin satu file.
  • WebSocket, bukan polling. Laravel Reverb mendorong setiap perubahan ke tablet juri, dewan, timer, dan layar penonton.
  • Server yang memutuskan. Timer dan keabsahan poin dihitung di server; jam perangkat tidak dipercaya. Tampilan tablet tetap terasa instan karena memakai optimistic UI.

Cara skor dihitung

Setiap ketukan juri disimpan sebagai event yang tidak pernah diubah (append-only). Skor adalah hasil hitung ulang dari daftar event itu, sehingga setiap angka bisa diaudit, dan koreksi atau sanggahan dicatat sebagai event baru, bukan dengan menimpa data.

Untuk kategori tanding, sebuah poin baru sah jika minimal 2 dari 3 juri menekan tombol yang sama dalam jendela waktu tertentu. Mesin ini divalidasi dengan skenario lengkap: 2/3 sah, 3/3 langsung sah, 1/3 gugur, sampai ketukan ulang yang tiba setelah jendela ditutup.

Aturan tiap regulasi dipisah menjadi modul sendiri: IPSI 2022, IPSI 2012, dan Tapak Suci, masing-masing untuk kategori tanding dan seni. Menambah regulasi baru berarti menambah modul, bukan mengubah modul yang sudah ada.

Bukti, bukan janji

Pengujian Hasil
Latensi antar-perangkat lewat WebSocket 32 ms dari sesi sekretaris ke sesi juri di perangkat lain
Load test 10 gelanggang × 3 juri 857 ketukan dalam 20 detik (±4× laju lapangan), 0 error, p95 91 ms
Jaringan buruk Kirim ulang tidak menggandakan poin; layar yang tersambung kembali memuat riwayat utuh
Test otomatis 427 test di aplikasi gelanggang

Load test dijalankan di mesin pengembangan Linux; angka resmi akan diulang di perangkat venue.

Untuk tim di lapangan

Petugas di venue bukan developer. Karena itu ada launcher desktop “Panel Lapangan” untuk menyalakan dan mematikan server, memeriksa kesehatan layanan, dan menampilkan kode QR agar tablet bisa langsung tersambung. Setiap peran punya layarnya sendiri: sekretaris, juri, dewan, timer, layar penonton, dan overlay untuk siaran langsung.

Website & pendaftaran

Sisi publik Punakawan ada di punakawanscoring.com: daftar kejuaraan, pendaftaran kontingen dan atlet oleh manajer tim, unggah bukti bayar, dan panel verifikasi untuk penyelenggara.

Pada Agustus 2026 saya mengaudit performanya dan memperbaiki temuan langsung di produksi:

Metrik Sebelum Sesudah
TTFB halaman kejuaraan 601 ms 115 ms
Query halaman kejuaraan 1.095 6
Query tabel atlet (201 atlet) 604 4
Poster di beranda (10 kartu) 5,4 MB 484 KB
loadEventEnd beranda 1.017 ms 298 ms

Salah satu temuannya: cache route Laravel ternyata tidak pernah bisa aktif karena tiga nama route terdaftar ganda. Setelah diperbaiki, deploy berjalan otomatis lewat GitHub Actions dengan test sebagai gerbang.

Yang saya pelajari

  • Ukur di tempat yang sebenarnya. Analisis awal saya tentang website sebagian keliru sampai saya mendapat akses ke server produksi. Angka dari .env lokal tidak mewakili produksi.
  • Detail kecil bisa mahal. Di Windows, localhost alih-alih 127.0.0.1 menambah sekitar 230 ms per broadcast.
  • Sederhana untuk operator itu fitur. Backup cukup salin file, start cukup satu tombol.