405 Commits

Author SHA1 Message Date
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
talksik 3051b1558f feat: captions on mobile
Closes #199
2026-04-30 17:14:15 -07:00
talksik a6a4757a8e fix: stream actions not working
Multiple sheets compete with each other and cause silent failure on ios.
2026-04-30 16:53:48 -07:00
talksik 6832c273cd fix: prevent restart playback after transcoding completion
Closes #201
2026-04-30 16:39:23 -07:00
talksik 39ac3ed290 create backfill for transcoding media particles
Closes #192
2026-04-30 08:20:24 -07:00
talksik 89906dba7c refactor: abstraction for transcoding 2026-04-30 07:30:55 -07:00
talksik 91a2030f9b fix: worker utilizing incorrect bucket 2026-04-30 07:04:50 -07:00
talksik ef7d5bfa59 fix desktop playback aspect ratio for mobile 2026-04-29 18:17:45 -07:00
Arjun Patel e3461dd5cd mobile v0.1 with deployment for ios (#191)
* 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
2026-04-29 17:39:11 -07:00
Arjun Patel 3a11a82cd3 refactor: organize desktop vs. mobile into separate folders 2026-04-29 08:42:56 -07:00
Arjun Patel 3d9fe67936 chore: bump version 2026-04-29 07:55:38 -07:00
Arjun Patel aacea01c1f feat: text reactions
Closes #180
2026-04-29 07:44:26 -07:00
Arjun Patel eb1e77b4c1 fix: allow next / prev particle during pause 2026-04-29 07:16:39 -07:00
Arjun Patel 1f2ab9b752 show keyboard hints for space pause 2026-04-29 07:16:16 -07:00
Arjun Patel a216b0722f fix: go to new local particle after creation
If human is on the last particle of the stream and creates a new one, this would navigate them there, as it makes sense to consider them caught up.
2026-04-29 06:49:13 -07:00
Arjun Patel f642d13ba1 feat: allow toggle stream-view play/pause 2026-04-29 06:16:24 -07:00
Arjun Patel 70087cf4e5 refactor: precondition for record toggle 2026-04-29 06:11:57 -07:00
Arjun Patel 0f73d685c2 refactor: narrow auth service to smaller units
Easier for testing, and omits need for full dep injection for pusher service, where we passed in nil for deps dangerously.
2026-04-27 16:14:37 -07:00