An enterprise telecom platform handling 10,000+ transactions a day on the Bandwidth and NetSapiens carrier APIs: bulk ordering of 100+ phone numbers at a time, number porting, reseller operations and customer domains, on Azure serverless functions.
The problem
Telecom operations are unforgiving: a number port is a regulated, multi-party process with no undo, and a reseller ordering a hundred numbers at once expects every one of them to land. The platform had to hold 10,000+ transactions a day across carrier APIs it did not control.
Loop Start's public website. The telecom platform I worked on runs behind it and is private.
Built for
Cinnova
Role
Team Lead / Senior Software Engineer — led delivery, 5+ engineers
Scale
10,000+ transactions a day
100+ phone numbers per bulk order
100+ customer and reseller domains
Azure serverless functions
Period
2022 — 2025
Stack
TypeScript
Node.js
Express
React
Next.js
Azure Functions
Azure Blob Storage
Python
FastAPI
Socket.io
AWS
Status
Client platform. Described at the level of detail the work allows; no proprietary implementation is reproduced here.
What I built
Led delivery of the platform with a team of 5+ engineers, across sprint planning, technical design and code review, and owned the architecture decisions.
Developed the number ordering and porting workflows: availability lookup, inventory management, validation, and the regulatory compliance rules around port-outs and SMS campaigns.
Wrote the agent communication and agent-availability features for the embedded chat, running across 100+ customer and reseller domains.
Locked down chat abuse with session-level rate limiting, abusive-user blocking, abusive-word masking and a three-level warning system for repeated spam.
Integrated Kuma as a separate service-health layer, with the checks written in Python and FastAPI over SIP REGISTER and OPTIONS, then extended it with per-domain site configuration and status pages created from the portal.
Optimised the Node.js and Express order-management endpoint that filtered and searched large datasets across several modals at once: traced the slow paths to N+1 queries and image data stored in the database, then moved image handling to Azure Blob Storage, keeping only URLs in the records.
Reorganised data loading in the React and Next.js frontends (TypeScript) so the order-management screens stopped fetching several record sets and modals in series.
Cleaned up customer-specific chat problems, from domain restrictions to theme conflicts and CSS overlaps, while keeping the configurations reusable.