Full-stack application
CariPasal
Sistem pencarian dan pengelolaan pasal hukum Indonesia dengan aplikasi Flutter offline-first, dashboard editorial, dan backend Laravel.
Masalah dan kebutuhan
Referensi pasal hukum perlu mudah dicari dan tetap tersedia saat koneksi tidak stabil. CariPasal memisahkan pengalaman pembaca dari pengelolaan konten: aplikasi Flutter menyimpan data hukum secara lokal, sementara dashboard admin mengelola undang-undang, pasal, relasi, pengguna, dan audit.
Alur awal produk dibangun di atas Supabase Auth, RLS, RPC, dan Edge Functions. Ketika kebutuhan deployment dan kontrol backend berubah, sistem dimigrasikan ke Laravel dan PostgreSQL tanpa mengganti aplikasi Flutter, dashboard React, UUID, schema inti, atau workflow offline.
Implementasi aplikasi
Flutter menggunakan Drift dan SQLite untuk menyimpan undang-undang, pasal, serta relasi. Setelah full sync pertama, pembaca dapat mencari berdasarkan nomor, judul, isi, dan keyword secara lokal, membuka detail pasal, berpindah ke pasal berikutnya atau sebelumnya, melihat relasi, menyimpan pasal, dan menyalin isi ke clipboard.
Pencarian menormalisasi input seperti Pasal 16A, lalu memberi prioritas pada kecocokan nomor yang exact, prefix, dan numerik. Dashboard menyediakan CRUD, trash dan restore, bulk action, import Excel, serta OCR foto halaman buku. OCR memproses gambar di browser, membersihkan noise, mengenali struktur pasal dan penjelasan, lalu memberi admin draft yang dapat ditinjau sebelum import.
Arsitektur production
Runtime aktif terdiri dari dashboard React dan aplikasi Flutter yang berkomunikasi dengan Laravel REST API. Laravel menangani autentikasi Sanctum, otorisasi role, CRUD, import, audit, reset password, dan sinkronisasi. PostgreSQL mempertahankan UUID, JSONB, constraint relasi, serta struktur data yang dekat dengan sistem Supabase sebelumnya.
Sinkronisasi incremental meminta perubahan sejak timestamp terakhir, menerapkan overlap waktu lima menit, memproses record baru atau berubah, dan meneruskan ID record yang dihapus atau dinonaktifkan ke Drift. Docker Compose menyediakan stack lokal untuk admin, Flutter Web, Laravel, PostgreSQL, dan Mailpit. Script deployment aaPanel menjalankan migration, cache, permission fix, build admin, restart PHP-FPM, reload Nginx, dan health check.
Keamanan dan operasi
Route admin memakai Sanctum dan middleware role; pengelolaan admin dibatasi untuk super admin. Akun mobile memiliki masa aktif dan device binding dengan maksimum tiga perangkat. Token dapat dicabut saat logout atau reset password, sedangkan sesi mobile menyimpan data sensitif melalui FlutterSecureStorage dan memeriksa expiry saat offline maupun online.
Audit log menyimpan actor, action, tabel, record, perubahan JSON, metadata request, IP, user agent, dan waktu. Unit test Flutter mencakup model, pencarian, archive, query, state sync, progres, dan klasifikasi error. Build admin dan Flutter Web diverifikasi melalui CI. Backend masih memiliki ruang penguatan pada integration test, rate limiting, batas ukuran upload di server, dan chunking full sync.


