* feat(orion): add endpoint for link metadata
* refactor: cleanup comments
* wip: plumbing for building a web app
* setup deployment materials for web app
* fix(web): favicon
* mobile: wire notification registration and listener
* implement backend components for push notifications
* refactor: agentic comment cleanup
* docs: use proper module name for particle processor
* set required env variables for push notifications
* bump version
* fix: always upsert push token on mobile start
* Revert "fix: always upsert push token on mobile start"
This reverts commit 90ff18a788.
* send push notifications regardless of online status
* stage 1: project init
* stage 2: skeleton with navigation
* step 2.5: streams list
* step 4: stream playback experience
* step 5-6: compose experience
* fix: broken record
* transcode media particles to mp4
* build: reproducible go generate
* build: rename skaffold module for particle processor worker
* infra: increase particle processor worker resources
Was dealing with OOM errors
* tweaks to mobile
* log transcode work
* view on desktop placeholder
* tweak padding
* cap video resolution to save on memory
* infra: bump memory limits as insurance
* ux improvements
* update bundle id for mobile
* config for mobile
* setup firebase custom token
* docs
* docs
* feat: allow admin removing members from a network
* fix: properly handle fallback avatar and names
This is especially helpful in the case of members who were removed from
a network
* increases timeout
* refactor: reuse constants for redis db
* avoid closing connection on pong error
* fix: prevent electron from pausing timer executions
Our pings could be paused when our app is backgrounded.
* refactor: remove unnecessary refs
* fix: presence unreliable within same pod
It was broadcasting presence changes to other pods, but not notifying
clients connected to the same pod
- New cron job in cluster
- Handle presence and other concerns
- Toggle in app to disable email notifications
- Handles other edge cases such as cooldown period
- Simple html email with simple message
Closes#117
* setup infra for pusher service
* setup client sdk for pusher service
* fix: ping parse failure
* fix: send pong back to client
avoid disconnections every 2.5 minutes
* increase replicas
* feat: show presence and compose indicator
* refactor: use interfaces for function params
* cleanup message retention code
* support open / closed streams
- Tabs for viewing separately
- Context menu to close / open streams
- Update stream particle status field
* ui tweak
* show stream state in stream-view
* ui tweaks
* cleanup message retention from orion api
* 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.
This was causing issues in which the last_child_created_at field for
stream particles was slightly after the actual particle's creation time,
and so comparing whether it's unseen merely via the playback markers
would be inaccurate.
This generates the transcript and shows the caption experience on the
client side for media particles. It also simplifies other side effects
that we must perform such as updating the `last_child_created_at` field
for stream and container particles.
* refactor: update api and client to reference humanIds
* fix: prevent deletion of network member
This may cause various side effects if there is data in other services
which reference this member
* chore: only set visibility for container particles
* create reusable controls indicator for reply or new
* compress the size of top bar
* refactor: restructure state, routing, and more
* introduce stream compose flow
* feat: compose new stream full flow
* implement stream player
* fix: prevent redirect for signed object urls
* fix: implement stream playback cleaner structure
* refactor: layout file name
* feat: show stream name in breadcrumbs
* chore: tweak padding
* chore: adjust position of audio bars
* feat: show latest particle preview in stream list
* fix: remove console log
* refactor: reorder classes
* fix: avoid passing in updated_at to firestore particle
* refactor: extract properties for container particles to flat fields in firestore
* make the stream previews look alive
* feat: show audio bars during audio clip playback
* feat: order streams by last child creation
* feat: playback where I left off
* chore: remove unused store
* fix: recording mode not using shared state
* chore: clean unused variable
* remove unused imports
* fix: improve controls indicator immersion
* feat: show playback progress in bar & auto-play text
* feat: auto-exit stream on playback completion
* fix: jittery media playback progress
* fix: navigate during state change is invalid with react router
* fix: buggy exit progress when changing clips
* feat: add app icon
* update package.json info
* feat: only show streams visible to me
* feat: show seen indicator on particles
* fix: prevent unnecessary effects
* fix: play new particle after playback is ended
* use contols indicator for exit timer
* plumb for firestore
* chore: cleanup orion api to only include essentials
* setup boilerplate for data and rendering
This includes zod types creation for API response validation, and
exploration of path based resolution of rendering particles.
* chore: structure container particles for rendering children
* wire firestore crud for particles
* integrate visibility to particles
* docs: explain particle view resolver