RANGGAEGHAPERMANA
Kembali ke daftar proyek
  • SaaS · Point of Sale
  • 2026

Studi kasus · 01 / 08

Dagangin POS

Satu engine operasional untuk banyak pola usaha UMKM.

Dagangin POS — tangkapan layar

Platform POS multi-tenant dan multi-cabang yang menyatukan kasir, inventori, appointment, work order, rental, laporan, dan kontrol platform dalam satu arsitektur modular.

Peran saya
Product Engineer · Full-stack · System Design
Status
Active development

Pencapaian utama

Merancang satu engine POS untuk sembilan pola usaha UMKM, sehingga tidak perlu membangun aplikasi baru untuk setiap jenis bisnis.

Private product repository
Dagangin POS — tangkapan layar

01 · Konteks

Masalah yang ingin diselesaikan.

Pengguna utama

  • Pemilik UMKM multi-outlet
  • Kasir dan staf operasional
  • Platform operator

Masalahnya

Aplikasi kasir UMKM sering dibuat ulang untuk setiap jenis bisnis. Akibatnya fitur cepat melebar, aturan bisnis duplikatif, dan data antar cabang sulit dijaga konsisten.

Pendekatannya

Dagangin memakai business profile sebagai preset dan capability sebagai konfigurasi. Retail, kuliner, jasa, grosir, rental, dan bisnis hibrida tetap berjalan di atas API serta aturan bisnis yang sama.

Angka kunci

  • 9profil pola usaha
  • 3client: web, PWA, Android
  • 11domain modular

02 · Peran saya

Bagian yang saya kerjakan.

Product Engineer · Full-stack · System Design

Teknologi yang digunakan

  • Laravel 12
  • React
  • TypeScript
  • Flutter
  • MySQL
  • Redis
  • Docker
  • Nginx
  1. 01

    Merancang arsitektur multi-tenant dan multi-outlet dengan isolasi data berlapis.

  2. 02

    Membangun sistem capability yang mengatur tampilan sekaligus validasi backend untuk setiap pola usaha.

  3. 03

    Membuat kasir Android dengan antrean offline yang aman dari transaksi ganda.

  4. 04

    Memisahkan control plane platform dari workspace tenant, termasuk akun, permission, dan audit.

03 · Sorotan

Beberapa tampilan pilihan.

Klik gambar untuk melihatnya lebih besar.

Geser untuk melihat semua, ketuk gambar untuk memperbesar.

Owner dashboard

Ringkasan kesiapan outlet dan KPI operasional memisahkan penjualan, kas diterima, piutang, appointment, work order, rental, dan pengeluaran.

Kasir lintas pola usaha

Alur transaksi menyesuaikan capability aktif: varian, modifier, meja, price tier, pelanggan, pembayaran, hingga pencetakan struk.

Inventori per outlet

Stok, transfer, stock count, pembelian, dan ledger pergerakan dipisahkan per tenant dan lokasi.

Laporan yang operasional

Laporan dirancang untuk membedakan omzet, uang yang benar-benar diterima, piutang, dan settlement yang belum selesai.

01 / 04

04 · Tantangan & keputusan

Masalah teknis dan cara saya menyelesaikannya.

01 · Tantangan

Setiap jenis usaha butuh fitur berbeda

Pendekatan

Profil usaha dijadikan preset dan capability dijadikan konfigurasi yang dibaca oleh UI maupun backend.

Hasil

Retail, kuliner, jasa, grosir, dan rental berjalan di atas API dan aturan bisnis yang sama.

02 · Tantangan

Kasir tetap harus jalan saat internet putus

Pendekatan

Transaksi di Android disimpan dalam antrean offline dengan idempotency key sebelum disinkronkan.

Hasil

Transaksi tunai tidak tercatat ganda saat koneksi kembali.

03 · Tantangan

Data antar tenant dan outlet tidak boleh bercampur

Pendekatan

Isolasi diterapkan berlapis lewat konteks tenant, policy, scope query, foreign key, dan test.

Hasil

Setiap outlet hanya melihat dan mengubah datanya sendiri.

01 / 03

05 · Hasil

Apa yang dihadirkan solusi ini.

Arsitektur ini membuat produk bisa berkembang lintas vertikal tanpa membangun aplikasi baru dari nol, sambil mempertahankan isolasi tenant, role, outlet, dan audit trail.

Alur penggunaan

  1. 01Registrasi tenant
  2. 02Pilih profil usaha
  3. 03Aktifkan capability
  4. 04Siapkan outlet & katalog
  5. 05Buka sesi kas
  6. 06Order & pembayaran
  7. 07Ledger & laporan

Arsitektur

Clients

Admin web · Kasir PWA · Android Flutter · Platform web

Application

REST API · RBAC · tenant context · domain services · events

Data

MySQL shared tenant data · Redis queue/cache · private object storage

Runtime

Nginx · PHP-FPM · worker · scheduler · Docker Compose

Model data

Tenant

id

business_profile

capabilities

Outlet

tenant_id

name

timezone

User & Role

tenant_id

role_id

permissions

Product

tenant_id

sku

type

unit

Order

outlet_id

customer_id

status

total

Payment

order_id

method

amount

status

Stock Ledger

product_id

outlet_id

direction

qty

  • Tenant 1—N Outlet
  • Tenant 1—N User / Product
  • Outlet 1—N Order
  • Order 1—N Payment
  • Product 1—N Stock Ledger
Proyek berikutnyaTritama BarberBooking, antrean, transaksi, dan komisi dalam satu alur layanan.