Full dashboard overhaul, Chargebee billing integration & API monolith migration.
Project Overview
Upcall is a B2B platform offering managed outbound calling and lead-generation services. I worked on a complete client-facing dashboard revamp, introduced a self-serve subscription billing system via Chargebee, and led the technical migration from a distributed API architecture to a unified Rails monolith โ all while improving database performance.
The Problem
Upcall's existing dashboard was outdated and difficult for clients to navigate. Their billing involved multiple disconnected systems, and the fragmented API architecture made maintenance expensive and deployments risky. Performance issues in the database layer further slowed the product.
My Responsibilities
Dashboard Revamp
Rebuilt the client-facing dashboard with an entirely new design, improving usability, data visualisation, and navigation flow for Upcall's business customers.
Chargebee Integration
Implemented a self-serve subscription management portal via Chargebee, allowing clients to upgrade, downgrade, and manage billing without contacting support.
API โ Monolith Migration
Led the migration from a distributed multi-API architecture to a single, maintainable Rails monolith, reducing operational complexity and deployment risk.
Database Optimisation
Identified slow queries using EXPLAIN ANALYZE, added missing indexes, and introduced a caching layer to dramatically reduce DB load on high-traffic endpoints.
Key Challenges & Solutions
Zero-Downtime API Migration
Migrating from multiple APIs to a monolith without disrupting active clients required a staged approach โ first shadowing the old APIs with Rails routes, then gradually deprecating external endpoints while keeping clients unaware of the change.
Chargebee Webhook Reliability
Self-serve billing depends on accurate webhook delivery from Chargebee. I implemented idempotent event handling with event deduplication and retry logic to ensure subscription state stayed in sync even during network failures.
Dashboard Performance
The new dashboard loaded aggregate data for many clients simultaneously. I introduced query result caching with cache invalidation tied to data-changing events, reducing dashboard load time from seconds to under 200ms.
Let's Work Together
I'm currently available for freelance projects and open to new opportunities. If you have an idea or just want to say hi, send me a message!