Fakhri Danial

Case Study

KodeData

Founder & CEO · 2026 – Now

kodedata.com

KodeData builds Koda, a collections and telephony platform for lending call centers in Indonesia. Agents use it to work through overdue accounts, supervisors use it to see what is happening on the floor right now, and the whole thing sits on a voice stack we run ourselves rather than rent.

I started it in 2026 after leaving my last engineering job. I write the code, run the infrastructure, and sit in the calls where the product gets sold. That combination is the point: the features that matter turned out to be the ones you only notice by watching someone use the thing for eight hours straight.

The problem

A collections floor runs on phone calls, and most of them are still dialed by hand. An agent reads a number, types it, waits through the ringing, and more often than not reaches nobody. Then they do it again. The actual conversation, the part the business is paying for, is a small fraction of the day.

Everything above that is guesswork too. Which accounts got worked today, which agent is actually on a call versus staring at a screen, whether a number is dead or the person simply is not picking up: none of it is visible unless somebody builds it. So we built it.

What it looks like

Screens below come from a demo tenant with generated data. Nothing here belongs to a real customer.

Koda overview dashboard showing call volume, call outcomes, and agent performance
Overview. Call volume, how calls ended, and per-agent performance for the period. The number that matters is not calls made, it is calls connected.
Koda agent workspace showing a queue of debtor accounts with outcome filters
The agent workspace. One queue, one account at a time, outcome recorded before moving on. This is the screen someone stares at for a full shift, so almost every design argument we have is about this page.
Koda auto dialer configuration showing list, pace, and crew selection
Auto dialer. Pick the list, set how many lines each agent gets, choose the crew. The engine calls the customer first and only bridges an agent once somebody actually answers, so nobody is left holding a ringing phone.
Koda live agents view showing agent status, occupancy, and live call controls
Live agents. Who is online, who is on a call, and how long that call has been running. Supervisors can listen, whisper to the agent, join, or take the call over.

The part I am proudest of

Manual dialing has a failure mode nobody was measuring: the agent hangs up while the phone is still ringing. It feels like nothing. It is one impatient click, repeated a few hundred times a day, and the calls it kills are the ones that were about to connect.

So we started measuring it. Koda now separates a dead number from an unanswered one, tells a carrier fault apart from a refusal, stops redialing numbers proven dead, and shows each agent how long they wait before giving up next to how long the people they are calling actually take to pick up. That last comparison is per tenant, because the answer differs by portfolio and a borrowed benchmark would be worse than none.

It is advisory, not a brake. Nothing stops an agent from hanging up early. But once a supervisor can see it, it stops being invisible, and it turned into the clearest argument for moving a floor off manual dialing altogether.

How it is built

TypeScript

One language across the API, the dashboard, and the tooling.

Hono on Node

Small, fast, and boring in the way a billing-adjacent API should be.

PostgreSQL

Every call, outcome, and promise to pay is an auditable row.

Asterisk

We run the telephony ourselves instead of renting somebody's dialer.

Next.js

The dashboard supervisors live in all day.

Flutter

Where the work needs to leave the desk.

Running the telephony ourselves is the decision everything else hangs on. It is more work than buying a dialer, and it is the reason we can answer questions about call quality that a rented platform will not tell you.

Want to see it properly

A screenshot only goes so far. If you run a floor that still dials by hand, a live walkthrough on your own numbers is a better use of both our time.

fakhridanial29@gmail.com