Oksa Satya.
SaaS · ERP

Dexova — Platform ERP Terintegrasi

ERP modular untuk bisnis: HRIS, Payroll, POS, dan Inventori dalam satu sistem Go.

Role
Architect & Full-Stack Developer (backend-heavy)
Periode
2025 – sekarang
Kategori
SaaS · ERP
Kode
Repo privat
Stack
Go (Gin)PostgreSQL + sqlcNext.js / TypeScriptRedisPASETOSSE (real-time)MidtransOpenAI / Google AIDocker

Context

Dexova adalah platform ERP untuk bisnis Indonesia — dibangun untuk perusahaan kecil–menengah yang butuh sistem operasional serius tanpa harga enterprise. Saya membangunnya sebagai architect sekaligus full-stack developer, dari desain skema database sampai UI kasir.

Produk ini live di dexova.id dan dipakai lewat tiga aplikasi production: dashboard admin (dex-fe), PWA absensi karyawan (dex-attendance), dan aplikasi kasir (dex-pos).

Business problem

Bisnis kecil–menengah menjalankan HR, payroll, kasir, dan stok di tool terpisah: absensi di spreadsheet, gaji dihitung manual, kasir di aplikasi sendiri, stok di catatan gudang. Data tidak pernah sinkron — jam lembur tidak nyambung ke slip gaji, penjualan kasir tidak mengurangi stok, dan pemilik tidak bisa melihat kondisi bisnis lintas divisi.

Konsekuensinya nyata: salah hitung gaji (dan risikonya terhadap kepatuhan aturan ketenagakerjaan), selisih kas yang tidak ketahuan, dan keputusan bisnis yang diambil dari data basi.

Product ecosystem

Empat modul bisnis berjalan di satu backend Go — masing-masing dengan query SQL dan migrasi database sendiri, sehingga modul bisa berkembang tanpa saling merusak:

  • HRIS & Payroll — siklus karyawan end-to-end: data karyawan, struktur organisasi, absensi, cuti, shift, sampai payroll run dan slip gaji digital.
  • Attendance (PWA karyawan) — check-in/out geofence dengan deteksi kantor terdekat, riwayat kehadiran, pengajuan koreksi, cuti, dan slip gaji.
  • POS — kasir multi-outlet dengan barcode, multi-payment (tunai, QRIS Midtrans, transfer, EDC, split), shift + rekonsiliasi kas, dan laporan penjualan.
  • Inventory — multi-gudang: purchase order, penerimaan barang dengan QC, stock opname barcode, transfer antar-gudang ber-approval, dan sinkronisasi otomatis dengan POS.
  • Dexova AI — layer AI (OpenAI / Google AI) di atas data operasional untuk pencarian dan insight.

My role

Architect & full-stack developer — backend-heavy. Saya mendesain arsitektur modular monolith-nya, menulis domain logic (payroll, rekonsiliasi kas, stok), membangun ketiga aplikasi frontend, dan mengoperasikan deployment-nya. Keputusan produk dan prioritas fitur juga di tangan saya, jadi setiap fitur teknis di halaman ini sekaligus keputusan produk.

Technical challenges

  • Multi-tenant sejak fondasi — tenant scoping ditegakkan di token (PASETO) dan middleware pada setiap query, dengan enkripsi AES-256-GCM untuk data sensitif (plus tooling migrasi enkripsi saat skema berubah).
  • Payroll yang sadar regulasi — lembur bertingkat mengikuti aturan PP 35/2021, PPh 21, BPJS, pro-rata, dan payday yang bergeser otomatis saat libur bank. Diimplementasikan sebagai business rules yang teruji, bukan hardcode.
  • Batas modul yang tegas — empat modul di satu codebase Go, masing-masing dengan lapisan controller → service → repository sendiri dan DI di satu composition root. Menambah modul baru tidak membongkar modul lama.
  • Real-time tanpa kompleksitas berlebih — Server-Sent Events untuk update dashboard dan notifikasi PWA; pekerjaan berat (bulk import Excel, export, payroll run) berjalan sebagai job async, plus outbox pattern untuk provisioning yang tidak boleh hilang.
  • Integrasi pembayaran — Midtrans QRIS (statis & dinamis) di alur kasir, dengan rekonsiliasi di sisi shift.

Architecture & engineering decisions

Modular monolith, bukan microservices: satu binary Go (Gin) dengan empat modul berbatas jelas jauh lebih murah dioperasikan untuk skala saat ini — dan batas modulnya membuat pemisahan jadi service terpisah tetap terbuka bila dibutuhkan.

  • Go + PostgreSQL (sqlc) — query type-safe yang di-generate, bukan ORM; tiap modul punya migrasi sendiri.
  • Redis untuk cache, sesi, dan rate-limit; 12+ scheduler in-process (auto-lock payroll, eskalasi approval, purge audit) + outbox worker.
  • SSE untuk update real-time; integrasi gRPC (client) ke service workshop; WebSocket untuk sinkronisasi stok POS.
  • Auth PASETO berbasis cookie; enkripsi AES-256-GCM untuk data sensitif + isolasi multi-tenant di level aplikasi (tenant scoping di token & middleware).
  • Frontend: Next.js/TypeScript untuk dashboard admin, PWA untuk absensi karyawan, aplikasi kasir terpisah.
dex-fedashboard admin · Next.jsdex-attendancePWA karyawandex-posaplikasi kasirGo API — modular monolith (clean architecture)CoreHRISPOSInventoryPostgreSQLsqlc · migrasi per modulRediscache · job queue asyncintegrasi: Midtrans (QRIS) · OpenAI / Google AI · SSE + WebSocket · gRPC client (workshop)
Diagram arsitektur — rekonstruksi struktur sistem, bukan tangkapan layar.

UI

Seluruh tangkapan layar menggunakan data demo.

Dashboard admin HRIS Dexova dengan ringkasan kehadiran dan departemen
dex-fe — dashboard admin HRIS (data demo)
PWA absensi Dexova menampilkan tombol check-in dengan deteksi jarak kantor
dex-attendance — check-in geofence di PWA karyawan (data demo)
Layar kasir Dexova POS dengan grid produk dan keranjang
dex-pos — aplikasi kasir (data demo)

Outcome

  • Empat modul bisnis (HRIS, Payroll, POS, Inventory) berjalan production di satu codebase Go yang modular.
  • Tiga aplikasi dipakai user nyata: dashboard admin, PWA absensi karyawan, dan aplikasi kasir.
  • Karyawan mendapat portal self-service (absensi, slip gaji, cuti, shift) — proses HR yang tadinya manual jadi mandiri.
  • Arsitektur hexagonal + batas domain yang jelas terbukti: modul baru ditambahkan tanpa membongkar yang lama.

Lessons learned

  1. 01

    Modular monolith dengan batas tegas mengalahkan microservices prematur — biaya operasional turun drastis tanpa mengorbankan keteraturan.

  2. 02

    Aturan payroll adalah domain logic paling berbahaya untuk di-hardcode; menjadikannya konfigurasi + business rules teruji membayar dirinya sendiri setiap kali regulasi atau kebijakan perusahaan berubah.

  3. 03

    Job async + progress tracking bukan fitur 'nanti saja' — bulk import dan payroll run tanpa itu akan memblokir UI dan merusak kepercayaan user.

Butuh sistem seperti ini?

Saya menerima proyek pembangunan sistem bisnis — dari perencanaan arsitektur sampai aplikasi berjalan di production.