← Semua karya

Karya 01 / 05

Central Plafon

Toko online, konsol ERP, dan aplikasi kasir offline untuk usaha bahan interior — satu API, satu monorepo.

Peran
Pendiri & engineer
Tahun
2026
Teknologi
NestJS, Next.js, React, PostgreSQL, Electron
Situs
centralplafon.com ↗

Konteks

Central Plafon menjual bahan interior — plafon PVC, panel dinding, marmer PVC, lantai vinyl, rangka baja ringan — sekaligus jasa pemasangannya. Pelanggannya dua jenis: pembeli eceran dan kontraktor yang membeli dalam jumlah besar dengan tempo.

Usaha seperti ini biasanya hidup di tiga tempat terpisah: katalog online, spreadsheet gudang, dan mesin kasir di toko. Saya ingin satu sumber data untuk semuanya.

Yang saya bangun

Satu monorepo (Turborepo + Bun) berisi satu API dan tiga aplikasi:

shopNext.js consoleReact + TanStack kasirElectron + PouchDB core-apiNestJS + Drizzle ORM PostgreSQL+ pgvector Redis sinkron
Tiga aplikasi, satu API. Garis putus-putus: kasir menyimpan transaksi lokal dan sinkron saat online.

Keputusan yang penting

Uang selalu integer. Harga disimpan dalam satuan terkecil mata uang, bukan float, supaya total faktur tidak pernah meleset satu rupiah.

/** Money disimpan sebagai integer minor unit (rupiah utuh untuk IDR). */
export interface Money {
  amount: number;
  currency: CurrencyCode;
}

Kasir tidak boleh menolak pembeli. Saat offline, transaksi masuk antrean lokal dan disinkronkan begitu koneksi kembali. Kalau sinkronisasi membuat stok minus, pesanan tidak dibuang — ditandai untuk diperiksa manusia.

Pencarian katalog yang paham maksud. Setiap produk punya embedding (pgvector), jadi pencarian "plafon kamar mandi anti lembap" tetap menemukan produk yang tepat walau kata-katanya berbeda.