Commit Graph
100 Commits
Author SHA1 Message Date
Arjun Patel 156ef5a204 chore: cleanup reexports 2026-04-20 18:40:07 -07:00
talksik 5e930d3c2e chore: bump version 2026-04-16 15:38:48 -07:00
98fdc98c76 feat: surface privacy policy and terms in sign-in and settings (#171)
Adds an implicit-consent disclaimer under the sign-in "Continue" button
and a new "Legal" section in the settings page. Both link out to the
policies hosted on flowylabs.ai via the existing openExternal bridge.

https://claude.ai/code/session_01U6gT7XFQ8Rtm3FStsHG63j

Co-authored-by: Claude <[email protected]>
2026-04-16 15:37:28 -07:00
Arjun PatelandGitHub ef899ee5cd security: access control for particles (#169)
* 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
2026-04-16 15:14:34 -07:00
talksik 28b1ff542b feat: add support email
This will help humans whether they have billing questions or otherwise.
2026-04-16 09:15:31 -07:00
talksik 61a6904cc2 add nav bar to sign in flow 2026-04-16 09:14:50 -07:00
567884433d fix: render correct meta key in keyboard hints on Windows/Linux (#168)
Hardcoded ⌘ glyphs in compose hints were misleading on non-mac
platforms. Add a tiny platform helper sourced from the existing
window.electronWindow.platform bridge and substitute "Ctrl" off mac.
Closes #167.

https://claude.ai/code/session_01YZY4wUqACT7mgibHr2Yncx

Co-authored-by: Claude <[email protected]>
2026-04-16 09:04:29 -07:00
talksik 7da3ec6ab6 build: set windows icons properly 2026-04-15 13:32:53 -07:00
talksik ae38234e17 chore: bump version 2026-04-15 13:24:32 -07:00
talksik b508499dbd ci: fix no metadata for azure 2026-04-15 12:41:36 -07:00
talksik 111acb445c ci: fix duplicate signtool flags 2026-04-15 12:25:13 -07:00
talksik 6755ab9a1b ci: use newer sign tool for windows
The electron forge one won't support azure trusted account signing
2026-04-15 12:12:13 -07:00
talksik 772d8cf3e1 ci: enable debug for windows sign 2026-04-15 11:46:57 -07:00
talksik a03200472f ci: log windows sign failure 2026-04-15 11:30:32 -07:00
talksik 46170eb5d3 fix: prevent writing to nonexistent firestore docs
Using the same livekit project means we may receive events for another
environment, though we should eventually separate the environments.
2026-04-15 11:02:56 -07:00
talksik 17f84d5425 ci: adjust scripts to use correct file 2026-04-15 10:11:47 -07:00
talksik dd8e7da911 ci: setup windows with signing and gcs publish 2026-04-15 10:04:29 -07:00
talksik 07f02ecfeb use universal window controls across platforms 2026-04-15 08:03:32 -07:00
talksik 637342cb92 prevent remote release 2026-04-14 20:39:51 -07:00
talksik cee7958e03 ci: add preliminary windows build setup 2026-04-14 20:03:16 -07:00
talksik c2d0ed254b fix: improve messaging for reset
Closes #163
2026-04-14 19:04:54 -07:00
talksik 226b284ad2 fix: plan summary not refreshing after purchase 2026-04-14 19:04:31 -07:00
talksik f987f04ff0 chore: bump version 2026-04-14 15:20:55 -07:00
Arjun PatelandGitHub 67826b92c0 implement paywall (#161)
* implement core foundation

* inject deps

* fix incorrect migration

* tail migration

* use transaction for migration

* fix: inject deps for tests

* cleanup billing management for admin

* upgrade stripe sdk to v85

* set price env variables

* cleanup billing management

* allow multiple dev windows

* fix: settings scroll

* feat: show nice video thumbnail in listview

* feat: implement freemium restrictions

* remove unnecessary comments

* refactor

* docs

* format

* tweak network settings better hierarchy
2026-04-14 15:18:32 -07:00
talksik aff18d82db format 2026-04-14 10:59:53 -07:00
talksik fe2a003e94 fix: huddles not launching reliably
Closes #160
Race condition preventing proper initialization.
2026-04-14 07:58:45 -07:00
talksik 91a973b7fb chore: bump version 2026-04-13 10:44:40 -07:00
talksik 4e76ce902f fix: show proper app version 2026-04-13 10:41:19 -07:00
talksik ae91145762 feat: support url scheme to launch app
Closes #159
2026-04-13 10:41:11 -07:00
talksik f676baf8b3 cleanup video audio settings view 2026-04-13 10:39:58 -07:00
talksik 38bd098ca6 feat: select input devices for recordings
Closes #68
2026-04-13 10:29:10 -07:00
talksik 106254ef83 setup electron app for production 2026-04-13 10:03:23 -07:00
talksik 1579de8c6d feat: shift + arrows to seek track 2026-04-13 09:31:25 -07:00
talksik 3659863647 fix(orion): missing env variable 2026-04-13 09:29:44 -07:00
talksik 1cdaac66db show esc keybinding hint for recording 2026-04-13 09:14:22 -07:00
talksik f2b439cc86 fix: prevent stream exit during overlays 2026-04-13 09:11:46 -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
talksik 81a82eee38 fix: text message not showing attachments upon sending
Closes #154
The sender of the message wouldn't see the children particle since we
only fetch the children once. And perhaps the firestore local cache
doesn't have the children particles or some other race condition. But
now, we fetch the live children.

This should anyways use the same number of reads as before since
attachments do not change.
2026-04-13 08:59:34 -07:00
talksik bca45c5e89 chore: bump version 2026-04-12 14:16:01 -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
talksik af0a319399 docs: adjust claude.md 2026-04-12 13:34:49 -07:00
talksik 5a6db9bd48 fix: harden production electron app behavior
- No developer tools or zoom
- No refresh window
- Open links externally
2026-04-12 13:30:18 -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 6b20fc2ee6 debug log 2026-04-12 13:16:46 -07:00
talksik be9cf6c5f0 fix: prevent stream click navigation during text edit 2026-04-12 12:15:59 -07:00
Arjun PatelandGitHub 7568ceb80d feat: extract text editor and allow editing (#150) 2026-04-12 12:13:25 -07:00
f03868e65b feat: paginate closed streams tab (#148)
Closed streams grow unbounded as teams age and can reach 1000s of items,
while open streams stay bounded by active work. Switch the streams list
to subscribe per-status so each tab only pulls what it renders, and cap
the closed tab to a 50-item window that grows via a Load more action.

The open tab remains unbounded so per-row realtime features — autoplay,
huddle indicators — keep full coverage of the streams that matter.
Closed streams are archived and don't need push behavior, which side-
steps the autoplay baseline-reset and huddle-on-page-2 risks that made
pagination complicated for the open tab.

Refs flowy-live/llink#138.

Co-authored-by: Claude <[email protected]>
2026-04-12 11:55:23 -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 e58edaddd3 feat: send email notifications for network invites
Closes #126
2026-04-12 10:45:24 -07:00
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