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
Server gelanggang
- Laravel 13 · FrankenPHP
- Event log append-only
- SQLite per gelanggang
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
.envlokal tidak mewakili produksi. - Detail kecil bisa mahal. Di Windows,
localhostalih-alih127.0.0.1menambah sekitar 230 ms per broadcast. - Sederhana untuk operator itu fitur. Backup cukup salin file, start cukup satu tombol.