Memuat
Project
  • Klien:   Jamkrindo
  • Sistem Informasi
  • Tanggal:   Jan 2025

Jamkrindo Manifest: Manifest dan Checkpoint Kehadiran Acara

Sampul project Jamkrindo Manifest: Manifest dan Checkpoint Kehadiran Acara

Aplikasi web untuk 145 peserta acara Jamkrindo 2025. Peserta cukup mengetik nama untuk melihat jatah kendaraan, villa, dan kasurnya, lalu menekan satu tombol untuk checkpoint kehadiran.

Login (desktop)
Beranda peserta (desktop)

Latar belakang

Jamkrindo menggelar acara CCB 2025 untuk 145 karyawan yang berangkat ke dua tujuan berbeda di tanggal yang sama. Rombongan Kantor Cabang Khusus Jakarta menuju De Boekit Villas di Sentul dengan tiga unit ELF. Rombongan Kantor Wilayah bersama cabang Tangerang, Serang, Bekasi, Bogor, dan Cibinong menuju Hotel Melia Purosani di Yogyakarta dengan tiga bus. Setiap peserta sudah punya jatah masing-masing: kendaraan mana yang dinaiki, villa atau kamar mana yang ditempati, sampai tipe kasur yang didapat.

Data sebanyak itu sulit dibagikan sebagai satu berkas statis. Tiap orang sebenarnya cuma butuh satu baris miliknya sendiri, sementara panitia butuh tampilan sebaliknya: seluruh baris sekaligus, plus tahu siapa yang sudah berkumpul dan siapa yang belum. Dua kebutuhan itu yang saya kerjakan.

Solusi

Saya membangun aplikasi PHP native yang dipakai langsung di lokasi acara. Peserta membuka halaman, mengetik namanya, lalu sistem mengenali venue-nya dari database dan menampilkan halaman yang sesuai. Orang Sentul melihat rundown Sentul dan daftar peserta Sentul. Orang Jogja melihat versinya sendiri, termasuk titik temu di KM 58 Cibitung dan rest area KM 207 yang memang cuma relevan buat rombongan itu.

Di halaman yang sama ada tombol checkpoint. Peserta menekannya kalau sudah siap berangkat, dan namanya langsung masuk ke tabel kehadiran hari itu. Panitia login sebagai admin, lalu melihat daftar lengkap kedua venue: siapa yang sudah menekan tombol beserta jamnya, dan siapa yang masih kosong.

Fitur utama

  • Login cukup dengan nama yang terdaftar, tanpa password
  • Routing halaman otomatis berdasarkan venue peserta yang tersimpan di session
  • Checkpoint kehadiran yang hanya bisa ditekan sekali per hari per orang
  • Dashboard admin dengan status Sudah atau Belum beserta jam masuk, terpisah antara Sentul dan Jogja
  • Manifest pribadi berisi kendaraan, nama villa, kapasitas kamar, dan tipe kasur
  • Tabel manifest seluruh peserta dengan 12 kolom data
  • Unduh manifest pribadi, manifest seluruh peserta, dan rundown acara sebagai gambar JPEG
  • Rundown acara yang isinya berbeda antara rombongan Sentul dan Jogja
  • CRUD peserta dari sisi admin lengkap dengan pencarian tabel

Tantangan teknis

Keputusan paling berani di project ini adalah menghapus password. Penggunanya karyawan dari berbagai divisi, banyak yang tidak akan repot mengingat kredensial untuk aplikasi yang umurnya tiga hari. Jadi saya buat login yang mencocokkan nama saja, dengan normalisasi REPLACE(LOWER(user_nama_lengkap), ' ', '') di sisi query. Dengan begitu "D. Ihwan" dan "d.ihwan" tetap dianggap orang yang sama. Saya sadar ini menurunkan keamanan. Pertimbangannya, isi aplikasi hanya jadwal dan pembagian kamar, bukan data yang berbahaya kalau terlihat sesama peserta, dan aplikasinya memang cuma hidup selama acara berlangsung.

Bagian yang paling sering saya perbaiki justru query dashboard absensi. Versi pertama saya menaruh filter tanggal di klausa WHERE, dan hasilnya peserta yang belum absen ikut hilang dari daftar. Padahal justru mereka yang perlu dilihat panitia. Perbaikannya memindahkan DATE(a.absen_masuk) = CURDATE() ke dalam kondisi ON pada LEFT JOIN, jadi seluruh peserta tetap muncul dan yang belum absen tampil dengan kolom kosong. Urutannya saya atur supaya yang sudah absen naik ke atas.

Masalah lain datang dari zona waktu. Jam checkpoint sempat tercatat mundur tujuh jam karena server memakai UTC, dan itu baru ketahuan saat uji coba. Saya kunci dengan date_default_timezone_set('Asia/Jakarta') sebelum insert, bukan mengandalkan konfigurasi server.

Untuk kondisi lapangan, saya menambahkan unduh manifest sebagai gambar memakai html2canvas. Sinyal di area villa tidak bisa diandalkan, jadi peserta bisa menyimpan jatah kamar dan rundown di galeri ponsel dan tetap membukanya meski koneksi hilang.

Ada juga bagian yang saya akui belum rapi. Tabel peserta memakai nama lengkap sebagai primary key, sehingga memperbaiki typo nama berarti mengubah primary key sekaligus memutus relasi ke tabel absensi. Admin pun dikenali dari pencocokan nama, bukan dari kolom peran di database.

Peran saya

Saya mengerjakan project ini sendirian dari awal sampai dipakai di lapangan. Mulai dari merancang skema dua tabel, menulis seluruh query mysqli dengan prepared statement, menyusun tampilan peserta dan dashboard admin, sampai memasukkan data 145 peserta beserta pembagian kendaraan dan kamarnya.

Hasil dan pengembangan selanjutnya

Aplikasi ini dipakai pada acara 21 sampai 23 Februari 2025. Total ada 47 checkpoint yang tercatat di database, dan 38 di antaranya masuk pada 22 Februari 2025 saja, hari paling padat acara. Checkpoint pertama hari itu tercatat pukul 06.25 dan yang terakhir pukul 14.50.

Beberapa hal yang ingin saya kerjakan kalau ada acara berikutnya. Checkpoint sekarang masih berupa tombol biasa, jadi secara teknis bisa ditekan siapa saja yang tahu nama orang lain. QR code per peserta akan menutup celah itu. Rekap absensi juga baru bisa dilihat di layar, padahal panitia biasanya butuh berkas Excel untuk laporan. Selain itu saya ingin mengganti primary key nama dengan ID numerik dan memindahkan penentuan admin ke kolom peran, supaya perbaikan data tidak lagi berisiko. Satu lagi, checkpoint saat ini dibatasi sekali sehari, sementara acara tiga hari sebenarnya punya beberapa titik kumpul per hari.

Teknologi

PHP MySQL Bootstrap jQuery JavaScript

Project serupa

Siap mewujudkan ide Anda? Saya siap membantu

© 2026 Axa Rajandrya. Seluruh hak cipta dilindungi.

+
+