Pluton.id
Semua karya

DRW Skincare POS

Mesin kasir yang dipakai seribu konsultan kecantikan setiap hari — Android, iOS, dan web — dari satu basis kode Flutter.


daily users across Android, iOS and web
~1,000
Dibangun untuk
DRW Skincare

Masalahnya

Sekitar seribu konsultan mandiri menjual katalog yang sama dengan harga berbeda-beda, karena masing-masing berada di jenjang yang berbeda dalam jaringan distribusi. Mencocokkan itu dengan tangan di akhir bulan bukan rekonsiliasi, melainkan penggalian arkeologi.

Percobaan sebelumnya memakai lapisan sinkronisasi luring-dulu. Dalam praktiknya itu menghasilkan kegagalan yang paling buruk: penjualan yang tampak tersimpan di ponsel, padahal tidak masuk pembukuan. Kasir tidak bisa diminta menebak mana di antara keduanya yang benar.

Pendekatannya

Kami mencabut lapisan luring itu. Aplikasinya sepenuhnya daring dan menulis langsung ke platform; basis data lokal hanya menjadi singgahan data sesi berjalan, tidak pernah jadi sumber kebenaran kedua. Saat jaringan mati, aplikasi mengatakannya — jawaban yang jauh lebih baik daripada struk yang belum tentu ada.

Harga diselesaikan di satu tempat saja, di server. Jenjang konsultan menentukan harganya, promo bertumpuk di atasnya dengan aturan yang dipegang server, dan total dari klien tidak pernah dipercaya — klien mengirim keranjang, server menjawab dengan nominalnya. Setiap penulisan membawa kunci idempoten, jadi percobaan ulang di jaringan buruk tidak bisa mencetak pesanan kedua.

Basis kode yang sama menghasilkan build Android di Google Play, build Huawei AppGallery, build iOS untuk TestFlight, dan kasir web — lengkap dengan struk printer termal, pemindaian barcode, stok per konsultan, deposit dan piutang, serta dompet loyalitas.

Hasilnya

Berjalan di produksi dan dipakai setiap hari kerja oleh sekitar seribu orang, di tiga platform dan dua lokapasar aplikasi Android.

Harga cocok dengan pembukuan karena dihitung di satu tempat, dan koneksi yang putus kini menghasilkan galat yang bisa ditindaklanjuti kasir, bukan penjualan yang tak bisa ditemukan siapa pun.