Work · 2019 — 2026

Five accounts, in their own words.

Client names appear where the contract allows it. Every figure below was measured against a baseline we recorded during the mapping week, not estimated afterwards.

38Systems live in production
17Clients under managed support
6Sectors, mostly operations-heavy
0Accounts lost to a failed cutover

FMCG distribution

Cikarang, West Java
2023 — present
42 sales reps

Canvassing app wired straight into Accurate

Reps wrote orders on carbon-copy pads. Admin staff re-keyed them into Accurate after 17.00, invoices went out three days later, and roughly one order in twenty was billed for stock that had already been promised to someone else.

We built an offline-first Android app for the field team and a sync service into Accurate that respects reserved quantities. Orders now reach the finance queue while the rep is still in the car park. A nightly reconciliation compares both sides and raises anything that disagrees before anyone opens the ledger.

KotlinOffline syncAccurate APILaravel
4 hrsOrder to invoice, from 3 days
−94%Double-promised stock lines

Healthcare

Jabodetabek
2022 — present
11 clinics

BPJS claim reconciliation for a clinic group

Claims came back rejected six to eight weeks after submission, usually for a missing field or a coding mismatch. By then the clinic that made the error had forgotten the visit, and the group was carrying the cash gap.

We instrumented the submission path, added validation against the current ruleset before anything is sent, and gave every clinic a queue of exactly which records to fix, ordered by value. The head of finance sees one number per clinic per week instead of a shared folder of PDFs.

LaravelPostgreSQLMetabaseUU PDP
−62%Claim rejections in two quarters
19 daysFaster average collection

Component manufacturing

Karawang, West Java
2021 — present
3 production lines

Line monitoring the supervisors actually read

Machine counters were copied into a shift book by hand and typed into a spreadsheet on Monday morning. Nobody could say what a stoppage on Wednesday night had cost, only that the week had been bad.

We put the counters on the plant network, built an OEE view per line with a shift comparison, and pushed stoppage alerts to the supervisor's phone with the machine and the reason code already filled in. The Monday spreadsheet was retired in the third month.

Node.jsTimescaleDBGrafanaMQTT
Real timeDowntime visibility, from weekly
+7.1 ptOEE on the slowest line, year one

Third-party logistics

Cakung, East Jakarta
2024 — present
6 warehouses

One tracking page for four courier partners

Customer service answered "where is my shipment" by logging into four courier portals and one spreadsheet. Average handling time was over nine minutes, and the answer was often wrong.

We built an ingestion layer that normalises the status codes of every courier partner into one vocabulary, backed by a customer tracking page and an internal console. Exceptions — stuck, mis-sorted, returned — surface as a work queue rather than waiting for the customer to notice.

TypeScriptAWS JakartaCourier APIsRedis
2m 10sHandling time, from 9m 20s
1 portalInstead of four, plus a sheet

Cooperative & savings

Depok, West Java
2019 — present
8,400 members

Member savings and lending, off the spreadsheet

Our first long-standing client, and a neighbour on Margonda. A cooperative running savings, loans, and instalment collection out of linked spreadsheets, with month-end closing taking most of a week.

We built a core ledger with double-entry postings, member self-service over WhatsApp, and QRIS collection for instalments. Closing runs the morning after the last working day. Seven years on, the same two engineers still maintain it.

LaravelPostgreSQLQRISWhatsApp API
1 dayMonth-end close, from 5
7 yrsContinuous operation

Your turn

Every one of these started as one broken handover.

Tell us where yours is. We will tell you whether it is worth building for, and what it would take.