July 11, 2026 · 8 min read
Why payroll is the most dangerous domain logic to hardcode — and how Dexova structures locked periods, PP 35/2021 overtime rules, and async payroll runs.
HRIS · Payroll · Go · Architecture
July 11, 2026 · 7 min read
The tenant-isolation pattern I use in Dexova and Helixio: a single schema with disciplined tenant context, RBAC, and the traps that only bite once background jobs show up.
SaaS · Multi-tenant · PostgreSQL · Go
July 8, 2026 · 8 min read
A cashier system is not about adding up prices. Here is how Dexova POS keeps the money matching: open/close shifts with opening cash, split payments, Midtrans QRIS, void & returns that restore stock, and daily cash reconciliation.
POS · Cashier · Reconciliation · Midtrans
July 2, 2026 · 7 min read
Manual attendance is easy to game. Here is how to build a PWA attendance system with nearest-office detection, a mandatory selfie, a two-address model for WFH, and approval-gated corrections — without imprisoning honest employees.
HRIS · Attendance · Geofence · PWA
June 24, 2026 · 8 min read
Ports & adapters is not an academic ritual. Here is how I use hexagonal architecture across Dexova's modules to make domain logic testable without a database, and adapters swappable without touching business rules.
Go · Architecture · Hexagonal · Clean Architecture
June 12, 2026 · 7 min read
Tenant filters in the application are easy to forget — and one slip leaks data. RLS moves isolation into the database as a last line of defense. Here is how to use it correctly, plus the leak tests you must have.
PostgreSQL · Multi-tenant · RLS · Security
May 28, 2026 · 7 min read
Inaccurate stock makes every report untrustworthy. Here are the principles that keep inventory honest: every stock change is a recorded event, returns put items back, and inter-warehouse movements are traceable.
Inventory · Stock · POS · Architecture
May 16, 2026 · 7 min read
Work that touches thousands of rows must not run inside one HTTP request. Here is the async-job pattern I use in Dexova: idempotency, safe retries, progress monitoring, and dead-letter for permanent failures.
Go · Async · Queue · Architecture
May 2, 2026 · 7 min read
Online payments are asynchronous — and that is where the trap is. Here is how to integrate Midtrans QRIS correctly: the webhook as the source of truth, signature verification, idempotency, and reconciliation.
Midtrans · Payments · Webhook · Security