Korban kekerasan seksual sering tidak melapor bukan karena kasusnya ringan, tapi karena jalur pelaporan yang ada menambah risiko dan beban baru: identitas yang terekspos, proses berlapis yang melelahkan, dan tidak ada cara memantau progres tanpa mengulang cerita dari awal. Rumah Aman dibangun untuk mengurangi hambatan-hambatan ini di level sistem.

Platform ini berbentuk web dengan dua sisi yang sengaja dipisah: sisi publik tanpa login untuk pelapor, dan sisi admin dengan jalur autentikasi terpisah untuk tim internal yang menangani laporan.

Latar Belakang Masalah

Empat hambatan utama yang membuat korban urung melapor lewat jalur konvensional:

  • Takut identitas terekspos. Laporan konvensional biasanya menuntut identitas lengkap di awal, sementara korban belum tentu siap kasusnya diketahui keluarga, lingkungan kerja, atau pelaku sendiri.
  • Proses berlapis dan melelahkan. Datang langsung ke instansi, mengisi berkas fisik, dan mengulang cerita ke beberapa pihak berpotensi menjadi retraumatisasi.
  • Tidak ada cara memantau progres. Setelah lapor, korban sering tidak tahu laporannya sampai mana — tanpa harus menghubungi ulang dan menjelaskan kasusnya dari awal.
  • Rasa tidak berdaya atas kendali informasi. Korban butuh kendali atas apa yang dibagikan dan kapan, bukan sistem yang memaksa keterbukaan penuh sejak langkah pertama.

Solusi yang Dibangun

Rumah Aman adalah platform pengaduan berbasis web dengan dua sisi yang sengaja dipisah:

  • Sisi publik — tanpa login. Siapa pun bisa mengisi form pengaduan, memilih tingkat keterbukaan identitas, lalu mendapat kode tiket untuk memantau status laporannya sendiri kapan saja.
  • Sisi admin/petugas — dengan login terpisah. Guard khusus, bukan akun pelapor. Tim internal mengelola laporan masuk, mengubah status, menambah catatan penanganan, serta mengelola konten edukasi publik (kabar, blog, kampanye, publikasi) dan pesan kontak.

Pemisahan ini bukan sekadar struktur teknis: pelapor tidak pernah diwajibkan punya akun atau kata sandi, sementara data laporan tetap hanya bisa diakses lewat area admin yang terautentikasi.

Keputusan Desain Kunci

Pelapor tidak wajib login. Mewajibkan akun berarti mewajibkan email atau nomor yang bisa dilacak balik ke identitas korban — tepat hal yang ingin dihindari sebagian pelapor. Dengan submit langsung tanpa registrasi, tidak ada kata sandi yang harus diingat dan tidak ada jejak akun yang bisa ditemukan orang lain di perangkat yang sama.

Kode tiket unik (RA-2026-XXXX) sebagai pengganti akun. Setelah submit, sistem membuatkan kode tiket acak dan memastikan keunikannya sebelum disimpan — dicek ulang terhadap data yang sudah ada, bukan mengandalkan asumsi. Kode ini berfungsi sebagai identitas transaksi, bukan identitas orang:

  • Dipakai untuk mengecek status kapan saja, tanpa perlu login atau mengulang cerita.
  • Tidak terikat ke data pribadi — pada mode anonim, kolom nama dan kontak dibiarkan kosong, sehingga kode tiket jadi satu-satunya penghubung antara pelapor dan laporannya.
  • Karena hanya pelapor yang memegang kodenya, tracking tetap privat tanpa perlu sistem akun sama sekali.

Kedua keputusan ini berangkat dari prinsip yang sama: setiap syarat tambahan yang dibebankan ke pelapor adalah satu alasan lagi bagi korban untuk urung melapor.

Fitur Utama

FiturUntuk siapaDeskripsi
Form pengaduanPelaporSubmit tanpa akun, pilihan anonim/identitas jelas, checkbox jenis kekerasan & layanan dibutuhkan, upload bukti (opsional)
Cek status laporanPelaporMasukkan kode tiket, lihat status terkini tanpa login
Dashboard adminAdmin/petugasRingkasan jumlah laporan per status, laporan masuk hari ini, pesan kontak belum dibaca, grafik laporan per bulan
Manajemen laporanAdmin/petugasTinjau detail laporan, ubah status, tambah catatan internal, assign petugas penanganan
Manajemen kontenAdminKelola kabar, blog, kampanye, dan publikasi untuk edukasi dan penggalangan kesadaran publik
Pesan kontakAdminKelola pesan masuk dari halaman kontak publik

Tech Stack

LayerTeknologiCatatan
BackendLaravel 12 (PHP 8.2)MVC, resource routing, eloquent ORM
DatabaseMySQL 8.0Kolom JSON untuk data checkbox (jenis kekerasan, layanan dibutuhkan)
FrontendTailwind CSS (Blade views)Dipetakan dari desain HTML statis yang sudah ada
AutentikasiLaravel session guard kustomGuard admin terpisah dari guard web, provider ke model Admin, bukan tabel users
Penyimpanan fileLaravel StorageUntuk bukti laporan yang diunggah pelapor (storage/app/public/bukti)

Tantangan Teknis

  • Guard autentikasi ganda. Admin/petugas tidak boleh berbagi tabel atau sesi dengan pelapor yang memang tidak punya akun sama sekali. Solusinya: guard admin kustom dengan provider dan model sendiri, dijaga middleware terpisah yang memeriksa Auth::guard('admin') — bukan guard web bawaan Laravel.
  • Keunikan kode tiket tanpa race condition sederhana. Kode tiket harus unik tapi juga acak dan tidak berurutan agar tidak mudah ditebak. Solusinya: generate kode acak lalu cek keberadaannya di database dalam loop sebelum insert, bukan hanya mengandalkan constraint unique sebagai satu-satunya pengaman.
  • Sanitasi input pada teks bebas. Field kronologi diisi bebas oleh pelapor dan ditampilkan ulang di dashboard admin — celah XSS yang jelas kalau tidak ditangani. Input ini disaring (strip tag HTML) sebelum disimpan.
  • Validasi upload bukti. Bukti laporan bisa berupa gambar, PDF, atau video, dengan risiko file berbahaya menyamar sebagai bukti. Validasi dibatasi ketat pada tipe MIME dan ukuran maksimum sebelum file disimpan ke storage.
  • Memisahkan data sensitif dari tampilan. Kolom seperti alamat IP disimpan untuk keperluan audit, tapi tidak boleh muncul di tampilan admin biasa — hanya relevan untuk peran superadmin, sehingga perlu dipisahkan di level tampilan, bukan hanya di level query.