Sedang Dibangun · 75%
Retail Promo Simulation Lab
Lab simulasi promo untuk ngetes rule diskon ecommerce, eligibility cart, validasi checkout, perubahan stok, dan edge case promo.
Gambaran umum
- Status
- Sedang Dibangun
- Kemajuan
- 75%
- Tingkat kesulitan
- Challenging
- Mulai
- 1 Jul 2026
Stack & alat
Tautan
01 / ALASAN DIBUAT
Kenapa gue bikin ini
Awalnya gue bikin ini karena ada requirement promo ecommerce yang lumayan jelimet dan masih acak. Kalau cuma dibahas lewat dokumen atau mockup, rasanya banyak behavior yang gampang kelewat. Jadi gue bikin simulator kecil buat ngetes: kalau promo diset begini, output-nya apa? Kalau customer nambah qty, promo mana yang paling menguntungkan? Kalau harga atau stok berubah sebelum checkout, error-nya harus muncul di mana? Buat gue, ini bukan sekadar bikin UI. Ini cara buat memahami problem dengan lebih konkret, terus bisa jelasin behavior-nya ke business user, product designer, dev, dan QA dengan lebih enak.
02 / MASALAH YANG DIEKSPLORASI
Apa yang ingin gue pahami atau selesaikan
Requirement promo sering kelihatan simpel dari nama campaign-nya, tapi behavior aslinya bisa cepat jadi kompleks. Contohnya promo “beli 2 diskon 20%, beli 3 diskon 30%” tetap perlu keputusan detail: produk mana yang eligible, tier mana yang aktif, markdown ikut atau nggak, platform apa, checkout method apa, dan apa yang terjadi kalau cart berubah. Yang bikin ribet, promo itu nyambung ke banyak titik journey. Dari admin setup, PLP, cart, checkout, stock, dummy payment, sampai order history. Jadi rule yang kelihatannya oke di dashboard bisa aja membingungkan di sisi customer kalau progress bar, breakdown harga, atau error message-nya nggak jelas. Gue butuh cara buat bikin behavior itu kelihatan, bukan cuma kebayang.
03 / PENDEKATAN
Gimana idenya dibawa jadi sesuatu yang bisa dicoba
Gue bikin ini sebagai prototype Next.js dengan data retail fiktif. Ada sisi admin buat setup catalog, promo, dan store stock, lalu sisi customer buat PLP, cart, checkout, orders, dan calculation logs. Promo engine-nya gue bikin support beberapa skema: stackable by qty, stackable by value, dan buy-X special price. Nama promo atau campaign bisa beda dari promo type, jadi admin bisa bikin nama yang lebih natural buat customer tanpa mengubah logic type-nya. Cart jadi area testing utama. Di situ gue bisa lihat promo yang eligible, progress menuju tier berikutnya, auto-select promo terbaik, breakdown harga sebelum dan sesudah promo, sampai validasi kalau ada perubahan di tengah journey. Gue juga tambahin temporary simulation flags. Jadi kalau mau ngetes promo expired, harga SKU berubah, stock berubah, checkout error, atau promo gagal diterapkan, datanya nggak langsung dirusak di dashboard. Efeknya muncul saat customer lanjut dari cart ke checkout atau dari checkout ke order. Terakhir, gue tambahin persistence pakai Supabase supaya data admin, promo, store, stock, dan order bisa tetap tersimpan setelah refresh.
04 / CATATAN LAPANGAN
Dari Mockup Ke Behavior
Project ini mulai dari kebutuhan buat ngerti requirement promo yang terlalu banyak cabangnya. Ada tier quantity, threshold value, platform eligibility, checkout method, stock, nama campaign, periode promo, dan validasi di tengah journey.
Kalau cuma mockup, gue bisa nunjukin tampilan cart. Tapi mockup nggak cukup buat jawab: kalau user nambah satu item lagi, promo mana yang aktif? Kalau metode checkout berubah, promo masih valid nggak? Kalau promo expired sebelum payment, error-nya muncul di mana?
Jadi gue bikin sesuatu yang bisa dijalankan.
Misahin Promo Type Dan Campaign Name
Salah satu keputusan yang ngebantu adalah misahin promo type dari promo name. Promo type dipakai engine buat menentukan cara hitung, sedangkan promo name dipakai sebagai nama campaign yang kelihatan di customer.
Ini bikin setup admin lebih masuk akal. Campaign bisa punya nama bebas, tapi rule di belakangnya tetap jelas: stackable by qty, stackable by value, atau buy-X special price.
Cart Jadi Tempat Berpikir
Cart akhirnya jadi screen paling penting di simulator ini. Di situ gue bisa lihat promo apa yang eligible, tier mana yang sudah kebuka, progress ke tier berikutnya, dan breakdown harga sebelum-sesudah promo.
Gue juga tambahin auto-select promo terbaik karena kalau promonya banyak, user bisa bingung. Dengan sorting berdasarkan benefit terbesar, simulator jadi lebih gampang dibaca.
Validasi Checkout
Bagian yang paling menarik adalah revalidation. Promo bisa valid saat item masuk cart, tapi tidak valid lagi saat user lanjut checkout. Hal yang sama juga bisa terjadi ke harga dan stok.
Makanya error atau warning gue bikin muncul di area yang relevan: kalau masalahnya di cart, notice muncul di cart; kalau masalahnya di checkout, notice muncul di checkout. Bukan semuanya dilempar jadi toast global.
Stock Dan Order
Gue juga tambahin behavior stock sederhana. Kalau order sukses, stock berkurang. Kalau order history dihapus, stock balik lagi. Untuk Click and Collect, yang berubah adalah stock toko. Untuk regular checkout, yang berubah adalah stock variant produk.
Model ini belum production-ready, tapi cukup buat nunjukin gimana promo dan inventory bisa saling memengaruhi.
05 / PELAJARAN
Project ini ngebantu gue mengubah requirement yang masih acak jadi sesuatu yang bisa dilihat dan dites. Daripada cuma debat behavior promo lewat kata-kata, gue bisa jalanin skenario dan lihat bagian mana yang masih ambigu.
Gue belajar kalau promo system bukan cuma soal calculation. Copy dan UX error message juga penting. Kalau customer cuma dikasih tahu “promo expired”, itu belum cukup. Mereka perlu tahu apa yang berubah, item mana yang kena, dan apa langkah berikutnya.
Gue juga makin sadar admin configuration butuh guardrail. Kalau semua setting dijembrengin sekaligus, dashboard jadi berat dibaca. Collapsible section, field yang fokus, dan tooltip bikin setup lebih gampang dipahami.
Yang paling berguna, simulator ini jadi jembatan komunikasi. Business user bisa lihat behavior campaign, designer bisa lihat state journey, dev bisa cek logic, dan QA bisa mulai mikirin edge case.
NGOBROL YUK
Ada yang menarik untuk dibahas?
Soal product, system, sesuatu yang lagi lo bangun, atau sekadar pengen tukar pikiran? boleh banget diobrolin.