Platform web untuk pelaku usaha udang vannamei Kepulauan Riau. Menyatukan marketplace, ketertelusuran QR Code, dan dashboard monitoring pemerintah dalam satu aplikasi.
Udang vannamei termasuk komoditas ekspor andalan Kepulauan Riau, tapi pelaku usahanya bekerja sendiri-sendiri. Petambak menjual hasil panen lewat jaringan kenalan, pengepul dan unit pengolahan ikan menyimpan catatan di bukunya masing-masing, dan pembeli ekspor kerap meminta bukti asal-usul produk yang tidak bisa ditunjukkan siapa pun. Pemerintah daerah punya kesulitan lain: data produksi dan kesiapan ekspor tersebar dalam format yang berbeda-beda, jadi sulit dipakai untuk menyusun kebijakan.
Program studi Logistik Perdagangan Internasional Politeknik Negeri Batam ingin semua itu ditampung dalam satu aplikasi web, dengan dukungan BRIDA Pemprov Kepulauan Riau. Saya yang mengerjakan aplikasinya.
Vannamei Connect memakai empat peran: pengelola (petambak, supplier, pengepul, unit pengolahan ikan), pembeli (lokal dan ekspor), pemerintah, serta admin. Pengelola memasang katalog produk, mencatat tambak dan siklus produksi, lalu mengunggah dokumen legalitas. Pembeli mencari produk di marketplace publik, memesan, transfer langsung ke rekening pengelola, dan mengunggah bukti transfernya. Aplikasi tidak memegang uang dan tidak memungut komisi, jadi tugasnya mencatat bukti dan memindahkan status pesanan.
Setiap pesanan otomatis membuat lot ketertelusuran berisi tahap pembudidayaan dan panen. Ketika pengelola mengisi data pengiriman, tahap pengiriman ikut masuk ke rantai yang sama. Lot punya QR Code yang bisa dipindai siapa saja tanpa login, dan halaman hasil pindaian menampilkan perjalanan produk dari tambak sampai ke tangan pembeli.
Sisi pemerintah dipisahkan ke panel tersendiri yang hanya bisa membaca: tren transaksi, sebaran pelaku usaha di peta, toko dengan penjualan tertinggi, pembeli teratas, agregat kesiapan ekspor, ditambah unduhan data dalam CSV, Excel, dan PDF.
Yang paling merepotkan justru hal yang kelihatan sepele: alamat. Formulir awal memakai kolom teks bebas, dan hasilnya alamat pelaku usaha tidak bisa dipakai untuk menyaring apa pun. Saya ganti dengan pilihan wilayah empat tingkat memakai dataset Kepmendagri yang berisi 91.599 baris. Data sebanyak itu saya muat di dalam migrasi, bukan seeder, karena proses rilis di server hanya menjalankan migrasi. Berkasnya disimpan terkompresi dan dibaca baris demi baris, lalu disisipkan per 2.000 baris supaya pemakaian memori tetap rendah, dan dilewati di lingkungan pengujian agar test suite tidak ikut melambat.
Halaman Ketertelusuran sempat membalas error 500 di server. Penyebabnya generator QR memakai PngWriter yang butuh ekstensi GD, sementara image aplikasi tidak memasangnya. Saya pindah ke SvgWriter yang ditempelkan sebagai data URI. Berkasnya lebih kecil, tidak menambah ketergantungan, dan tetap tajam ketika dicetak di kemasan.
Masalah berikutnya, email pendaftaran tidak pernah sampai. Container di server tidak menjalankan queue worker, jadi notifikasi ShouldQueue hanya menumpuk di tabel jobs. Saya bungkus pengirimannya dalam satu helper kecil yang memakai defer dan rescue, sehingga email dikirim setelah respons sampai ke peramban dan SMTP yang bermasalah cuma tercatat di log tanpa menggagalkan pendaftaran.
Untuk persetujuan pengelola, logikanya saya taruh di event model User, bukan di tombolnya. Admin bisa menyetujui dari tiga tempat berbeda di panel, dan menyatukan aturan di satu titik mencegah ada jalur yang lupa memverifikasi berkas atau mengirim email.
Saya mengerjakan project ini sendirian. Mulai dari menyusun PRD, skema basis data, dan dokumen arsitektur di awal, lalu membangun seluruh aplikasi: migrasi, model, komponen Livewire, dua panel Filament, terjemahan dua bahasa, sampai Dockerfile untuk rilis. Manual book penggunaan beserta gambarnya juga saya susun sendiri.
Fase pertama sudah rampung dan berjalan di vannameiconnect.com dengan keempat alur peran lengkap dari pendaftaran sampai ulasan. Pengujian otomatis saya pakai untuk menutup bagian yang merepotkan kalau diuji manual: panel admin, dashboard pemerintah, alur pendaftaran pengelola, dan pemformatan nomor telepon.
Ada beberapa hal yang saya catat sebagai pekerjaan berikutnya. Formulir pengiriman belum menyediakan kolom nomor kontainer dan nomor seal, padahal kategori Pengiriman pada skor kesiapan membutuhkannya, jadi untuk sekarang satu-satunya jalan adalah mengunggah dokumen bukti pengiriman. Pesan validasi bawaan Laravel juga masih berbahasa Inggris karena berkas terjemahannya belum dibuat. Rencana setelah ini: aplikasi mobile, WhatsApp Business API supaya notifikasi benar-benar terkirim otomatis, dan integrasi data resmi pemerintah.