Tunas Akara
Kembali ke Portofolio
Sistem Pelacakan Pesanan & Pembayaran Jastip

Sistem Pelacakan Pesanan & Pembayaran Jastip

Tahun: 2026Peran: IT Consultant / Software Architectweb

Pelacakan order pindah dari WhatsApp dan spreadsheet ke dashboard: pesanan belum bayar, alamat kosong, dan refund tertunda kelihatan sekilas.

Tech Stack

Next.jsHonoTypeScriptDrizzle ORMSQLite

Sistem Pelacakan Pesanan & Pembayaran Jastip

Sistem ini melacak pesanan dan pembayaran untuk bisnis jastip (jasa titip), menggantikan chat WhatsApp dan spreadsheet. Bisnis jastip menerima pre-order untuk bazaar atau perjalanan, lalu membeli semua barangnya di lokasi. Ia masih harus menagih pembayaran dan mengirim paket ke setiap customer yang memesan.

Tantangan

Setiap kali ikut bazaar, ada puluhan pesanan customer, masing-masing dengan beberapa item. Semuanya dilacak lewat satu thread chat dan spreadsheet yang sama seringnya ditimpa ulang seperti diperbarui. Screenshot bukti bayar tertimbun di antara pesan-pesan pesanan. Tidak ada cara yang bisa diandalkan untuk melihat siapa yang benar-benar sudah bayar.

Tidak semua item yang diburu di bazaar tersedia; sebagian habis sebelum giliran dibeli. Itu mengubah jumlah yang harus dibayar customer, dan spreadsheet tidak bisa menanganinya sendiri. Seseorang juga harus mengumpulkan alamat pengiriman per customer, melacak siapa yang belum mengisi, dan tahu siapa yang harus di-refund. Semua ini tidak punya staf khusus; harus berjalan sebagai alur kerja manual yang bisa diikuti satu admin.

Solusi

Saya membangun monorepo type-safe berbasis Next.js dan Hono di atas Drizzle ORM dan SQLite. Hono RPC memberi frontend client bertipe langsung dari API. Admin membuat satu invoice per customer, opsional terhubung ke sebuah event, dan menambahkan item beserta foto. Hasilnya link unik yang sulit ditebak — gabungan dua string cuid2 — untuk dibagikan lewat WhatsApp, tanpa customer perlu bikin akun.

Customer membuka link tersebut dan melihat rincian pesanan serta info rekening tujuan transfer. Mereka mengunggah foto bukti transfer dan mengisi sendiri alamat pengirimannya di halaman yang sama.

Setiap pesanan berjalan lewat lima status: baru, diproses, dikirim, selesai, atau dibatalkan. Status per item (dipesan, tersedia, atau gagal didapat) dilacak terpisah. Status pembayaran dihitung dari waktu setiap item ditandai lunas, ongkir, dan refund, bukan disimpan sebagai kolom tersendiri. Jadi statusnya tidak bisa menyimpang dari apa yang benar-benar sudah dibayar customer.

Begitu satu item ditandai lunas, harga dan jumlahnya terkunci di sisi server. Begitu ongkir ditandai lunas, nominalnya juga terkunci. Begitu pesanan berstatus dikirim, alamat terkunci, supaya kurir yang sudah membawa paket tidak dikirim ke alamat lain.

Unggahan bukti bayar bersifat append-only: unggahan kedua menambah daftar, bukan menimpa yang pertama. Unggahan juga dibatasi rate-limit untuk mencegah penyalahgunaan. Unit test mencakup logika saldo pembayaran, dan end-to-end test mencakup alur admin maupun customer.

Dashboard admin merekap aktivitas per event: jumlah order dan total nilai order. Dashboard ini juga menandai order yang belum lunas, order yang belum isi alamat, order yang perlu diinput ongkirnya, dan order yang harus di-refund.

Dampak

Bisnis ini berpindah dari menggulir thread WhatsApp dan mencocokkan spreadsheet, ke satu dashboard. Dashboard itu langsung menunjukkan pesanan belum bayar, alamat belum terisi, dan refund tertunda, bisa difilter per bazaar.

Mengunci item yang sudah lunas, ongkir yang sudah lunas, dan alamat yang sudah dikirim menghilangkan sumber perselisihan berulang soal siapa yang mengubah apa. Bukti bayar yang append-only membuat screenshot transfer customer tidak pernah hilang diam-diam saat ada unggahan kedua.