Commit Graph
49 Commits
Author SHA1 Message Date
talksik 07f02ecfeb use universal window controls across platforms 2026-04-15 08:03:32 -07:00
talksik 1579de8c6d feat: shift + arrows to seek track 2026-04-13 09:31:25 -07:00
talksik 67091e9d13 fix: prevent exit countdown on playback blocked 2026-04-13 09:06:22 -07:00
talksik bf6fdd15b5 refactor: rename playback suspender 2026-04-13 09:03:24 -07:00
Arjun PatelandGitHub 5b6924f7ca feat: support image lightbox viewer and file download (#151)
* feat: add lightbox overlay with nice mechanics

* ui tweak for top bar in stream view

* support locally downloading attachments
2026-04-12 14:14:23 -07:00
talksik dbe61e447a fix: persist selected streams tab
This used to navigate me back to the open streams tab even if I click a
stream in the closed list
2026-04-12 13:44:35 -07:00
e1d2bf11da feat: soft-delete particles within a stream (#149)
Lets a particle's creator delete their own message from the TopBar
dropdown. Other viewers see a "This particle was deleted" tombstone in
place and playback auto-advances after ~2s, keeping indices stable for
concurrent watchers.

- Add optional deleted_at / deleted_by_human_id to non-container
  particle variants and isParticleDeleted helper.
- Add softDeleteParticle Firestore helper.
- New DeleteParticleOverlay confirmation and DeletedParticleView
  tombstone.
- Hide reactions (bar + 1-7 keybinding) on tombstoned particles.
- Show "Deleted particle" + Trash2 icon in the stream list preview.

Closes #146

https://claude.ai/code/session_01M2ShnZPvWfQzzvuu3Xm8b9

Co-authored-by: Claude <[email protected]>
2026-04-12 13:18:10 -07:00
talksik bea723a90a refactor: extract topbar component into separate file 2026-04-12 11:25:35 -07:00
talksik f64380c421 feat: manage stream name and members
Closes #99
Closes #28
2026-04-12 11:20:05 -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
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 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 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 5f80bd15d5 feat: allow reactions to particles in stream
Closes #111
2026-04-08 10:14:47 -07:00
talksik ead17ba45f remove skip controls with stream playback
Closes #125
2026-04-08 09:04:31 -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 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 c5525bb980 reduce footprint of closing indicator 2026-04-01 11:43:33 -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 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 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 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 3c1d9cd4a7 feat: improved layout and captions 2026-03-25 15:05:38 -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 6f033e2a73 feat: jump to my newly created particle once created 2026-03-24 10:27:50 -07:00
talksik 33a1318958 fix: hide author in "seen by" list 2026-03-24 07:29:13 -07:00
talksik 59ffa7ad6e feat: preload adjacent media in streams 2026-03-21 18:24:03 -07:00
talksik e96f5cbe8a fix: playback restarting from start of stream
This does a major refactor to using particleId for state of playback
instead of index, since index would change if the particle children data
does partial hydrations and a particle's index changes. Also it
abstracts much of the playback details from the view component.
2026-03-21 15:11:26 -07:00
talksik a87b1d86a1 chore: always show top bar for necessary metadata 2026-03-21 13:40:48 -07:00
talksik 6bf2f2217a fix: top bar preventing click events on page indicator 2026-03-21 12:08:45 -07:00
talksik 83c7b2ad53 refactor: structure container concerns better
The consumer of topbar should determine positioning
2026-03-21 11:49:18 -07:00
talksik 44f4dc772a fix: don't show seen by authed user 2026-03-21 11:46:26 -07:00
talksik cba24c5d95 enhance stream view 2026-03-21 11:39:43 -07:00
talksik 2262bf4f3b refactor: organize components flatter 2026-03-21 11:20:49 -07:00
talksik e1375eddfa remove top bar from stream-view 2026-03-21 11:18:13 -07:00
Arjun PatelandGitHub 4b66d8e185 feat: initial conversational flow (#37)
* 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
2026-03-19 16:29:40 -07:00
Arjun PatelandGitHub 51857bed63 chore: integrate firestore for particles (#32)
* 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
2026-03-17 19:52:31 -07:00