Predictive Lead Portal
Analytics platform for prioritizing banking sales leads
Drag to rotate
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.

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
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
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
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.
My role
- 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.