Commit Graph

372 Commits

Author SHA1 Message Date
Arjun Patel 92894c4af8 paginate open streams (#252)
* paginate for open and closed streams

* fix: add platform abstraction for deeplink (#251)

* fix: add platform abstraction for deeplink

This was crashing App.tsx due to the deep link listener calling methods on window which do not exist.

* fix: apply CodeRabbit auto-fixes

Fixed 1 file(s) based on 1 unresolved review comment.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>

* log error

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>

* cleanup

* fix: import

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
2026-06-09 10:43:27 -07:00
Arjun Patel f38835ceee fix: add platform abstraction for deeplink (#251)
* fix: add platform abstraction for deeplink

This was crashing App.tsx due to the deep link listener calling methods on window which do not exist.

* fix: apply CodeRabbit auto-fixes

Fixed 1 file(s) based on 1 unresolved review comment.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>

* log error

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
2026-06-09 10:01:22 -07:00
Arjun Patel a94a986fbf fix: invalid dock badge count (#250) 2026-06-09 09:28:55 -07:00
Arjun Patel 1aceab582c docs typo (#248) 2026-06-09 09:12:03 -07:00
Arjun Patel c1f5b6c8c1 Implement membership notifications and deep-link handling for Electron desktop app (#246)
* security: add cors for desktop app scheme

* Revert "security: add cors for desktop app scheme"

This reverts commit d450fced75.

* ignore tags

* add commands for windows dev

* cleanup unnecessary parts of main desktop process

* resolve lint errors

* add format command for go

* fix: send email on new member joining

Closes #228

* add proper deeplinking on desktop

The desktop app was merely focusing before, but now it will navigate to the proper route

* honor email notifications setting

* prevent sending email when no recipients
2026-06-09 08:04:18 -07:00
Arjun Patel 9184d002d3 update copy for sign in views (#238)
* update copy for sign in views

This disambiguates whether the view is for sign up or sign in.

* format

* escape character

* format

* update workflow names
2026-06-02 09:39:11 -07:00
Arjun Patel 0439c51c2e docs (#237) 2026-06-02 08:56:29 -07:00
Arjun Patel 628c191137 ci: add pr quality gate for golang (#236)
* ci: add pr quality gate for golang

* test formatting error

* fix job

* format
2026-06-02 08:46:01 -07:00
Arjun Patel 79cc14490a chore: bump mobile version to v0.6.1 (#235) 2026-06-02 08:40:36 -07:00
Arjun Patel 99622743c9 chore: bump desktop version to v1.5.1 (#234)
* create runbook for deployments

* create runbook for deployments
2026-06-02 08:40:10 -07:00
Arjun Patel fa3c8268b2 infra: add pr quality gate for client applications (#233)
* add gh action for quality gate

* test quality gate

* fix job

* rename gh action jobs

* format
2026-06-02 08:04:58 -07:00
Arjun Patel a8a0b7db1b infra: add linting and formatting for js projects (#230)
* wip

* wip

* wip

* format

* wip(mobile): lint and format

* cleanup

* nits

* nits

* idiomatic react

* nit

* format all root files
2026-06-02 07:44:24 -07:00
Arjun Patel 2fe562ce2b fix: editing text particle not updating immediately
Closes #229
2026-06-01 10:03:34 -07:00
Arjun Patel fb771a7408 update email notification cta 2026-05-31 12:39:38 -07:00
Arjun Patel 189d5e296b ci: remove artifact uploads during windows build
Resolves issues with artifact storage being full
2026-05-30 12:04:02 -07:00
Arjun Patel 613a350292 chore: bump versions 2026-05-30 11:12:08 -07:00
Arjun Patel 2eba834838 feat: use inline markdown editor (#227)
* Use inline WYSIWYG markdown editor for long text messages

Desktop: replace the Write/Preview tab toggle in the compose card with
MDXEditor, an inline WYSIWYG that renders markdown as you type (Obsidian/
Notion feel) and round-trips plain markdown, matching how particle content
is stored. Immersive mode is unchanged — short, plain notes still get the
centered large-type textarea, and ⌘+M still drops into the rich editor.
Shortcut handling moves to the capture phase so ⌘+Enter / Esc win over the
editor's own key handling.

Mobile: render markdown on the display side via react-native-marked's
useMarkdown hook (no FlatList, so it nests cleanly in the existing
ScrollView). Mirrors desktop's immersive-vs-card logic: short plain notes
stay centered; anything with markdown renders formatted instead of showing
raw syntax. Composer stays plain text.

https://claude.ai/code/session_019DU6V5z6Nr4Vu7b1fBDnq4

* cleanup desktop app description

* Fix markdown editor rendering and pasted-link duplication

- Restore heading/list typography in the editor: MDXEditor relies on the
  browser's default styles for <h1>/<ul> sizing, which Tailwind's Preflight
  resets. Markdown shortcuts fired but the block looked unchanged. Style the
  editor content explicitly, mirroring the rendered display.
- Keep pasted/typed URLs as plain text (linkPlugin disableAutoLink) so they
  don't become `[url](url)`, which duplicated both the URL and its preview
  card. Also dedupe extractUrls defensively so a repeated URL yields one card.

https://claude.ai/code/session_019DU6V5z6Nr4Vu7b1fBDnq4

* Complete GFM support: tables, task lists, strikethrough

Editor: add tablePlugin so markdown tables round-trip and render. Task
lists (`- [ ]`), strikethrough, code (inline + fenced), headings, lists,
quotes, and links already work via listsPlugin/core/markdownShortcut. CSS:
suppress the disc bullet on task-list items (they draw their own checkbox)
and style tables.

Display: render task-list checkboxes (no stray bullet), GFM tables, and
strikethrough so the read view matches what the editor produces.

https://claude.ai/code/session_019DU6V5z6Nr4Vu7b1fBDnq4

* Unify markdown on one engine (Milkdown Crepe)

Replace the two-engine setup (MDXEditor for editing + react-markdown for
display) with a single Crepe-based component used for both. Editing is inline
WYSIWYG with full GFM that actually works — task lists, tables, and code
blocks via type-to-create / the slash menu — and read-only mode renders the
exact same way, so write and read can no longer drift (the root cause of the
heading/list/table/checkbox bugs).

- markdown-editor.tsx: Crepe wrapper supporting edit + readOnly, themed to the
  glass card via --crepe-* variable overrides (scoped to .milkdown so they win
  over frame-dark's own definitions).
- text-particle-view.tsx: render the message card with the read-only editor;
  drop the react-markdown component map.
- Remove now-unused deps: @mdxeditor/editor, react-markdown, remark-gfm,
  rehype-highlight, highlight.js.

The compose immersive mode (short, centered plain text) is unchanged.

https://claude.ai/code/session_019DU6V5z6Nr4Vu7b1fBDnq4

* Fix Crepe slash-menu transparency and match the app font

The floating menus (slash menu, toolbar, link tooltip) portal to <body>,
outside .milkdown, so the --crepe-* overrides never reached them and their
background fell back to transparent — unreadable over the content. Declare the
palette on those selectors too, keep --crepe-color-surface (near-)opaque so the
menus read clearly, and add a backdrop blur.

Also set --crepe-font-default/title to inherit (and a monospace stack for code)
so the editor uses the application font instead of Crepe's bundled Noto faces.

https://claude.ai/code/session_019DU6V5z6Nr4Vu7b1fBDnq4

* Give the slash menu the full card by padding the editor, not the card

Crepe appends the slash menu to .milkdown and (in this version) doesn't expose
a way to portal it to <body>, so it's clipped by the editor's scroll box. That
box sat inside the card's p-5 padding, so the menu cut off at the padding edge.
Move the padding onto the ProseMirror content instead and drop the redundant
inner scroll container, so the menu's clipping bounds become the full card.

https://claude.ai/code/session_019DU6V5z6Nr4Vu7b1fBDnq4

* tweaks

* mobile: render markdown text consistent with desktop

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-30 11:10:49 -07:00
Arjun Patel 7b000429e9 mobile: follow a just-sent particle when at the end of a stream (#226)
When the local user sends a particle while positioned on the last one in a
stream, advance playback to the newly created particle so they stay caught up
and the stream isn't left in an unseen state. If they're browsing earlier
particles, their position is left untouched.

The mobile reducer only auto-advanced on PARTICLE_ADDED when status was
already "ended", so sending while sitting on (but not finished with) the last
particle left it unseen. This threads an onParticleCreated callback from
ComposeDock's default send paths up to StreamView, which follows the particle
via goToParticle only when currentIndex is the last slot — mirroring desktop's
StreamView.handleParticleCreated.

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-30 11:09:44 -07:00
Arjun Patel 0cd126818a adjust email invitation copy 2026-05-29 11:21:34 -07:00
Arjun Patel 832ebe9376 chore: bump version 2026-05-28 13:08:04 -07:00
Arjun Patel 9645391f6a chore: bump version 2026-05-28 12:46:03 -07:00
Arjun Patel 0ae3ab5505 cleanup desktop and mobile assets and icons (#223)
This fixes quirks for different platforms
2026-05-28 12:45:25 -07:00
Arjun Patel 3bfc15945d infra: add cross-platform tooling with Taskfile 2026-05-28 11:21:57 -07:00
talksik 91abacc2de chore: bump version 2026-05-28 10:30:44 -07:00
Arjun Patel e5d1349ad7 feat: paginate stream page indicator
Closes #221
2026-05-28 10:12:41 -07:00
Arjun Patel 563c91e7d5 infra: add logging wrapping
Resolves issues with gcp cloud logging quirks such as field names
2026-05-27 15:49:27 -07:00
Arjun Patel e804cee229 refactor: use slog instead of logrus 2026-05-27 15:20:53 -07:00
Arjun Patel 72bc41733f chore: bump version 2026-05-26 17:22:38 -07:00
Arjun Patel 96f5a727d6 feat(mobile): add support for huddles to mobile app (#219)
* feat(mobile): add huddles with LiveKit

Mirrors the desktop huddle window: tap the headphones button on a stream
to fetch a LiveKit token from Orion and join a video room. Active huddles
show a red badge on the stream card (participant count) and a red Join
pill in the stream top bar — both driven by huddle_active_participants
synced from the LiveKit webhook.

The HuddleScreen lives at its own route (not a modal/window): video tile
grid with placeholders for camera-off, mic/camera toggles, and a leave
button. Adds the LiveKit RN SDK plus the WebRTC + LiveKit Expo config
plugins for prebuild.

https://claude.ai/code/session_01Po5tAD17MXhnqGQ9hKh6PC

* fix(mobile): exiting from huddle

* fix: pause stream during huddle

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-26 16:37:37 -07:00
Arjun Patel 746e52158d ci: fix build dep 2026-05-26 15:41:54 -07:00
Arjun Patel 64f02d1c3b feat: ship a web app (#218)
* 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
2026-05-26 15:37:35 -07:00
Arjun Patel 173c63508a fix(mobile): unregister push token on invalid session 2026-05-26 10:43:15 -07:00
Arjun Patel 54bc77444b chore: bump version 2026-05-26 10:27:09 -07:00
Arjun Patel 636ef484ad feat(mobile): allow rear camera recordings
Closes #211
2026-05-26 10:24:54 -07:00
Arjun Patel 0eddf4639a fix(mobile): properly pause and resume other audio during recording 2026-05-26 10:21:42 -07:00
Arjun Patel e7fed5f037 feat(mobile): edit text messages 2026-05-26 10:10:49 -07:00
Arjun Patel ec01ca77e4 fix(mobile): sign in race condition
Closes #217
2026-05-26 10:00:52 -07:00
Arjun Patel d262f734f0 Mobile notifications for iOS (#210)
* 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
2026-05-18 12:44:31 -07:00
talksik a564ea819b bump version 2026-05-17 16:52:23 -07:00
talksik 9fd28e26a0 bump version 2026-05-17 16:52:09 -07:00
talksik 2492188c50 fix: prevent nesting of formatted text reactions
Usage of map was causing issues if the text reaction had special
characters.

Closes #205
2026-05-17 16:51:37 -07:00
talksik 4b468ed1ae chore: bump version 2026-05-01 09:24:07 -07:00
talksik ff2ed72e22 perf: reduce mobile video size
Improves upload and playback speed
2026-05-01 09:23:52 -07:00
talksik 127c57fa7c chore: bump version 2026-04-30 18:21:14 -07:00
talksik 1a08bfac8c chore: bump version 2026-04-30 17:57:14 -07:00
talksik 5b8aefd994 mobile: improve usability for exiting stream 2026-04-30 17:52:37 -07:00
talksik 43ad4d3b62 mobile: show transcript preview for media particles in stream list 2026-04-30 17:49:13 -07:00
talksik 13d3df2b51 mobile: consistent dark theme as desktop 2026-04-30 17:46:09 -07:00
talksik 424f27737b feat: improve usability with clickable keyboard hints
This allows people to use the app even if they aren't used to their
keyboard.
Closes #186
2026-04-30 17:45:03 -07:00
talksik aaf9ad4518 show progress during upload
More explicit feedback of the state of their upload. Also prevents
recording more media at the same time or interacting with the stream
which would feel stale to the human since they just created something
and it's yet to be present in the stream.
2026-04-30 17:23:17 -07:00