Poin Penting Utama
- Marketplace adalah sistem operasi untuk transaksi, bukan sekadar katalog. Listing dan pencarian memang menarik perhatian, tetapi identitas, izin, status pesanan, pembayaran, refund, sengketa, moderasi, dan support-lah yang menentukan apakah orang asing dapat bertransaksi dengan aman.
- Validasi likuiditas sebelum mengotomatiskan setiap fitur. Marketplace yang sempit dengan 20 pemasok aktif dan pencocokan manual memberikan lebih banyak informasi daripada platform yang dipoles tetapi tanpa transaksi yang selesai.
- Pilih tanggung jawab pembayaran sebelum menulis kode checkout. Direct charges, destination charges, serta separate charges and transfers menciptakan kewajiban yang berbeda untuk biaya, refund, sengketa, pelaporan, dan saldo negatif.
- Modelkan pembeli, penjual, dan administrator sebagai peran yang terpisah. Seorang pengguna mungkin memegang lebih dari satu peran, tetapi setiap tindakan harus tetap diotorisasi terhadap listing, pesanan, organisasi, atau akun pembayaran terhubung yang spesifik.
- No-code dan AI mengurangi waktu implementasi, bukan risiko marketplace. NxCode dapat membantu menghasilkan titik awal full-stack, tetapi pemilik tetap memerlukan kriteria penerimaan transaksi, tes penolakan, onboarding penyedia, kebijakan operasional, dan prosedur peluncuran yang dipantau.
Apa Itu Aplikasi Online Marketplace Sebenarnya
Aplikasi online marketplace menghubungkan penawaran (supply) dan permintaan (demand) yang independen serta membantu mereka menyelesaikan transaksi. Marketplace produk menghubungkan pembeli dengan pedagang. Marketplace layanan menghubungkan pelanggan dengan profesional. Marketplace penyewaan mengoordinasikan akses ke aset untuk jangka waktu tertentu. Marketplace kreator menjual karya digital, keanggotaan, atau komisi. Setiap model menggunakan listing dan penemuan (discovery), tetapi aturan transaksinya berbeda.
Marketplace bukan sekadar toko multi-vendor. Biasanya ia memiliki setidaknya lima sistem yang terhubung:
| Sistem | Pengalaman Pembeli | Pengalaman Penjual | Tanggung Jawab Platform |
|---|---|---|---|
| Identitas | Akun, detail kontak, preferensi tersimpan | Profil bisnis, verifikasi, status payout | Autentikasi, kontrol peran dan akun |
| Penawaran | Telusuri dan bandingkan listing | Buat, beri harga, publikasikan, jeda, penuhi | Kebijakan listing, kategori, moderasi |
| Transaksi | Minta, pesan, beli, batalkan, ulas | Terima, tolak, penuhi, refund | Status pesanan, bukti, keputusan support |
| Uang | Bayar dan terima refund | Biaya, saldo, payout | Perutean pembayaran, rekonsiliasi, sengketa |
| Kepercayaan | Rating, laporan, jaminan | Reputasi, banding, perlindungan | Kontrol penipuan, penegakan aturan, jejak audit |
Nilai platform adalah alur kerja yang terkoordinasi. Jika pembeli menemukan penjual di situs tetapi menyelesaikan setiap transaksi secara pribadi, produk tersebut hanyalah sebuah direktori. Itu tetap bisa menjadi bisnis yang valid, tetapi model pendapatan, pengukuran, dan risikonya berbeda dari marketplace transaksional.
Validasi Likuiditas Marketplace Sebelum Membangun
Masalah marketplace yang pertama biasanya bukan perangkat lunak. Masalahnya adalah likuiditas: dapatkah pembeli menemukan opsi yang kredibel dan dapatkah penjual menerima peluang yang berharga dalam waktu yang dapat diterima? Peluncuran yang luas mempersulit hal ini karena penawaran terdilusi di berbagai kategori, lokasi, rentang harga, dan jendela ketersediaan.
Tentukan sel awal yang sempit. Misalnya, "spesialis Webflow berbahasa Inggris untuk landing page SaaS tahap awal" lebih mudah untuk dimulai dan diukur daripada "freelancer". "Penyewaan kamera akhir pekan di pusat Tokyo" lebih mudah daripada "marketplace penyewaan". Sel tersebut membutuhkan penawaran berkualitas yang cukup untuk memberi pembeli pilihan nyata dan niat pembeli yang cukup untuk menjaga pemasok tetap terlibat.
Jalankan uji concierge sebelum membangun pencocokan otomatis:
- Rekrut 10–20 penjual yang relevan dan verifikasi bahwa penawaran mereka nyata.
- Publikasikan katalog terstruktur sederhana atau formulir asupan.
- Wawancarai atau rekrut pembeli di segmen sempit yang sama.
- Cocokkan permintaan secara manual dan catat waktu respons, alasan penolakan, perubahan harga, dan penyelesaian.
- Identifikasi langkah berulang yang harus dihilangkan oleh perangkat lunak.
Buktinya bukan pada pendaftaran (sign-up). Lacak permintaan yang memenuhi syarat, tingkat respons pemasok, waktu untuk pencocokan pertama yang dapat diterima, transaksi yang dimulai, transaksi yang selesai, dan perilaku berulang. Jika pembeli tidak menghargai kecocokan atau pemasok tidak merespons, lebih banyak kode tidak akan memperbaiki desain pasar.
Gunakan startup idea validation guide sebelum berkomitmen pada pembangunan penuh. Jika pengujian berhasil, catatan manual menjadi contoh nyata untuk data model dan state machine.
Pilih Model Marketplace dan Logika Pendapatan
Tuliskan siapa yang berkontrak dengan siapa, siapa yang menyediakan barang atau jasa, siapa yang menetapkan harga, siapa yang menerima pembayaran pembeli, dan siapa yang menangani keluhan. Jawaban-jawaban ini memengaruhi salinan produk, arsitektur pembayaran, analisis pajak, otoritas support, dan onboarding penjual.
Model pendapatan yang umum meliputi:
| Model | Cara Platform Menghasilkan | Bekerja Baik Saat | Mode Kegagalan Utama |
|---|---|---|---|
| Komisi transaksi | Persentase atau biaya tetap per pesanan yang selesai | Platform dapat mengamati dan mendukung transaksi | Pembeli dan penjual pindah ke luar platform |
| Langganan penjual | Biaya bulanan untuk akses, alat, atau lead | Penjual menerima nilai operasional berulang | Membayar sebelum menerima nilai meningkatkan churn |
| Biaya listing | Biaya untuk mempublikasikan atau mempromosikan penawaran | Inventaris memiliki nilai tinggi atau penempatan langka | Listing berbayar berkualitas rendah mengurangi kepercayaan pembeli |
| Biaya lead | Penjual membayar untuk perkenalan yang berkualitas | Transaksi ditutup secara offline atau memiliki siklus penjualan panjang | Sengketa atas kualitas lead |
| Biaya layanan pembeli | Biaya yang ditambahkan ke total pembeli | Kenyamanan, perlindungan, atau layanan terlihat jelas | Biaya kejutan mengurangi konversi checkout |
| Hibrida | Langganan ditambah biaya transaksi yang lebih kecil | Platform menawarkan perangkat lunak dan permintaan | Harga menjadi sulit untuk dijelaskan |
Jangan mengoptimalkan komisi sebelum membuktikan ekonomi unit. Perkirakan gross merchandise or service value, take rate, biaya pembayaran, refund, chargeback, support penjual, support pembeli, promosi, operasi pajak, dan kerugian penipuan. Komisi 12% bisa terlihat menarik sampai sengketa yang membutuhkan penanganan tinggi menghabiskan satu jam waktu staf.
NxCode dapat menghasilkan layar konfigurasi harga dan biaya, tetapi aturan biaya harus berasal dari model bisnis tertulis. Simpan biaya yang diterapkan dan versi kebijakan pada setiap pesanan sehingga transaksi historis tetap dapat dijelaskan setelah perubahan harga.
Petakan Transaksi End-to-End Pertama
Tentukan satu transaksi yang sukses sebelum membuat daftar fitur. Pilot marketplace layanan mungkin mengikuti urutan ini:
- Penjual membuat akun dan mengirimkan detail bisnis.
- Platform meninjau penjual dan mengaktifkan pembuatan listing.
- Penjual mempublikasikan satu layanan dengan harga, ruang lingkup, lokasi, dan ketersediaan.
- Pembeli mencari, membuka listing, dan mengirimkan permintaan bertanggal.
- Penjual menerima sebelum permintaan kedaluwarsa.
- Pembeli membayar melalui alur pembayaran platform yang disetujui.
- Kedua belah pihak berkomunikasi di dalam catatan pesanan.
- Penjual menandai pekerjaan telah dikirim dan mengunggah bukti jika sesuai.
- Pembeli menerima, meminta koreksi, atau membuka kasus support.
- Platform mencatat penyelesaian dan penyedia melepaskan atau menjadwalkan payout.
- Kedua belah pihak dapat memberikan ulasan yang terikat pada pesanan yang telah selesai.
Ubah setiap langkah menjadi kriteria penerimaan (acceptance criterion). "Onboarding penjual berhasil" itu samar. "Penjual yang disetujui dengan charges_enabled=true dapat mempublikasikan; penjual yang tidak terverifikasi dapat menyimpan draf tetapi tidak dapat menerima pesanan berbayar; penjual yang ditangguhkan tidak dapat mempublikasikan atau menerima permintaan baru" adalah hal yang dapat diuji.
Tentukan juga jalur yang tidak bahagia (unhappy paths): penjual menolak, penjual tidak merespons, pembeli gagal membayar, penjual membatalkan setelah penerimaan, pengiriman disengketakan, refund sebagian, payout gagal, atau pengguna ditangguhkan di tengah pesanan. Kasus-kasus tersebut membentuk pekerjaan pengembangan aplikasi marketplace yang sebenarnya.
Desain Data Model Marketplace
Hindari menyimpan seluruh transaksi sebagai data page-builder yang bersarang. Gunakan catatan eksplisit, pengidentifikasi tetap (immutable identifiers), stempel waktu, dan riwayat status. Skema awal yang praktis adalah:
users(id, email, display_name, status, created_at)
seller_accounts(id, owner_user_id, legal_name, public_name, status, payment_account_id)
seller_memberships(id, seller_account_id, user_id, role, status)
categories(id, parent_id, name, slug, status)
listings(id, seller_account_id, category_id, title, description, status, published_at)
listing_prices(id, listing_id, currency, amount, unit, active_from, active_to)
listing_media(id, listing_id, object_key, alt_text, sort_order, moderation_status)
availability(id, listing_id, starts_at, ends_at, capacity, status)
orders(id, buyer_user_id, seller_account_id, listing_id, status, currency, subtotal, fee, tax, total)
order_events(id, order_id, actor_user_id, from_status, to_status, reason, occurred_at)
payments(id, order_id, provider_payment_id, charge_type, status, amount)
transfers(id, order_id, seller_account_id, provider_transfer_id, amount, status)
refunds(id, order_id, provider_refund_id, amount, reason, status)
conversations(id, order_id, status)
messages(id, conversation_id, author_user_id, body, moderation_status, created_at)
reviews(id, order_id, author_user_id, subject_user_id, rating, body, status)
reports(id, reporter_user_id, subject_type, subject_id, reason, status)
audit_events(id, actor_user_id, action, resource_type, resource_id, result, occurred_at)
Simpan snapshot harga pada pesanan. Jangan menghitung ulang pesanan lama dari harga listing saat ini. Pisahkan identitas akun penjual dari profil penjual publik karena informasi hukum dan payout tidak boleh bocor ke listing. Simpan file dalam penyimpanan objek pribadi dan simpan hanya kunci objek dan metadata terkontrol di database.
Setiap pesanan harus memiliki riwayat peristiwa (event history) yang tahan lama. Bidang status tunggal yang dapat berubah memberi tahu Anda status saat ini tetapi tidak bagaimana status itu sampai di sana. Peristiwa pesanan memungkinkan keputusan support, metrik, percobaan ulang (retry), dan tinjauan audit.
Bangun Otorisasi Pembeli, Penjual, dan Admin
Autentikasi menetapkan identitas; otorisasi memutuskan apakah identitas tersebut boleh bertindak atas sumber daya tertentu. OWASP Authorization Cheat Sheet merekomendasikan hak istimewa paling rendah (least privilege), perilaku tolak-secara-default (deny-by-default), pemeriksaan izin pada setiap permintaan, dan pengujian untuk logika otorisasi.
Marketplace membutuhkan pemeriksaan peran dan hubungan. Seorang anggota tim penjual mungkin mengedit listing untuk akun penjual mereka tetapi tidak untuk listing penjual lain. Seorang pembeli dapat melihat pesanan mereka sendiri tetapi tidak pesanan pembeli lain dengan penjual yang sama. Seorang moderator dapat menyembunyikan konten listing tanpa mendapatkan akses ke kredensial pembayaran. Seorang agen support dapat mengeluarkan refund hanya dalam batas persetujuan.
Gunakan matriks izin:
| Tindakan | Pembeli | Anggota Penjual | Admin Penjual | Moderator | Admin Support |
|---|---|---|---|---|---|
| Lihat listing publik | Ya | Ya | Ya | Ya | Ya |
| Edit listing penjual | Tidak | Ditugaskan | Ya | Sembunyikan saja | Tidak |
| Lihat pesanan | Milik sendiri | Penjual ditugaskan | Penjual sendiri | Konteks laporan | Ya |
| Kirim pesan pesanan | Milik sendiri | Penjual ditugaskan | Penjual sendiri | Tidak | Opsional |
| Ubah akun payout | Tidak | Tidak | Dibatasi | Tidak | Tidak |
| Refund pembayaran | Minta | Minta | Minta | Tidak | Terbatas/disetujui |
| Tangguhkan pengguna/listing | Tidak | Tidak | Tidak | Lingkup kebijakan | Ya |
Masukkan batasan seller_account_id, buyer_user_id, dan order_id ke dalam kueri server. Jangan mengotorisasi permintaan hanya karena browser mengirimkan ID penjual yang cocok. Jika klien mengakses Postgres melalui Supabase, aktifkan dan uji Row Level Security pada setiap tabel yang terekspos. RLS menambah pertahanan berlapis, tetapi kredensial layanan yang berhak istimewa tetap memerlukan kode server dengan cakupan yang teliti.
Buat dua pembeli dan dua penjual dalam pengujian otomatis. Coba setiap endpoint sensitif menggunakan ID objek asli milik pengguna yang salah. Rute yang menyembunyikan tombol tetapi menerima permintaan manual yang dibuat-buat tetaplah cacat.
Onboard dan Verifikasi Penjual
Pisahkan persetujuan marketplace dari verifikasi penyedia pembayaran. Platform mengevaluasi apakah penjual sesuai dengan standar kualitas dan kebijakannya. Penyedia pembayaran mengevaluasi informasi dan kemampuan yang diperlukan untuk memproses pembayaran dan payout. Kedua status tersebut dapat berubah setelah onboarding.
Untuk implementasi Stripe Connect, Stripe merekomendasikan hosted or embedded onboarding karena alur tersebut beradaptasi dengan persyaratan khusus negara dan yang terus berubah. Alur onboarding API yang sepenuhnya kustom memberikan kontrol antarmuka lebih besar tetapi membuat platform bertanggung jawab untuk mengumpulkan, memvalidasi, melokalisasi, dan memelihara lebih banyak pengalaman verifikasi.
Simpan hanya ID akun penyedia, status kemampuan (capability states), ringkasan persyaratan, dan stempel waktu yang diperlukan oleh marketplace. Hindari menyalin dokumen identitas ke dalam database marketplace. Tanggapi pembaruan akun dan blokir tindakan yang relevan ketika persyaratan menjadi jatuh tempo atau kemampuan menjadi tidak aktif.
Gunakan status penjual yang jelas seperti:
draft: profil dimulai, belum ada penawaran publik;marketplace_review: platform memeriksa kecocokan kategori dan kebijakan;payment_pending: disetujui marketplace, persyaratan penyedia belum lengkap;active: diizinkan untuk mempublikasikan dan bertransaksi;restricted: pesanan yang ada memerlukan tinjauan, pesanan baru diblokir;suspended: listing disembunyikan dan tindakan akun dibatasi;closed: kewajiban retensi dan payout ditangani sebelum penghapusan.
Jangan mengeklaim "penjual terverifikasi" kecuali lencana tersebut menjelaskan apa yang diverifikasi. Identitas, registrasi bisnis, lisensi profesional, asuransi, alamat, dan kualitas marketplace adalah klaim yang berbeda.
Buat Listing, Pencarian, dan Ketersediaan
Listing membutuhkan atribut terstruktur, bukan hanya teks kaya (rich text). Listing layanan mungkin mencakup kategori, area layanan, mode pengiriman, unit harga, lead time, kapasitas, bahasa, kebijakan pembatalan, dan input pembeli yang diperlukan. Listing penyewaan membutuhkan lokasi aset, kalender ketersediaan, kebijakan deposit, aturan pengambilan, dan bukti kondisi. Data terstruktur membuat filter, validasi, moderasi, dan landing page menjadi andal.
Mulailah pencarian dengan kategori, kata kunci, lokasi atau mode pengiriman, rentang harga, ketersediaan, dan sejumlah kecil filter khusus kategori. Urutkan hasil menggunakan campuran relevansi, ketersediaan, kualitas, perilaku respons, dan batasan pembeli yang terdokumentasi. Jika ada penempatan bersponsor, beri label dan pisahkan dari sinyal kualitas organik.
Cegah inventaris berkualitas rendah sebelum masuk ke pencarian. Wajibkan judul yang bermakna, deskripsi asli, set media minimum, data harga yang valid, dan kategori. Hasilkan teks alt gambar dari deskripsi yang disediakan penjual dan biarkan penjual mengoreksinya. Simpan status moderasi per listing dan per item media sehingga satu gambar yang ditolak tidak merusak seluruh draf.
Untuk unggahan, jaga agar bucket tetap pribadi dan buat operasi dengan batas waktu hanya setelah otorisasi. Dokumentasi R2 presigned URL dari Cloudflare mencatat bahwa URL tersebut adalah kredensial pembawa sampai kedaluwarsa. Batasi tipe konten, ukuran, jalur objek, masa kedaluwarsa, dan asal browser yang diizinkan; pindai atau karantina unggahan berisiko jika kategori marketplace menjaminnya.
Implementasikan Order State Machine yang Eksplisit
State machine pesanan mencegah tindakan yang kontradiktif. Jangan biarkan tombol UI sembarangan menulis status apa pun. Tentukan transisi yang diizinkan dan aktor yang diizinkan untuk memulai setiap transisi.
Contoh untuk marketplace layanan:
| Status saat ini | Status selanjutnya yang diizinkan | Aktor | Bukti yang diperlukan |
|---|---|---|---|
requested | accepted, rejected, expired | Penjual atau penjadwal | Harga dan ketersediaan masih valid |
accepted | payment_pending, cancelled | Pembeli/sistem | Penerimaan belum kedaluwarsa |
payment_pending | paid, payment_failed | Webhook pembayaran | Peristiwa penyedia terverifikasi |
paid | in_progress, cancelled_review | Penjual/support | Kebijakan pembatalan diterapkan |
in_progress | delivered, support_review | Penjual/pembeli | Catatan pengiriman atau masalah |
delivered | completed, revision_requested, support_review | Pembeli/sistem | Aturan jendela ulasan |
completed | partially_refunded, refunded | Support/webhook pembayaran | Keputusan dan hasil penyedia |
Gunakan idempotency keys untuk pembuatan pembayaran dan permintaan pengubah status yang mungkin dicoba ulang. Verifikasi tanda tangan webhook, simpan ID peristiwa penyedia, dan tolak duplikat sebelum menerapkan transisi. Jangan tandai pesanan sebagai lunas dari pengalihan sukses browser; peristiwa terverifikasi dari penyedia pembayaran adalah sinyal yang tahan lama.
Jauhkan keputusan kebijakan dari salinan UI. Jendela pembatalan, penyelesaian otomatis, kelayakan refund, dan waktu payout harus berupa konfigurasi versi dengan pengujian. Simpan versi yang diterapkan pada pesanan.
Desain Pembayaran dan Payout Stripe Connect
Stripe mendeskripsikan Connect sebagai produknya untuk platforms and marketplaces yang mengelola pembayaran dan memindahkan uang di antara banyak pihak. Ini tidak dapat dipertukarkan dengan integrasi Checkout pedagang tunggal yang normal.
Connect charge type guide membedakan tiga alur utama:
- Direct charges: charge menjadi milik akun terhubung. Ini sering kali cocok untuk platform perangkat lunak di mana setiap penjual bertransaksi langsung dengan pelanggannya.
- Destination charges: platform membuat charge dan mentransfer dana ke satu akun terhubung, secara opsional menyimpan application fee. Ini sering kali cocok untuk marketplace layanan bermerek dengan satu penyedia per transaksi.
- Separate charges and transfers: charge platform dan transfer dipisahkan. Ini mendukung keranjang multi-penjual, banyak penerima, atau kasus di mana penerima dipilih setelah pembayaran, tetapi menambah kompleksitas operasional.
Pilihan tersebut menentukan di mana data pelanggan dan transaksi berada, siapa yang membayar biaya pemrosesan, siapa yang menangani refund dan sengketa, saldo mana yang didebet, deskripsi laporan bank, dan perlakuan merchant-of-record. Jangan memilih jenis charge hanya dari sampel kode. Konfirmasikan model bisnis, negara yang didukung, mata uang, konfigurasi akun terhubung, tanggung jawab pajak, tanggung jawab saldo negatif, dan kebutuhan pelaporan.
Simpan buku besar (ledger) marketplace meskipun Stripe menyimpan catatan pembayaran. Catat total pesanan, biaya platform, jumlah pajak, akun terhubung, ID pembayaran penyedia, ID transfer, jumlah refund, status sengketa, dan status rekonsiliasi. Rekonsiliasi saldo penyedia dan webhook terhadap catatan lokal; jangan pernah memperlakukan payout terjadwal sebagai bukti bahwa pesanan telah diselesaikan sepenuhnya.
NxCode dapat membuat kerangka rute checkout, handler webhook, dan dashboard penjual, tetapi kode pembayaran memerlukan fixture mode pengujian untuk peristiwa duplikat, refund sebagian, payout gagal, pembuatan sengketa, pembalikan transfer, dan saldo tidak mencukupi sebelum peluncuran.
Tangani Refund, Sengketa, Pajak, dan “Escrow” dengan Hati-Hati
Tanggung jawab refund dan sengketa mengikuti alur dana yang dipilih. Dokumentasi Connect disputes dari Stripe menjelaskan bahwa destination charges serta separate charges and transfers mendebet jumlah sengketa dan biaya dari akun platform, sementara tanggung jawab untuk sengketa direct-charge bergantung pada konfigurasi akun terhubung dan tanggung jawab saldo negatif.
Bangun kasus support yang tertaut ke pesanan, pembayaran, para pihak, versi kebijakan, pesan, bukti pengiriman, refund, pembalikan transfer, dan keputusan. Pisahkan "pembeli meminta refund" dari "refund diterima oleh penyedia." Refund sebagian mungkin juga memerlukan pembalikan transfer yang proporsional. Sengketa yang dimenangkan mungkin memerlukan retransfer yang ditangani dengan hati-hati; batasan lintas batas dapat memengaruhi alur pemulihan.
Jangan pasarkan payout yang ditunda sebagai escrow secara default. Escrow adalah pengaturan hukum dan keuangan, bukan label UI. Waktu payout penyedia tidak secara otomatis menciptakan perlindungan escrow berlisensi. Dapatkan saran untuk setiap wilayah peluncuran, jenis penjual, dan kategori transaksi.
Pajak juga tidak dapat disimpulkan dari integrasi pembayaran. Panduan Tax with Connect dari Stripe menyatakan bahwa entitas yang bertanggung jawab bisa berupa platform atau akun terhubung tergantung pada model bisnis, peraturan, dan transaksi. Tentukan kewajiban fasilitator marketplace, deemed-seller, pajak penjualan, PPN (VAT), faktur, dan pelaporan dengan penasihat yang berkualifikasi sebelum mengonfigurasi penagihan.
Bangun Kepercayaan, Moderasi, dan Operasi Support
Fitur kepercayaan membutuhkan bukti dan jalur banding. Batasi ulasan hanya untuk para pihak dalam pesanan yang telah selesai. Simpan penulis, subjek, pesanan, dimensi rating, teks, status publikasi, dan hasil moderasi. Cegah penjual mengulas akun mereka sendiri melalui peran kedua. Deteksi pasangan ulasan yang berulang dan waktu yang tidak biasa, tetapi jangan otomatis menuduh pengguna berdasarkan satu sinyal saja.
Beri pembeli dan penjual tindakan pelaporan pada listing, pesan, profil, dan pesanan. Catatan laporan harus menangkap kategori, deskripsi, lampiran, pelapor, subjek, urgensi, dan status. Rutekan masalah keselamatan mendesak secara berbeda dari spam, keluhan kekayaan intelektual, kualitas buruk, atau ketidaksepakatan pembayaran.
Dashboard operasional harus mencakup:
- penjual yang menunggu tinjauan marketplace atau remediasi pembayaran;
- listing dan media yang menunggu moderasi;
- pesanan berbayar yang macet di satu status melampaui ambang batas;
- antrean refund dan sengketa dengan eksposur finansial;
- peristiwa webhook yang gagal dan perbedaan rekonsiliasi;
- kegagalan payout dan saldo negatif;
- laporan penyalahgunaan, pelanggar berulang, dan batas waktu banding;
- permintaan ekspor akun, retensi, dan penghapusan.
Dokumentasikan siapa yang dapat melakukan setiap tindakan dan wajibkan sebuah alasan. Tindakan berdampak tinggi seperti penangguhan akun, refund besar, perubahan payout, atau penghapusan permanen harus memerlukan autentikasi yang lebih kuat dan, jika proporsional, persetujuan orang kedua.
Buat Pesan dan Notifikasi yang Aman untuk Transaksi
Lampirkan percakapan pada pesanan atau permintaan pra-pesanan agar moderasi dan support memiliki konteks. Hindari mengekspos email atau nomor telepon pribadi ketika kebocoran di luar platform merusak keselamatan atau model bisnis. Jika detail kontak harus dipertukarkan setelah pemesanan, lepaskan detail tersebut pada status yang ditentukan dan catat peristiwanya.
Izinkan teks dan set lampiran yang sempit. Terapkan kontrol file yang sama dengan yang digunakan untuk media listing. Buat jalur laporan pesan, bisukan (mute), dan blokir tanpa menghancurkan bukti pesanan secara diam-diam. Pengguna yang diblokir mungkin masih memerlukan saluran terkontrol dengan support untuk menyelesaikan atau membatalkan transaksi yang aktif.
Notifikasi harus berisi informasi sensitif minimum dan menautkan kembali ke aplikasi yang terautentikasi. Pisahkan pengiriman notifikasi dari peristiwa pesanan yang mendasarinya; email yang gagal tidak boleh membatalkan pembayaran atau transisi status yang sukses. Biarkan pengguna mengelola preferensi pemasaran secara independen dari pemberitahuan transaksi penting.
Contoh Aplikasi Marketplace dan Variasi Arsitektur
Contoh 1: Marketplace Layanan Lokal
Pemilik rumah meminta layanan tertentu dan satu penyedia menerimanya. Destination charges mungkin cocok untuk transaksi satu penyedia, tergantung pada model komersial dan hukum platform. Bagian tersulitnya adalah area layanan, penjadwalan, kedaluwarsa penerimaan, pembatalan, bukti kerja, dan keputusan support. Mulailah dengan satu kota dan satu kategori layanan.
Contoh 2: Marketplace Penyewaan
Seorang penyewa memesan aset untuk rentang waktu tertentu. Penguncian ketersediaan, deposit, bukti pengambilan dan pengembalian, klaim kerusakan, pemeriksaan identitas, dan penanganan zona waktu lebih penting daripada keranjang belanja generik. Skema listing membutuhkan lokasi, kondisi, ketersediaan, nilai penggantian, dan metode serah terima.
Contoh 3: Marketplace Kreator
Pembeli membeli aset digital atau memesan karya (commission). Aplikasi membutuhkan ketentuan lisensi, pengiriman file, batas revisi, pelaporan pelanggaran, dan riwayat versi. Keranjang multi-kreator mungkin memerlukan alur dana yang lebih kompleks daripada satu penjual per pesanan. Pratinjau dengan watermark dan tautan pengiriman terkontrol dapat mengurangi kebocoran tanpa menjanjikan perlindungan sempurna.
Contoh 4: Marketplace Pemasok B2B
Sebuah perusahaan meminta penawaran (quote) dari pemasok yang disetujui. Pembayaran mungkin terjadi melalui faktur (invoice) di luar rilis pertama, sementara marketplace menghasilkan pendapatan dari langganan atau biaya lead. Keanggotaan organisasi, persetujuan pengadaan, perbandingan penawaran, dokumen pajak, pesanan pembelian (purchase order), dan ekspor audit menjadi lebih penting daripada checkout gaya konsumen.
Contoh-contoh ini tidak boleh berbagi satu skema universal. Gunakan kembali primitif identitas, listing, peristiwa pesanan, pesan, laporan, dan audit, lalu tambahkan catatan khusus kategori alih-alih menempatkan setiap bidang yang mungkin ada pada listings.
Playbook Implementasi Marketplace Empat Minggu
Minggu 1: Spesifikasi transaksi. Konfirmasikan sel peluncuran yang sempit, peran pengguna, persetujuan penjual, bidang listing, state machine pesanan, tanggung jawab pembayaran, aturan refund, kebijakan moderasi, dan metrik keberhasilan. Buat akun dan listing pengujian yang realistis.
Minggu 2: Alur kerja inti. Bangun autentikasi, akun penjual, listing, pencarian, permintaan pembeli atau checkout, riwayat pesanan, dan antrean administrator. NxCode dapat menghasilkan pilot full-stack dari spesifikasi; bandingkan database dan rute yang dihasilkan dengan matriks izin tertulis sebelum menambahkan polesan visual.
Minggu 3: Uang dan jalur penolakan. Integrasikan onboarding penyedia pembayaran dan transaksi mode pengujian. Tambahkan webhook terverifikasi, idempotensi, catatan buku besar, refund, status kegagalan, file pribadi, tes otorisasi lintas akun, rate limit, peristiwa audit, dan pemantauan.
Minggu 4: Beta awal. Undang penjual pertama, tinjau setiap listing, dan ajak sekelompok kecil pembeli melalui transaksi penuh. Isi antrean support dengan staf. Ukur waktu respons dan penyelesaian setiap hari. Perbaiki kegagalan yang paling umum sebelum membuka kategori atau lokasi lain.
Jika marketplace masih memvalidasi permintaan, no-code MVP builder guide membantu memilih jalur implementasi yang proporsional. Jika pembayaran dan langganan khusus menjadi pusatnya, tinjau SaaS Stripe payments guide tetapi gunakan alur khusus Connect untuk pergerakan uang multi-pihak.
Checklist Peluncuran dan Keamanan Marketplace
Sebelum menerima transaksi nyata, verifikasi:
- Satu kategori penawaran dan segmen pelanggan yang sempit telah menunjukkan permintaan pencocokan yang nyata.
- Setiap rute pribadi menolak permintaan tanpa sesi, pengguna yang salah, penjual yang salah, peran yang salah, dan pengguna yang ditangguhkan.
- Harga listing, biaya, versi kebijakan, dan identitas penjual diambil snapshot-nya pada pesanan.
- Transisi pesanan ditegakkan di server dan dicakup oleh tes happy-path serta penolakan.
- Keberhasilan pembayaran berasal dari webhook yang terverifikasi dan idompoten, bukan dari pengalihan browser.
- Perubahan kemampuan akun terhubung memblokir transaksi baru jika diperlukan.
- Jalur refund, pembalikan transfer, sengketa, kegagalan payout, dan rekonsiliasi berfungsi dalam mode pengujian.
- Unggahan listing dan pesan menggunakan penyimpanan pribadi, validasi file, akses berumur pendek, dan kontrol moderasi.
- Ulasan memerlukan pesanan yang sudah selesai dan tidak dapat ditulis sendiri melalui peran lain.
- Pelaporan, penangguhan, banding, retensi bukti, dan kepemilikan support telah didokumentasikan.
- Pajak, ketentuan penjual, privasi, aturan konsumen, dan kategori yang dilarang telah ditinjau secara khusus sesuai wilayah.
- Checkout, autentikasi, formulir, kesalahan, dan target sentuh diuji terhadap panduan WCAG 2.2.
- Pemantauan mencakup webhook yang gagal, penolakan otorisasi yang meningkat, pesanan macet, eksposur refund, dan kegagalan payout.
- Pembeli dan penjual dapat mengekspor catatan yang dijanjikan kebijakan dan support dapat menjelaskan setiap peristiwa finansial.
Jalankan checklist dengan dua pembeli, dua akun penjual yang tidak terkait, satu akun yang ditangguhkan, satu pembayaran gagal, satu refund sebagian, dan satu fixture sengketa. Kesiapan produksi ditunjukkan oleh kegagalan yang terkendali, bukan hanya oleh pesanan demo yang selesai.
Metrik untuk Dilacak Setelah Peluncuran
Ukur kesehatan marketplace sebagai corong (funnel) dengan biaya operasional:
- permintaan pembeli yang memenuhi syarat per minggu;
- penawaran aktif dalam sel peluncuran;
- konversi pencarian-ke-listing dan listing-ke-permintaan;
- tingkat respons dan penerimaan penjual;
- median waktu untuk pencocokan pertama yang dapat diterima;
- tingkat keberhasilan pembayaran dan penyelesaian pesanan;
- tingkat pembatalan, refund, dan sengketa per kategori;
- perilaku pembeli berulang dan penjual berulang;
- take rate dan margin kontribusi setelah pembayaran, support, penipuan, dan promosi;
- waktu moderasi, kontak support per pesanan, dan umur kasus yang belum terselesaikan;
- jumlah payout gagal, webhook gagal, dan pengecualian rekonsiliasi.
Pecah metrik berdasarkan kategori, geografi, saluran akuisisi, pengguna baru versus yang kembali, dan kohort penjual. Nilai transaksi bruto (gross transaction value) yang meningkat dapat menyembunyikan penyelesaian yang memburuk, biaya support yang lebih tinggi, atau konsentrasi pada satu penjual. Hindari memublikasikan satu angka vanity sebagai bukti kesehatan marketplace.
Tinjau sel peluncuran setiap minggu. Perluas hanya ketika pembeli secara konsisten menemukan penawaran yang memenuhi syarat, penjual merespons, transaksi yang selesai mempertahankan kontribusi positif, dan support dapat menangani pengecualian tanpa campur tangan pendiri (founder).
Istilah Marketplace yang Harus Diketahui
- Two-sided marketplace: Sebuah platform yang melayani dua kelompok pengguna yang saling bergantung, biasanya permintaan dan penawaran, yang partisipasinya menciptakan nilai bagi pihak lain. Definisi ini membedakan marketplace dari toko pedagang tunggal yang normal.
- Liquidity (Likuiditas): Probabilitas bahwa peserta menemukan lawan transaksi yang cocok dan menyelesaikan transaksi yang dimaksudkan dalam waktu yang dapat diterima. Ini berarti lebih dari sekadar memiliki banyak akun terdaftar.
- Take rate: Pendapatan platform dibagi dengan nilai transaksi yang diproses melalui marketplace, sebelum mempertimbangkan semua biaya operasional.
- Connected account: Akun pembayaran penjual atau penyedia layanan yang ditautkan ke platform melalui penyedia seperti Stripe Connect.
- Destination charge: Charge yang dibuat platform yang mentransfer dana ke satu akun terhubung sambil memungkinkan platform untuk menyimpan biaya (fee).
- Separate charges and transfers: Alur dana di mana charge platform terpisah dari satu atau lebih transfer ke akun terhubung.
- Merchant of record: Entitas yang secara hukum dinyatakan sebagai penjual barang atau jasa dan bertanggung jawab atas tugas pembayaran, refund, pajak, dan kepatuhan yang ditentukan. Perlakuan pastinya bergantung pada model dan yurisdiksi.
- Marketplace facilitator atau deemed seller: Klasifikasi hukum atau pajak yang dapat membuat platform bertanggung jawab untuk memungut dan menyetorkan pajak tertentu. Terminologi produk saja tidak menentukan klasifikasi ini.
- Order state machine: Kumpulan status transaksi yang terkontrol, transisi yang diizinkan, aktor, kondisi, dan efek samping.
- Moderation queue (Antrean moderasi): Daftar operasional listing, media, pesan, ulasan, atau laporan yang menunggu keputusan kebijakan.
- Reconciliation (Rekonsiliasi): Membandingkan catatan buku besar marketplace dengan saldo penyedia pembayaran, peristiwa, refund, transfer, dan payout untuk mengidentifikasi perbedaan.
Rekomendasi Akhir
Mulailah dengan sel marketplace yang sempit dan buktikan bahwa pembeli dan penjual menyelesaikan transaksi secara manual. Kemudian bangun satu alur kerja end-to-end dengan peran eksplisit, listing terstruktur, state machine pesanan, pembayaran yang sadar marketplace, moderasi, bukti support, dan tes penolakan.
Gunakan NxCode ketika marketplace membutuhkan alur kerja full-stack yang disesuaikan dan codebase yang dapat diekspor. Gunakan direktori yang lebih sederhana atau alat no-code berbasis database jika penemuan dan penangkapan lead adalah satu-satunya persyaratan. Gunakan platform commerce spesialis ketika katalog dan model pemenuhannya sudah sesuai. Pembangun aplikasi marketplace yang tepat adalah yang menangani aturan transaksi tersulit tanpa menyembunyikan kepemilikan atau risiko operasional.
Jangan luncurkan pergerakan uang nyata berdasarkan demo checkout yang dihasilkan. Konfirmasikan konfigurasi Connect, tanggung jawab pedagang dan pajak, onboarding penjual, refund, sengketa, saldo negatif, kegagalan payout, dan wilayah yang didukung. Pencapaian produksi pertama bukanlah "aplikasi sudah online." Melainkan "sebuah transaksi nyata dapat selesai, setiap pihak yang salah ditolak, dan staf dapat dengan aman menyelesaikan kasus kegagalan."
Untuk pemilihan platform, bandingkan keunggulan kepemilikan dan alur kerja dalam best AI app builders guide. Untuk rencana produk yang lebih luas, gunakan startup app development guide.
Sumber dan Link Referensi
- Stripe: Build a marketplace with Connect
- Stripe: Understand Connect charge types
- Stripe: Choose a connected-account onboarding configuration
- Stripe: Disputes on Connect platforms
- Stripe: Use Stripe Tax with Connect
- OWASP: Authorization Cheat Sheet
- OWASP: File Upload Cheat Sheet
- Supabase: Row Level Security
- Cloudflare R2: Presigned URLs
- Microsoft: Tenancy models for a multitenant solution
- NIST: Secure Software Development Framework
- GitHub: Repository security
- GitHub: Dependabot security updates
- W3C: What's New in WCAG 2.2

