// project 02 - teardown

Video conferencing platform — call surface

An MVP already existed; the new design meant starting over. Rebuilt the whole call experience from zero — camera, mic, and screen share live in the browser over WebRTC, with host controls and real-time chat running alongside.

Role

Front-End Engineer

Stack

Vue 2 · WebRTC · WebSockets

Modes

Open · Hosted

Notable

Full rebuild from MVP

Vue 2
WebRTC
WebSockets
Screen sharing
Safari compat
01

The call surface

Hosted call — 4 participants
OpenHosted
HostMKMira K.sharing screen
JDJames D.
SRSana R.
Priya N.
Omar F.
02

Safari-specific backlog

#0142Screen-share track drops silently on Safari after tab switchResolved
#0158getUserMedia constraint mismatch — Safari ignores facingMode on desktopResolved
#0173ICE candidates gathered in different order than Chromium, breaking reconnectResolved
#0190Audio track renegotiation fails silently mid-call on SafariResolved
03

Build notes

Two modes, one call model

Open calls let everyone share camera and screen; hosted calls restrict that to the creator — same underlying call state, different permission gates.

Admission, not just muting

New participants wait in a lobby until the host admits them. The host can mute or remove anyone mid-call, no re-join required.

Chat beside the call, not inside it

Messages ran over a separate WebSocket connection alongside the WebRTC media stream, so chat kept working even under bad video conditions.

Chromium was not the baseline

WebRTC behaves differently on Safari — from getUserMedia constraints to ICE ordering. Most of the post-launch backlog was tracking down and working around exactly where.