Remo
Remo is a unique conferencing application which allows users to meet in a virtual space. Meetings can be retreats, team building exercises, professional panels, or just simply a virtual office space for remote teams. It is able to handle events up to a thousand users in a single space.
Tools used
- React
- GraphQL
- Node.js
- Typescript
- Postgres / MongoDB
Role
At Remo I worked in a variety of roles. I was assigned front-end, back-end, and some dev ops tasks.
Shuffle
The shuffle feature of Remo places each user at a different table. It's a well used feature for mixers.
I rewrote the feature to be up to 20 times faster than our previous implementation. I also added the ability for users to choose how many users per table the algorithm would favor.
Shuffling users in an assortment of tables of varying sizes is an np-hard problem. The solution took the implementation of a greedy algorithm that used the heuristic of the desired amount of users per table. By adding a single user to a table in steps that yielded the best assortment it would find a close to optimum solution.
Audio / Video
I migrated all of our video components to a new provider. Along with the video migration I rewrote the existing UI layer that rendered all video components. This migration reduced the amount of code of audio and video related components by a third and reduced the cost of our AV provider by half.
I also wrote the React layer for the background blur and background image replacement for videos.
Mobile performance
I worked on the the layout of Remo to ensure that key components were responsive. I removed mobile specific components and made their desktop counterparts responsive. I made fluid layouts with grid
and used feature detection to remove components based on browser support. Opting to make responsive components essentially allowed us to maintain one version of a feature rather than two.
Core UI
I wrote core front-end components that were used all across the app. These components were all unit and snapshot tested and documented in Storybook.