Case Study · Enterprise Internal Tools

Sales Productivity Platform for a Fortune 500 Research Firm

Replaced legacy Excel-based deal tracking with a React management portal and Python data pipelines. 34% productivity lift across 100+ sales reps. 50%+ fewer manual handoffs.

React Python Java Spring Oracle SQL REST APIs Enterprise
SHIPPED · ENTERPRISE
RoleFull-stack engineer
StackReact · Python · Oracle
Users100+ sales reps
Impact+34% productivity
Q3 Pipeline · North America
Live · Updated 2 min ago
Pipeline Value
$48.2M
▲ 12.4% vs Q2
Active Deals
847
▲ 64 this week
Productivity
+34%
vs Excel baseline
Deal Funnel · 5-Stage
Prospect
312
$18.4M
Qualified
204
$13.1M
Proposal
141
$9.6M
Negotiation
96
$5.2M
Closed Won
94
$1.9M
Recent Sync · API + Pipeline Activity
SyncedClient enrichment payload from CRM → portal · 1,284 records14:22
REST/api/deals/update · downstream BI dashboard refreshed14:19
QueuedUnstructured notes ingestion · 48 deals pending parse14:18
SyncedOracle schema · client_v2 model committed across 12 services14:11
SyncedClient enrichment payload from CRM → portal · 1,284 records14:22
REST/api/deals/update · downstream BI dashboard refreshed14:19
QueuedUnstructured notes ingestion · 48 deals pending parse14:18
SyncedOracle schema · client_v2 model committed across 12 services14:11

As part of the platform team at a Fortune 500 research firm, I designed and built the internal sales operating system that replaced a sprawling Excel-based workflow. Two surfaces, one platform: a React management portal the sales team lives in, and a set of Python REST APIs that keep client data, pipeline state, and downstream enterprise dashboards in sync.


The Problem
Excel was the system of record. That's where the cost was hiding.

100+ sales reps were tracking deals, clients, pipeline stage, and account history across fragmented Excel files. Every team had its own version. Every quarter someone had to stitch them back together for leadership reporting. By the time a number reached an exec, it was already a few days stale and a few dozen edits behind.

Below the surface, the real cost was integration debt. Client data lived in one system, deal data in another, and the unstructured stuff, like call notes and account context, lived in a rep's head or in a one-off spreadsheet column. Manual handoffs between systems weren't a process problem; they were the process. People were the integration layer.

So the brief had two parts: give the sales team an interface they actually want to use, and replace the human integration layer with code.


What I Built
An internal portal on top of a real data backbone.
Surface · React Management Portal
The interface that replaced Excel.

A React-based portal where sales reps run their day: real-time deal tracking, client management, pipeline stage updates, and dashboards scoped to their book of business. Role-based views for reps, managers, and ops, with the same data shown through a different lens.

Forms beat formulas. Updates write through to a real schema instead of a tab in a workbook. Audit trail by default. Reports that were quarterly stitching jobs became live dashboards.

Backbone · Python REST APIs + Oracle SQL
The data layer that killed the handoffs.

I redesigned the Oracle SQL schema so client information became a first-class model instead of a denormalized blob spread across 14 tabs. Then I built REST APIs (originally Java Spring, later Python services) that downstream enterprise dashboards, reporting tools, and BI systems could subscribe to.

Structured data and unstructured context (call notes, account history) flowed through the same contracts. Manual handoffs dropped 50%+, not because anyone tried harder, but because the work stopped existing.


Architecture & Technical Decisions
Four calls that shaped the platform.
Single Source of Truth Beats "Spreadsheet Discipline"
Telling 100+ reps to keep their Excel files clean is not a strategy. The portal made the database the source of truth. Formulas couldn't drift, columns couldn't be renamed, and the audit trail came for free. Adoption was driven by removing alternatives, not training videos.
Client as a First-Class Schema Object
The Oracle redesign treated client information, its IDs, hierarchy, contacts, and history, as a normalized core that every other system could reference. Once that existed, the dashboards, reports, and APIs could stop reinventing client identity inside their own copies of the data.
REST Contracts Downstream Systems Could Trust
Started in Java Spring for fit with the existing enterprise stack, then evolved into Python services as the data work grew. Same API contracts throughout, so downstream BI dashboards and reporting tools never had to care about the rewrite.
Migrate Without a Cutover Day
Rolling out new tooling to 100+ revenue-generating users with a "Monday everything is different" plan is how projects die. The portal launched alongside Excel, then pulled work over feature by feature until the spreadsheets had nothing left to do.

Results
Excel got pulled out of the critical path.
+34%
Sales-team productivity
100+
Sales reps onboarded
50%+
Fewer manual handoffs
0
Excel files in the critical path

The portal became the place sales work happens. Pipeline reporting that used to be a quarterly stitching job became a live view. Client data stopped diverging across tools. Sales productivity went up 34% because the team stopped doing data entry twice and started spending the saved hours on actual deals.


Tech Stack
React Python Java Spring Oracle SQL REST APIs Enterprise BI Schema Design Internal Tools
What this means for you
Drowning in Excel? This is what I build.

If your sales, ops, or revenue team is running on a maze of spreadsheets, manual handoffs, and "wait, which file is the latest?", this is the kind of internal tooling I ship. Real schema, real APIs, real interface, real adoption.

And what used to take a rep 30 minutes of copy-paste between systems is exactly the kind of work I now automate end-to-end with AI agents. Same problem the Excel-replacement story solved a decade ago, modern stack: agents that read the inbox, update the CRM, draft the follow-up, and hand the rep a finished thing instead of another form to fill.