Insider's entire business was offline events. Ticketing, in-person shows, the kind of thing that requires people to be in the same room. Then COVID happened, and the business that had built the company disappeared in about three weeks.
We had six months of runway and no product. Not a slow decline we could plan around, a business model that stopped existing overnight. The mandate was simple to say and hard to do: build something people would pay for, fast, with no idea yet what that something was.
1
2
Admin
Moderators
Participants
That slowed the first few weeks down. It also meant that when engineering rebuilt the entire stack from Angular to React midway through the project, a decision made without me and one I didn't see coming, the interface barely felt it. If I'd built rigid, one-off screens instead of a real system, that migration would have cost us weeks we didn't have.
I also made a smaller call I'd defend again: the poll interaction wasn't the same component reused on every screen. Mobile got a bottom sheet, desktop got a corner box. Small difference, but it meant the feature never felt bolted on to whichever platform wasn't the primary target.
Three roles, fully designed
Admins running rooms and setting rules, Moderators keeping sessions on track, Room Joinees showing up to participate. A joining flow that told people upfront what the platform could see and hear from them, camera and mic controls front and center before anyone entered a room, not buried in settings.
Device based design
An information-dense left panel that resized on interaction, giving people more room to scan detail without a second screen or a separate tab. Animated states for live polls, built in Protopie and Rive, appearing as an unobtrusive bottom sheet on mobile and a corner box on desktop.
Design system underneath all of it

I set up CleverTap to A/B test post-launch, and then moved teams before I ever saw the results. I don't know today which version of which screen actually won. That's a real gap in this story, not a humble-brag, an actual loose thread I'd handle differently now: I'd hand off the test with a clear owner and a date to check back, not just switch it on and walk away.
I'd also push back harder, in hindsight, on being kept out of the Angular-to-React decision. It happened to work out because the system was flexible. It could just as easily not have, and I got lucky that the bet I made for a different reason (plug-and-play components) also happened to save us on a problem I didn't see coming.
© 2026 Samarth Nayyar








