We rebuilt the technical platform behind an official NBA team’s fan app for FanServ, the agency that owned the product: backend, native iOS and Android apps, push pipeline, live feed, and CMS. Live feed refresh went from 60 seconds to 5; push notifications reached tens of thousands of devices in 20–30 seconds during games.
The Situation
FanServ, a U.S. digital agency for the sports and entertainment industry, was tasked with redesigning the official app of an NBA team whose app served hundreds of thousands of fans. The existing app ran on outdated core components. Push delivery was unpredictable: some fans got game updates late or not at all, at tens-of-thousands-of-devices scale. The in-app feed lagged the actual game: the league’s legacy FTP/XML pipeline and a 60-second refresh couldn’t keep up. Editors managed content through a raw Django Admin, typing in by hand what league APIs could have automated. FanServ’s product owner and designer led the vision; we owned the complete technical execution: development, project management, and QA.
What We Did
We rebuilt the platform from the ground up under live-event constraints: hundreds of requests per second during games, with any failure visible to tens of thousands of fans in real time. The push pipeline moved to parallel processing across multiple Celery queues with multi-threading, and delivery migrated to APNS2 and Firebase. For the live feed, we replaced the league’s legacy FTP/XML processing with official-API scraping at a tighter interval, and replaced the mobile data pull with WebSockets so devices receive game state as it changes. Around that core: new native iOS and Android apps with a new design and fan-requested features, a new Django backend on AWS built from scratch, and a dedicated Angular management portal replacing the raw Django Admin. One constraint shaped the tail of the project: no staging environment reproduces a real game-night spike, so we treated the first live games as part of the engagement and monitored them end to end.
What Moved
Feed refresh went from 60 seconds to 5, and delivery to devices moved from a 20-second pull to real-time WebSockets. Game state in the app was 12× fresher. Post-quarter push notifications during live games reached all of tens of thousands of devices in 20–30 seconds. Fan engagement improved with the redesigned app and editors were happier with the dedicated CMS; those are qualitative observations from the time, not numbers we recorded.