Commit Graph
100 Commits
Author SHA1 Message Date
talksik bfa970d706 fix: simplify window / app close behavior
Closes #142
2026-04-12 10:22:21 -07:00
talksik 484ee9d4fb fix: longer markdown content hidden
Added scroll to longer content and padding to avoid conflicting with
stream view peripheral controls and panels
2026-04-12 10:12:06 -07:00
Arjun PatelandGitHub 2bc4ce7060 fix: unreliable websocket functionality (#144)
* 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
2026-04-12 10:00:11 -07:00
talksik 4cb562e1ea chore: bump version 2026-04-09 17:05:45 -07:00
talksik 4d9a415981 fix: prevent playback marker going back in time
Closes #141
2026-04-09 17:02:50 -07:00
talksik 762c0ccf6e fix: emails sending despite online status
Closes #140
2026-04-09 16:30:07 -07:00
talksik 66aec4478f fix: websocket connections unreliable
Constant disconnection and reconnection every couple minutes or less.
2026-04-09 16:18:38 -07:00
talksik 5ea8476f54 debug logs for email notifier job 2026-04-09 15:31:45 -07:00
talksik 08f6b95b9b chore: bump version 2026-04-09 14:17:22 -07:00
talksik 51c4c6c822 feat: send email notifications for missed messages
- 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
2026-04-09 14:15:34 -07:00
talksik 6fe5af8d8d fix: dock app badge shows incorrect number
Closes #122

We now only show number based on open streams
2026-04-09 12:31:14 -07:00
talksik d024751135 fix: avoid beep sound on text messages when autoplay disabled 2026-04-09 12:21:13 -07:00
talksik e9af91e0c3 fix: maintain consistent sort of stream members 2026-04-09 12:19:17 -07:00
talksik bea33d29d3 use green border for presence avatar 2026-04-09 12:17:55 -07:00
Arjun PatelandGitHub 3d8fa79657 add real-time infrastructure (#137)
* 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
2026-04-09 12:08:18 -07:00
talksik ce368c9e6e fix: broken screen clip playback progress
It wasn't progressing, likely because the metadata for a screen
recording was not read by the video html element. So we fallback to our
own duration metadata.

Closes #135
2026-04-09 11:00:55 -07:00
talksik 47b0d320f6 chore: bump version 2026-04-09 09:50:10 -07:00
talksik 0ab2a58f10 refactor: unused import 2026-04-09 08:42:29 -07:00
talksik 9cda5a3aa3 fix: two components rendering with same key
This is due to using binding.description as the key in Keybindings
overlay
2026-04-09 08:42:05 -07:00
talksik 3995777965 feat: toggle video / audio with keybinding 2026-04-09 08:40:27 -07:00
talksik d88d28a94e refactor: unused import 2026-04-09 08:31:23 -07:00
talksik 070684deb5 show overlay during screen recording 2026-04-09 08:31:23 -07:00
talksik f91068a4c1 fix: freezes during longer screen recordings
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.
2026-04-09 08:31:23 -07:00
talksik 5fadc6c8fe chore: bump version 2026-04-08 17:34:12 -07:00
talksik aaa0b1891f fix: focus lost when transitioning from immersive to markdown 2026-04-08 17:32:47 -07:00
talksik fbce997180 feat: position reactions in better spot
This prevents overlap with captions. It also introduces the laughing
emoji.
2026-04-08 17:25:50 -07:00
Arjun PatelandGitHub be7a42c483 feat: send screen recordings (#128)
* 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.
2026-04-08 17:14:39 -07:00
talksik bebd814c46 chore: bump version 2026-04-08 11:25:21 -07:00
talksik 382f195847 fix: autoplay sound overlapping with main window
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
2026-04-08 11:06:49 -07:00
talksik 5f80bd15d5 feat: allow reactions to particles in stream
Closes #111
2026-04-08 10:14:47 -07:00
talksik ac7336592a feat: support markdown formatting and rendering
Resolves #110
Goes the extra mile and supports markdown for sending code and formatted
text, almost document-like. It feels more like GitHub's comments and
text areas.
2026-04-08 09:38:21 -07:00
talksik bcd0fa37ef fix: autoplay window not showing on all desktops
Closes #108
2026-04-08 09:10:05 -07:00
talksik ead17ba45f remove skip controls with stream playback
Closes #125
2026-04-08 09:04:31 -07:00
talksik 4fc5ecb6fb perf: improve react memo performance 2026-04-08 08:59:52 -07:00
talksik 8cbc04fff7 fix: list of streams glitching to top
This was due to real-time changes to items leading to scrolling to top.

Closes #123
2026-04-08 08:56:12 -07:00
talksik 7e11d66dc2 enhance keyboard experience
Now we have network root and stream-view defining their own hints
instead of trying to re-use one component. And we also introduce an
overlay for additional commands for people.
2026-04-08 08:40:07 -07:00
talksik f95ccf134d remove grid view for streams
- Reduces surface area
- Reduces options for people (less cognitive load)
- One way to use the product
- List view works better for keyboard shortcuts
- List view has basics such as recency
2026-04-08 08:21:54 -07:00
talksik d8b4c488b5 fix: grid view context menu not triggering
Right click on cards was not showing context menu.
2026-04-08 08:11:51 -07:00
talksik 97437c7089 feat: show transcript preview in streams list 2026-04-08 08:11:21 -07:00
talksik 4a1ded9655 chore: bump version 2026-04-07 16:49:09 -07:00
talksik 9312f095b2 feat: seek media particles and speed playback
Closes #79
Closes #80
2026-04-07 16:48:40 -07:00
talksik 695adddaff feat: hold to pause stream playback 2026-04-07 16:32:51 -07:00
talksik 45fa4cb0e5 fix: close stream view on huddle
Closes #107
2026-04-07 16:24:19 -07:00
talksik 9c36a8f94d fix: close autoplay window on entering stream
Closes #114
2026-04-07 16:24:02 -07:00
talksik cd0d817cf7 fix: prevent skipping particles in stream after creation
Closes #112
2026-04-07 16:18:50 -07:00
Arjun PatelandGitHub cc190ba85f feat: triage streams with open, close (#121)
* 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
2026-04-07 16:11:13 -07:00
talksik 4a9cb7fc58 fix: packaged app doesn't resolve multiple windows
The path that main.ts was reading was incorrect. This change fixes the
issue.
2026-04-01 11:51:59 -07:00
talksik c5525bb980 reduce footprint of closing indicator 2026-04-01 11:43:33 -07:00
talksik 1e3d946037 bump version 2026-04-01 11:30:01 -07:00
talksik e117f58dbe tidy bottom section of stream-view 2026-04-01 11:28:54 -07:00
talksik 7c77d02ab5 feat: show human playback markers on timeline
Resolves #105
2026-04-01 11:02:48 -07:00
Arjun PatelandGitHub 4d1ad717ad support huddles (#106)
* 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.
2026-04-01 10:32:15 -07:00
talksik 47e2a9baa4 fix: audio bars overlap with bottom controls 2026-03-31 15:08:31 -07:00
Arjun PatelandGitHub 3de3ca7cef setup electron multi-window architecture (#102)
* prototype with two windows

* use deps in separate window render process

* enhance autoplay into desktop overlay

* fix: autoplay window not applying tailwind styles
2026-03-31 15:05:59 -07:00
talksik 7f490b4596 add script for invalidating release.json 2026-03-30 14:13:12 -07:00
talksik c54a75c3c5 chore: bump version 2026-03-30 14:02:06 -07:00
talksik ffb4ae6c5a cleanup unused import 2026-03-30 14:01:49 -07:00
talksik 7a8b31dbcb cleanup unused import 2026-03-30 13:57:22 -07:00
talksik a5e1ea1acf feat: show unseen count in macos dock
Resolves #93
2026-03-30 13:53:50 -07:00
talksik 65ea901626 fix: use actual particle child particle creation time
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.
2026-03-30 13:52:40 -07:00
talksik d10de739b3 show indicator of stream expiring soon 2026-03-30 13:33:02 -07:00
talksik d56541bd13 feat: allow network admin to control ephemerality setting
Resolves #92
2026-03-30 13:27:27 -07:00
talksik 7f93aa9db3 reduce blur for thumbnails 2026-03-30 12:53:35 -07:00
talksik 086cf4f1ee keyboard-driven navigation
Resolves #66
2026-03-30 12:51:15 -07:00
talksik 14285575e4 default to 4 / 3 aspect ratio for videos
This also sets the default window size to adhere to the default aspect
ratio
2026-03-30 12:35:48 -07:00
talksik 9f6633bf1f feat: add grid view for streams 2026-03-30 12:08:16 -07:00
talksik 76c538dca2 enhance text compose experience 2026-03-30 11:34:53 -07:00
talksik c797d7253e improve attachments experience for media particles 2026-03-30 11:27:33 -07:00
Arjun PatelandGitHub d6280439d0 feat: support file and image attachments (#98)
* upload & view attachments to particles

* allow download of attachments
2026-03-30 10:31:24 -07:00
talksik 3564055c29 update response status 2026-03-29 12:23:03 -07:00
talksik 21062a7786 tail migration logs 2026-03-29 11:57:50 -07:00
talksik 43c0a217c6 deploy production environment 2026-03-29 11:44:07 -07:00
talksik 48c73893b3 remove unused env var 2026-03-29 11:02:51 -07:00
talksik 7042b2d575 cleanup workaround for neon db
We are now using the llink database within our gcp datbase instances, so
likely won't be needing this workaround
2026-03-29 10:18:34 -07:00
talksik 5eaa51ffcc migrate to llink database within gcp 2026-03-29 10:17:17 -07:00
talksik 3d71dbaed0 chore: send admin email on adding waitlist entry 2026-03-29 09:43:21 -07:00
talksik be966d78a8 tests: remove unnecessary service test 2026-03-29 09:09:01 -07:00
talksik acac407fd0 feat(orion): add rest api for waitlist 2026-03-29 09:04:15 -07:00
talksik c471c28bb0 chore: improve release script 2026-03-25 16:15:25 -07:00
talksik bf1a9257ff chore: bump version 2026-03-25 16:12:10 -07:00
talksik 8cb9eb55c7 chore: cleanup network selector ui 2026-03-25 16:08:55 -07:00
talksik f3ddceecfc fix: persist auto-play setting 2026-03-25 16:03:14 -07:00
talksik 60daec38ff fix: allow text selection and copy
This was conflicting with the left and right tap areas for navigating a
stream.
2026-03-25 15:56:48 -07:00
talksik 739bb0cf80 fix: fullscreen button not working 2026-03-25 15:54:42 -07:00
talksik d525d6a588 fix: window title inaccurate 2026-03-25 15:54:05 -07:00
talksik 0ab2ec2bb8 fix: stale time ago in streams list 2026-03-25 15:53:35 -07:00
talksik d817e637c0 fix: janky captions experience 2026-03-25 15:41:25 -07:00
talksik 3c1d9cd4a7 feat: improved layout and captions 2026-03-25 15:05:38 -07:00
talksik 986a389606 feat: generate transcript and event-driven particle processing
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.
2026-03-25 14:43:47 -07:00
talksik 92bbaa11b3 fix: neon db errors for prepared statements 2026-03-25 14:42:01 -07:00
talksik 0111ea28af refactor!: use consistent structure for particles
Making the firestore subcollections the same name helps with creating
indices and queries across subcollections of different depths. This also
prevents the need for conditional logic for network root / top-level
particles.
2026-03-25 13:14:08 -07:00
talksik d8a45b22d3 chore: setup boilerplate for particle processor worker
This sets up an example of listening to firestore data and reacting. It
also sets up our first worker in the kubernetes cluster.
2026-03-25 09:52:23 -07:00
talksik 86bdc78852 chore: bump version 2026-03-24 19:58:34 -07:00
Arjun PatelandGitHub 3d52fa6ccc feat: create network, and manage members, invitations (#74) 2026-03-24 19:50:06 -07:00
Arjun PatelandGitHub bf0147d542 refactor: reference human id instead of email (#73)
* 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
2026-03-24 19:48:02 -07:00
talksik 3bf3f16be7 fix: auto-select myself as new stream's member 2026-03-24 11:29:14 -07:00
talksik 83190727f8 fix: show last sender avatar in streams list 2026-03-24 11:10:56 -07:00
talksik 6f033e2a73 feat: jump to my newly created particle once created 2026-03-24 10:27:50 -07:00
talksik 1fb31a0d04 chore: show submitting loader during compose 2026-03-24 09:58:50 -07:00
talksik 33a1318958 fix: hide author in "seen by" list 2026-03-24 07:29:13 -07:00