25 Agustus 20266 menit
Pemilihan kepala desa itu unik. Di Kabupaten Pemalang, dengan puluhan kecamatan dan ratusan desa, pemilih harus memilih di antara calon yang visi misinya sering terdengar hampir sama. Saya pernah mendengar keluhan warga seperti ini, "semua calon janjinya bagus, mau pilih yang mana". Dan yang lebih sering terjadi, keputusan jatuh karena calonnya kenal, atau karena janji yang paling lantang, bukan karena visi misinya paling masuk akal.
Saya tidak bisa memperbaiki politik desa. Tapi sebagai developer, saya bisa mencoba sesuatu yang lebih kecil, yaitu membuat alat yang membantu warga membandingkan calon secara lebih adil. Dari situ lahir Paham Kades.
Kenapa proyek ini ada
Paham Kades adalah aplikasi web yang mencocokkan calon kepala desa dengan preferensi pemilih. Warga membuka aplikasi, memilih desanya, mengisi preferensi dalam beberapa langkah, lalu aplikasi menampilkan calon mana yang paling cocok, lengkap dengan alasan singkat.
Penting saya luruskan sejak awal, proyek ini bukan pesanan dari pemerintah desa atau lembaga penyelenggara pemilu. Ini proyek pribadi yang saya kerjakan untuk belajar, persis seperti yang saya janjikan di artikel pertama blog ini. Karena itu, tidak ada satu pun angka di aplikasi ini yang berasal dari data resmi. Semua masih data contoh yang saya karang untuk 50 desa dan 133 calon, dan foto calonnya pun masih placeholder berbentuk SVG.
Jujur, itu batasan terbesar proyek ini. Aplikasi boleh sehebat apa pun, tanpa data real, hasilnya tetap hanya demo. Tapi saya rasa cerita di baliknya tetap layak diceritakan, karena banyak keputusan teknis di sini yang bisa dipakai ulang.
Masalah yang coba dipecahkan
Masalah utamanya sederhana. Calon kepala desa bisa banyak, dan membandingkannya satu per satu itu melelahkan. Apalagi teks visi misi biasanya ditulis dengan gaya yang mirip, kaya kata kunci, tapi miskin makna yang bisa dibedakan.
Kalau dibaca sekilas, dua calon bisa terlihat sama. Padahal mungkin salah satunya lebih fokus ke irigasi, dan yang lain lebih fokus ke pendidikan. Perbedaan itu nyata, tapi butuh waktu dan ketelitian untuk menemukannya.
Paham Kades mencoba memindahkan pekerjaan membandingkan itu ke mesin. Warga cukup mengisi preferensi, dan aplikasi yang menghitung.
Cara kerja pencocokan
Bagian ini yang paling seru. Preferensi diisi lewat form tiga langkah, yaitu visi, misi, dan kriteria umum seperti pendidikan serta usia. Setelah itu aplikasi menghitung skor kecocokan dengan pembobotan.
- Visi calon dibandingkan dengan preferensi pemilih memakai TF-IDF cosine similarity, bobot 35 persen.
- Misi dibandingkan memakai Jaccard similarity, bobot 30 persen.
- Pendidikan dinilai dengan ambang nilai, bobot 15 persen.
- Usia dinilai berdasarkan rentang, bobot 20 persen.
Hasilnya daftar calon terurut dari yang paling cocok. Masing-masing dapat ringkasan singkat kenapa cocok, yang dihasilkan Mistral AI. Kalau tidak ada API key, ringkasannya diganti otomatis dengan template, jadi aplikasi tetap jalan tanpa biaya.
Salah satu keputusan yang saya banggakan adalah hasil bisa dibagikan lewat URL. Tidak ada sessionStorage, semua preferensi dikodekan di alamatnya. Artinya warga bisa kirim hasil pencocokan ke grup WhatsApp keluarga dan semua orang bisa melihat hasil yang sama.
Bagian yang membangun dari bawah
Menariknya, hampir semua lapisan aplikasi ini saya bangun sendiri dari bawah. Databasenya memakai Turso, database SQLite serverless yang gratis untuk proyek kecil. Seed data disiapkan lewat script, jadi siapa pun bisa mengisi ulang database dengan data yang sama. API dibangun dengan pola respons yang konsisten, setiap endpoint mengembalikan struktur yang sama.
Frontend-nya Next.js 15 dengan React 19 dan TypeScript, Tailwind CSS 4 untuk styling, dan shadcn/ui untuk komponen. Tema aplikasinya merah dan emas, warna yang akrab di konteks desa dan pesta demokrasi.
Ada juga halaman perbandingan yang memungkinkan warga membandingkan dua sampai tiga calon berdampingan. Di HP, perbandingan ditampilkan sebagai kartu yang bisa digeser. Di desktop, tampil sebagai tabel yang menempel saat digulir.
Apa yang kurang
Saya sudah bilang, data real belum ada. Itu kekurangan nomor satu. Kekurangan berikutnya adalah skor kecocokan tidak pernah bisa objektif seratus persen, karena visi misi adalah teks yang bisa saja tidak mencerminkan niat sebenarnya.
Terus terang, proyek ini masih setengah jadi. Ada bagian yang bisa lebih baik, ada fitur yang belum sempat dibuat. Tapi justru karena itu saya ceritakan, karena proses belajar di proyek seperti ini lebih terasa nyata.
Repo dan ajakan
Reponya public dan bisa dilihat siapa saja di GitHub, yaitu denislistiadi/pk-web. README-nya lengkap, dari cara setup database Turso sampai cara menjalankan seed data.
Kalau kamu kebetulan tinggal di Pemalang atau kenal orang yang bergelut di pemerintahan desa, ada satu hal yang sangat berharga untuk proyek ini, yaitu data real. Visi misi calon yang benar, data desa yang akurat, itu saja sudah mengubah aplikasi ini dari demo menjadi alat yang benar-benar bisa dipakai.
Sampai data real itu datang, Paham Kades tetap jadi salah satu proyek pribadi favorit saya. Bukan karena aplikasinya sempurna, tapi karena mengingatkan saya bahwa teknologi kecil pun bisa dibuat untuk hal yang dekat dengan keseharian orang.