Anda merasa layanan sudah baik, tetapi pelanggan yang kecewa jarang mengeluh. Mereka diam lalu tidak kembali. Kotak saran fisik sepi, formulir kertas menumpuk tanpa direkap, dan Google Form yang dibuat seadanya menghasilkan spreadsheet yang tidak pernah dianalisis.
Aplikasi survey kepuasan pelanggan berbasis web menjawab masalah itu: pertanyaan dikelola di satu tempat, jawaban terekam otomatis, dan hasilnya langsung tampil sebagai angka yang bisa dibandingkan dari bulan ke bulan. Artikel ini membahas cara kerja sistem semacam ini, desain database yang masuk akal, cara menjalankan source code Laravel di komputer lokal, cara menyesuaikannya dengan aman, serta hal yang perlu Anda periksa sebelum membeli source code apa pun.
Masalah Apa yang Diselesaikan
Sistem survey yang baik menyelesaikan tiga hal sekaligus:
- Pengumpulan: pelanggan bisa mengisi lewat tautan atau QR code di kasir, meja resepsionis, atau struk, tanpa perlu akun.
- Standarisasi: semua cabang atau loket memakai pertanyaan dan skala yang sama, sehingga hasilnya bisa dibandingkan.
- Analisis: rekap dan statistik tersedia tanpa menyalin data secara manual.
Jenis sistem ini dipakai oleh perusahaan jasa, instansi pemerintahan untuk survei kepuasan layanan publik, rumah sakit dan klinik, serta bisnis retail dan UMKM.
Modul Inti dan Alur Data
Berdasarkan deskripsi produknya, aplikasi survey kepuasan pelanggan berbasis Laravel ini memiliki fitur form survey dinamis, sistem rating (skala penilaian), manajemen pertanyaan, rekap hasil survey otomatis, serta dashboard laporan dan statistik. Secara umum, alurnya seperti ini:
- Admin membuat survey dan menyusun pertanyaan lewat modul manajemen pertanyaan.
- Setiap pertanyaan punya tipe, misalnya rating 1–5 atau teks bebas.
- Form survey dirender secara dinamis dari daftar pertanyaan, jadi menambah pertanyaan tidak perlu mengubah kode.
- Responden mengisi, dan setiap jawaban disimpan sebagai baris terpisah.
- Modul rekap menghitung rata-rata dan distribusi nilai per pertanyaan, lalu dashboard menampilkannya.
Desain Tabel yang Disarankan
Jika Anda membangun sendiri atau ingin menilai struktur source code yang dibeli, pola berikut fleksibel dan mudah dianalisis. Kuncinya adalah memisahkan "satu kali pengisian" (response) dari "jawaban per pertanyaan" (answer).
| Tabel | Kolom penting | Fungsi |
|---|---|---|
| surveys | id, title, slug, is_active, starts_at, ends_at | Satu kampanye survey |
| questions | id, survey_id, text, type, scale_max, sort_order, is_required | Daftar pertanyaan dinamis |
| responses | id, survey_id, channel, submitted_at, ip_hash | Satu kali pengisian oleh responden |
| answers | id, response_id, question_id, score, text_value | Jawaban per pertanyaan |
Kolom channel berguna untuk membedakan sumber, misalnya cabang A, loket 2, atau QR di struk. Simpan hash IP, bukan IP mentah, jika Anda hanya butuh pencegahan pengisian ganda. Dasar perancangan relasi seperti ini dibahas di merancang ERD sederhana untuk aplikasi.
Menghitung skor CSAT
CSAT (Customer Satisfaction Score) yang umum dipakai adalah persentase responden yang memberi nilai 4 atau 5 pada skala 1–5. Dengan desain tabel di atas, query per pertanyaan per bulan terlihat seperti ini:
SELECT q.text,
DATE_FORMAT(r.submitted_at, '%Y-%m') AS bulan,
COUNT(*) AS jumlah_jawaban,
ROUND(AVG(a.score), 2) AS rata_rata,
ROUND(100 * SUM(a.score >= 4) / COUNT(*), 1) AS csat_persen
FROM answers a
JOIN questions q ON q.id = a.question_id
JOIN responses r ON r.id = a.response_id
WHERE q.type = 'rating' AND q.survey_id = 1
GROUP BY q.id, q.text, bulan
ORDER BY bulan, q.sort_order;
Rata-rata saja bisa menyesatkan. Nilai 3,8 bisa berasal dari mayoritas nilai 4, atau dari campuran nilai 5 dan 1 yang menandakan pengalaman tidak konsisten. Tampilkan distribusi nilai di dashboard, bukan hanya rata-rata.
Menjalankan Source Code di Komputer Lokal
Langkah berikut berlaku untuk sebagian besar project Laravel. Selalu baca README dari source code yang Anda terima, karena versi PHP dan langkah tambahan bisa berbeda.
composer install
cp .env.example .env
php artisan key:generate
# isi DB_DATABASE, DB_USERNAME, DB_PASSWORD di .env
php artisan migrate --seed # atau impor file .sql bawaan
php artisan storage:link
php artisan serve
Jika source code menyertakan file SQL alih-alih migration, impor lewat phpMyAdmin atau perintah mysql. Panduan langkah demi langkah ada di panduan menjalankan source code Laravel. Error yang paling sering muncul adalah versi PHP tidak sesuai dengan composer.json, ekstensi PHP seperti pdo_mysql atau mbstring belum aktif, dan kredensial database di .env salah.
Kustomisasi yang Aman
- Gunakan Git sejak hari pertama. Commit kode asli sebelum mengubah apa pun, sehingga Anda selalu bisa membandingkan dan kembali.
- Ubah tampilan lewat view dan CSS, misalnya logo, warna, dan teks pengantar survey.
- Tambah kolom lewat migration baru, jangan mengedit migration lama yang sudah dijalankan.
- Tambah tipe pertanyaan (misalnya pilihan ganda) dengan menambah nilai
typedan cabang render baru, tanpa mengubah tabel jawaban. - Uji di lokal dulu, baru unggah ke server.
Prinsip lengkapnya ada di cara kustomisasi source code tanpa merusak.
Menyusun Pertanyaan yang Menghasilkan Data Berguna
- Batasi 5–8 pertanyaan. Survey panjang membuat banyak orang berhenti di tengah.
- Satu pertanyaan, satu hal. "Apakah staf ramah dan cepat?" sebaiknya dipecah menjadi dua.
- Gunakan skala yang sama di seluruh survey, misalnya 1–5, dan beri label di kedua ujungnya.
- Akhiri dengan satu pertanyaan terbuka: "Apa satu hal yang perlu kami perbaiki?"
- Jangan ubah kalimat pertanyaan di tengah periode, karena hasilnya jadi tidak bisa dibandingkan.
Contoh Penerapan: Klinik dengan Dua Loket
Misalkan sebuah klinik ingin mengukur kepuasan di loket pendaftaran dan di apotek. Langkah yang masuk akal:
- Buat satu survey dengan enam pertanyaan rating (keramahan, kejelasan informasi, waktu tunggu, kebersihan, kecepatan obat, kepuasan keseluruhan) dan satu pertanyaan terbuka.
- Cetak dua QR code berbeda yang mengarah ke survey yang sama dengan parameter
channelberbeda, misalnya?ch=pendaftarandan?ch=apotek. - Tinjau dashboard setiap minggu. Jika skor waktu tunggu di satu loket turun dua minggu berturut-turut, cek jadwal petugasnya.
- Baca semua jawaban terbuka setiap bulan dan kelompokkan menjadi tema.
Mencegah spam pada form publik
Di Laravel 11, rate limit sederhana bisa dipasang langsung di route form:
Route::post('/s/{survey:slug}', [SurveyResponseController::class, 'store'])
->middleware('throttle:5,1'); // maksimal 5 kiriman per menit per IP
Angka 5 per menit cukup longgar untuk pelanggan asli di jaringan Wi-Fi yang sama, tetapi menghentikan skrip yang mengirim ratusan jawaban palsu.
Checklist Sebelum Membeli Source Code Apa Pun
- Ada demo yang bisa dicoba, termasuk halaman admin.
- Versi Laravel dan PHP jelas dan masih didukung.
- Tersedia migration atau file SQL, plus README instalasi.
- Struktur tabel memisahkan pertanyaan, pengisian, dan jawaban.
- Validasi input dan proteksi CSRF berjalan pada form publik.
- Hasil survey bisa diekspor, misalnya ke Excel atau CSV.
- Lisensi penggunaan jelas, terutama jika dipakai untuk klien.
- Ada jalur bantuan jika instalasi bermasalah.
Pertimbangan membeli dibanding membangun sendiri dibahas lebih dalam di beli atau bikin sendiri.
Keterbatasan yang Perlu Disadari
- Bias responden. Yang mengisi cenderung pelanggan yang sangat puas atau sangat kecewa. Bandingkan tren, jangan terpaku pada satu angka.
- Pengisian ganda. Form publik tanpa login bisa diisi berulang. Tambahkan pembatasan sederhana seperti rate limit atau token sekali pakai.
- Distribusi tetap tugas Anda. Aplikasi tidak mendatangkan responden. Anda tetap perlu menempatkan QR atau mengirim tautan setelah layanan.
- Hosting dan pemeliharaan menjadi tanggung jawab Anda, termasuk backup dan pembaruan keamanan.
Jika Anda ingin melihat contoh implementasinya, detail aplikasi survey kepuasan pelanggan berbasis Laravel tersedia di halaman produk GudangCode.