Case Study

Predictive Lead Portal

Analytics platform for prioritizing banking sales leads

ClientAsah by Dicoding
RoleTeam Leader & Full-Stack Developer
Year2025
TimelineOct – Dec 2025
Scope of WorkFull-Stack Development, Team Lead, ML Integration
LocationRemote, Indonesia
View source on GitHub

Drag to rotate

Overview

Predictive Lead Portal (BankLead) is an analytics platform that helps banking sales teams prioritize the right customers. Instead of dialing leads at random, a machine-learning model scores every prospect by conversion probability, and the portal turns those scores into a clear, role-based workflow for managers and sales reps. As Team Leader and Full-Stack Developer on this Asah by Dicoding capstone, I carried the project from an open-ended brief to a delivered product — framing the problem, leading a team of five, building across the stack, and presenting the result.

0
Engineers in the team
0
REST API endpoints
0
Role-based portals
0
Services kept in sync
A manager cockpit that ranks every lead by conversion probability
01

A manager cockpit that ranks every lead by conversion probability

The manager dashboard opens with the numbers that matter — total prospects, average success rate, and peak conversion — then lists every lead ranked by the ML success score. From one table the manager can search, inspect, and assign prospects to sales reps individually or in batch, turning tens of thousands of records into a focused plan of action.

Thousands of leads, scored in batches and explained
Thousands of leads, scored in batches and explained
02

Thousands of leads, scored in batches and explained

Managers upload leads as JSON in configurable batches; the pipeline streams each batch to the ML service and reports progress and a success/failure summary as it runs. Every scored lead opens into a full profile — age, job, marital status, education, contact channel — beside a transparent probability score, so the prioritization is explainable rather than a black box.

Filtering that turns a huge list into a call list
03

Filtering that turns a huge list into a call list

A single filter panel narrows the catalog by campaign, outcome, assignment status, and a minimum/maximum success-rate range. Sales and managers can carve the exact slice they want to work — the highest-probability, still-unassigned prospects — instead of scrolling through everything by hand.

A focused sales workspace, from assignment to follow-up
A focused sales workspace, from assignment to follow-up
04

A focused sales workspace, from assignment to follow-up

Each sales rep sees only their assigned leads, summarized by status — not yet contacted, awaiting confirmation, not interested, interested — and sortable by success rate. Every call, WhatsApp, or email becomes a logged follow-up with a status, and the full history stays searchable and filterable, kept in sync across the team through live server-sent updates.

Behind the build

My role

ReactTypeScriptViteTailwind CSSNode.jsExpressPostgreSQLFastAPI
  • 01Led the capstone team end to end — scoping an open-ended brief, delegating work, and presenting the delivered product
  • 02Framed the problem with the team and shaped the solution: predictive lead scoring for bank sales campaigns
  • 03Built across the stack — a React + TypeScript front-end and a Node.js, Express, and PostgreSQL back-end
  • 04Integrated the ML scoring service (FastAPI, Logistic Regression) and the batch ingestion pipeline into the product
  • 05Designed the role-based workflow between Manager and Sales — lead assignment, follow-ups, and live status updates

A three-service architecture, kept in sync

The product is split into three services: a React, TypeScript, and Vite front-end; a Node.js, Express, and PostgreSQL back-end exposing 26 REST endpoints with JWT auth and server-sent events; and a Python FastAPI service running the Logistic Regression model trained on the UCI Bank Marketing dataset. As team lead I owned the contracts between them, so the front end, API, and model stayed aligned as the build moved fast.

Scoring people, responsibly

Because the model ranks real customers, every score is paired with the lead's underlying profile and a clear probability, and the workflow separates what managers and sales can do. The goal was to remove the guesswork and bias from manual lead picking without hiding the reasoning. For me the real lesson was leading an open-ended brief all the way to a delivered, demoed product — scoping, delegating, and presenting the result.