Closes#131
Fundamentally, we cannot afford to composite webcam and screen on the
client. We should create two streams and then combine them with ffmpeg
processing in the backend / orion.
* first pass implementation
* remove screenrecord shortcut hint
* refactor
* fix: prevent mirror review of screen recording
* feat: allow recording with webcam overlay
* fix: review screen recording without clipped content
* tidy keyboard hints consistent position
* refactor: re-use one component for screen picker
huddles and screen clips use same picker component now. We had to make
sure that tailwind works for both of them.
* fix: improve visibility of keyboard hints
During compose video or screen recording, the keyboard hints were
invisible if the content was super bright.
This created some distortion because while we were hiding the autoplay
window, this would not stop it's media. It's better to stop the media
completely
* add token endpoint for livekit
* fix: invalid type passed to hook
* fix: inject livekit env variables for orion
* fix: show controls indicator above stream # shortcut
* return livekit server url from api
* simple huddle implementation with streams
* set human name in livekit room context
* simplify deployment tooling
* join huddle with audio automatically
* feat: show when there is an active huddle
This introduces a webhook which listens to events from livekit and
updates our firestore stream particle. It keeps the client simple,
reacting to changes to firestore docs.
* use headphones icon for huddles
* fix: screenshare not working in electron
The default VideoConference component from livekit doesn't support
screenshare in electron. This attempts to compose our own layout with
livekit components ourselves and introduces our own flow for
screenshare.
* prototype with two windows
* use deps in separate window render process
* enhance autoplay into desktop overlay
* fix: autoplay window not applying tailwind styles