-
f538f1d92e
fix(desktop): enable PulseAudio loopback flag so screen share starts on Linux
Jannis Braun
2026-04-29 23:43:44 +02:00
-
e0861597bc
fix(web): portal overlays into fullscreenElement so they render in voice fullscreen
Jannis Braun
2026-04-29 23:32:14 +02:00
-
1ed70a90b1
fix(dm): render system messages in sidebar preview instead of raw JSON
Jannis Braun
2026-04-29 23:13:09 +02:00
-
9aa97f4552
fix(web): joinByCode normalizes explicit home origin to local
Jannis Braun
2026-04-29 22:52:47 +02:00
-
85987a891c
fix(web): SpaceInviteCard navigates to /channels/:spaceId (not the non-existent /spaces/:id)
Jannis Braun
2026-04-29 22:44:35 +02:00
-
d8b08d8990
fix(web): SpaceInviteCard navigates to space on already-member instead of showing error
Jannis Braun
2026-04-29 22:41:49 +02:00
-
bc66ddc633
fix(server): canonicalize spaceInstanceOrigin before storing payload
Jannis Braun
2026-04-29 22:35:34 +02:00
-
44e9a4234c
fix(server): local-fast-path for invite snapshot — skip HTTP self-reach
Jannis Braun
2026-04-29 22:29:44 +02:00
-
5481eb9e7e
fix(server): SSRF guard on cross-instance invite preview fetch
Jannis Braun
2026-04-29 22:19:10 +02:00
-
4476c55963
docs: invite friends overhaul — space_invite system message, relay type field, in-instance /join interception
Jannis Braun
2026-04-29 22:11:56 +02:00
-
65ca54f556
feat(web): useDeepLinkHandler also subscribes to onOpenInternalRoute
Jannis Braun
2026-04-29 22:09:20 +02:00
-
7d98558816
feat(web): push connected-instance origins to Electron main process
Jannis Braun
2026-04-29 22:08:30 +02:00
-
b00d21df0e
feat(desktop): preload exposes setConnectedOrigins + onOpenInternalRoute
Jannis Braun
2026-04-29 22:07:26 +02:00
-
eb57d2fd5c
feat(desktop): intercept own-instance /join URLs in setWindowOpenHandler
Jannis Braun
2026-04-29 22:05:50 +02:00
-
a46d35f5f8
feat(web): InviteModal — friend picker + restyled share-link footer, drop deep link
Jannis Braun
2026-04-29 22:02:23 +02:00
-
1859f2963c
feat(web): SystemMessage dispatches space_invite to SpaceInviteCard
Jannis Braun
2026-04-29 21:55:06 +02:00
-
e351d53dd5
fix(web): SpaceInviteCard — real embed idiom and correct getApiForOrigin import path
Jannis Braun
2026-04-29 21:52:20 +02:00
-
82533c1434
feat(web): SpaceInviteCard component with snapshot/live/revoked render states
Jannis Braun
2026-04-29 21:50:01 +02:00
-
657cc0e1b9
feat(web): add dm.spaceInvite() api client method
Jannis Braun
2026-04-29 21:44:40 +02:00
-
7303c23b20
test(server): integration tests for POST /api/dm/space-invite
Jannis Braun
2026-04-29 21:43:25 +02:00
-
5cb0aa9d66
feat(server): POST /api/dm/space-invite endpoint with rate-limited per-friend invite
Jannis Braun
2026-04-29 21:37:44 +02:00
-
855410f88c
feat(shared): add SpaceInviteRequest / SpaceInviteResponse / SpaceInviteSystemPayload
Jannis Braun
2026-04-29 21:34:07 +02:00
-
889dfe9b4a
feat(server): add fetchSpaceInviteSnapshot helper for cross-instance preview fetch
Jannis Braun
2026-04-29 21:33:19 +02:00
-
c4f84f8c68
test(federation): buildRelayPayload type-field forwarding
Jannis Braun
2026-04-29 21:31:56 +02:00
-
a995bd4148
feat(federation): processCreateEvent inserts system-typed messages from relay
Jannis Braun
2026-04-29 21:30:51 +02:00
-
6c68b4b574
feat(federation): buildRelayPayload forwards system-typed messages
Jannis Braun
2026-04-29 21:30:01 +02:00
-
04c66c4bcf
feat(federation): add optional type field to FederationRelayEvent.message
Jannis Braun
2026-04-29 21:29:01 +02:00
-
281e01713b
Merge feat/registration-invites: registration toggles + invite links
Jannis Braun
2026-04-29 03:07:44 +02:00
-
-
d31a9cf579
refactor(web): RegistrationPanel — glass-bubble modal buttons + clearer Revoke copy
Jannis Braun
2026-04-29 03:01:47 +02:00
-
f0ac847d9e
refactor(web): RegistrationPanel sibling parity — Edit/Reinstate redesign + Redemptions header
Jannis Braun
2026-04-29 02:51:44 +02:00
-
a52bab4c16
refactor(web): CreateInviteModal — icon-badge header + uppercase section labels + dominant submit
Jannis Braun
2026-04-29 02:47:44 +02:00
-
526043a3b4
feat(web): RegistrationPanel sort + status filter via FilterDropdown
Jannis Braun
2026-04-29 02:44:32 +02:00
-
b91bc89c58
refactor(web): RegistrationPanel InviteRow → collapsed/expanded model
Jannis Braun
2026-04-29 02:40:33 +02:00
-
3fdf501620
refactor(web): RegistrationPanel tab strip restyle + count badges
Jannis Braun
2026-04-29 02:36:52 +02:00
-
33547038f4
feat(invites): expose lastRedeemedAt on InviteLinkSummary
Jannis Braun
2026-04-29 02:33:49 +02:00
-
5abe13166a
docs(systems): document invite-links + split registration gate
Jannis Braun
2026-04-29 01:57:58 +02:00
-
a7c321a9d4
feat(web): show federated-registration warning banner in Connections add-instance form
Jannis Braun
2026-04-29 01:49:32 +02:00
-
641d4efcb9
fix(web): RegisterPage invite-fallback validation, IIFE preference, open-registration silence
Jannis Braun
2026-04-29 01:46:48 +02:00
-
0dae217787
feat(web): RegisterPage invite-token URL pickup + manual entry + closed-state UX
Jannis Braun
2026-04-29 01:38:52 +02:00
-
5b51980278
fix(web): make ConfirmDialog Escape capture-phase to prevent leaking to ancestor modals
Jannis Braun
2026-04-29 01:26:38 +02:00
-
bde4d829ef
feat(web): RegistrationPanel Edit/Revoke/Reinstate/Delete + Redemptions
Jannis Braun
2026-04-29 01:21:14 +02:00
-
ba5c84fc6b
fix(web): add Custom… expiry preset to CreateInviteModal per spec §4.2
Jannis Braun
2026-04-29 01:13:22 +02:00
-
234ec8e70d
feat(web): RegistrationPanel Create-invite modal
Jannis Braun
2026-04-29 01:06:48 +02:00
-
42d1be54fa
fix(web): guard RegistrationPanel invite-list against stale-fetch race
Jannis Braun
2026-04-29 00:57:57 +02:00
-
dcd3daf390
feat(web): RegistrationPanel invite-list with Active/Archived tabs
Jannis Braun
2026-04-29 00:53:39 +02:00
-
7dd6bd6263
refactor(web): move registrationOpen toggle out of GeneralPanel
Jannis Braun
2026-04-29 00:44:35 +02:00
-
cad6c50bff
feat(web): RegistrationPanel scaffold with both registration toggles
Jannis Braun
2026-04-29 00:40:04 +02:00
-
7edfd8ae26
refactor(web): rename invites.patch → invites.update for codebase consistency
Jannis Braun
2026-04-28 21:11:43 +02:00
-
50756b3e65
feat(web): add invites + checkInvite to api client
Jannis Braun
2026-04-28 21:08:12 +02:00
-
dbcc399ebb
test(settings): tighten 'preserves field when omitted' to actually prove preservation
Jannis Braun
2026-04-28 21:06:05 +02:00
-
8d7ba33c21
feat(settings): expose federatedRegistrationOpen in /settings/instance + /instance/info
Jannis Braun
2026-04-28 21:01:50 +02:00
-
87301bd4d2
test(auth): polish register handler — comment, test isolation, +1 coverage
Jannis Braun
2026-04-28 20:58:16 +02:00
-
0559ea369b
feat(auth): split registration gate by homeInstance + atomic invite redemption
Jannis Braun
2026-04-28 20:51:49 +02:00
-
1b76b8bf2a
test(invites): tighten check-invite assertions to byte-identical responses
Jannis Braun
2026-04-28 20:46:24 +02:00
-
effb36c7f4
feat(auth): GET /api/auth/check-invite with collapsed enumeration shield
Jannis Braun
2026-04-28 20:42:46 +02:00
-
ade5c0d998
test(invites): tighten requireAdmin mock to match real Fastify contract
Jannis Braun
2026-04-28 20:40:24 +02:00
-
0c9865ad90
feat(invites): /api/admin/invites CRUD endpoints
Jannis Braun
2026-04-28 20:36:09 +02:00
-
b775e3bcc9
refactor(invites): typed InviteUnavailableReason + real rollback test
Jannis Braun
2026-04-28 20:32:42 +02:00
-
95737ba405
feat(invites): redeemInvite (atomic txn) + deleteInvite
Jannis Braun
2026-04-28 20:26:57 +02:00
-
b7557aa6fa
test(invites): document empty-updates guard + Path A rollback test
Jannis Braun
2026-04-28 20:24:15 +02:00
-
ee405cba7c
feat(invites): reinstateInvite with revoked-vs-archived branching
Jannis Braun
2026-04-28 20:20:13 +02:00
-
45b2eabed3
refactor(invites): thread tx through resolveCreatorUsername + tighten test assertions
Jannis Braun
2026-04-28 20:17:41 +02:00
-
23338419df
feat(invites): patchInvite + revokeInvite with txn re-derive + foldUsername helper
Jannis Braun
2026-04-28 20:11:47 +02:00
-
ce5d4c10c8
feat(invites): listInvites + listRedemptions with creator/current JOINs
Jannis Braun
2026-04-28 20:04:18 +02:00
-
daf2e958f7
feat(invites): createInvite + getInviteByToken with validation
Jannis Braun
2026-04-28 19:58:03 +02:00
-
967c62d488
feat(invites): inviteStatus derivation + token generator
Jannis Braun
2026-04-28 19:52:16 +02:00
-
e984ce910c
refactor(shared): rename PatchInviteRequest → UpdateInviteRequest + JSDoc
Jannis Braun
2026-04-28 19:50:05 +02:00
-
884b3d9fe9
feat(shared): add invite link types + federatedRegistrationOpen
Jannis Braun
2026-04-28 19:45:25 +02:00
-
22788890f3
feat(db): add invite_links + invite_redemptions tables + federatedRegistrationOpen
Jannis Braun
2026-04-28 18:52:15 +02:00
-
-
76b6621d62
feat(storage): remove upload-size cap, add MB/GB unit toggle
Jannis Braun
2026-04-28 18:37:16 +02:00
-
213fbc943b
docs(sounds): correct self-stream-end suppression note (synchronous, not deferred)
Jannis Braun
2026-04-28 15:03:22 +02:00
-
89b6c80031
docs: cross-reference sounds.md from voice.md + CLAUDE.md subsystem table
Jannis Braun
2026-04-28 14:55:39 +02:00
-
37de0feb31
docs(systems): add sounds.md — inventory + trigger map + mechanism notes
Jannis Braun
2026-04-28 14:54:11 +02:00
-
82ae487765
feat(sounds): add 'Play sound for every message' toggle to Voice settings
Jannis Braun
2026-04-28 14:50:41 +02:00
-
081937a030
fix(sounds): drop singleton AudioManager from SoundController effect deps
Jannis Braun
2026-04-28 14:49:03 +02:00
-
494585adf2
fix(sounds): full SoundController rewrite — every file fires for the right audience
Jannis Braun
2026-04-28 14:43:05 +02:00
-
7c0b67bcc9
feat(sounds): broadcast stream_watch from StreamTile click sites
Jannis Braun
2026-04-28 14:38:39 +02:00
-
62aa87c737
feat(sounds): receive stream_watch pings + evict watchers on participant disconnect
Jannis Braun
2026-04-28 14:35:14 +02:00
-
005559d95e
feat(sounds): add streamWatchers map + recordStreamWatch/clearStreamWatchers/evictWatcher
Jannis Braun
2026-04-28 14:30:45 +02:00
-
a3bd0313a8
feat(sounds): add messageSoundAllChannels preference to voiceStore
Jannis Braun
2026-04-28 14:26:41 +02:00
-
00daa14dcd
test(sounds): use realm-safe Uint8Array check (TextEncoder vs jsdom)
Jannis Braun
2026-04-28 14:25:25 +02:00
-
dacb6df871
test(sounds): tighten encodeStreamWatch round-trip assertion to verify Uint8Array contract
Jannis Braun
2026-04-28 14:23:54 +02:00
-
6a4eac13a3
feat(sounds): add stream_watch data-channel protocol helpers
Jannis Braun
2026-04-28 14:19:41 +02:00
-
40dd2ab52f
feat(sounds): add shouldPlayMessageSound filter (DM + federation-aware mention)
Jannis Braun
2026-04-28 14:13:56 +02:00
-
eede7aeb38
chore(branding): clean up product description strings
Jannis Braun
2026-04-28 11:39:08 +02:00
-
cf72f9d87d
docs(voice): note dormant-by-default preview in two-mode preview section
Jannis Braun
2026-04-27 21:15:06 +02:00
-
4748df8b24
fix(camera): dormant-by-default preview, never trigger camera on tab open
Jannis Braun
2026-04-27 21:13:58 +02:00
-
02e881fd00
docs(voice): document camera device selection subsystem
Jannis Braun
2026-04-27 20:57:13 +02:00
-
2bec5b9d7f
feat(settings): rename Voice tab to 'Voice & Video' to reflect added video section
Jannis Braun
2026-04-27 20:55:42 +02:00
-
93e1478346
feat(voice-panel): mount Video section between Volume and Voice Processing
Jannis Braun
2026-04-27 20:47:19 +02:00
-
47653ab14a
feat(video-section): tab-visibility cleanup and currently-using subline
Jannis Braun
2026-04-27 20:46:04 +02:00
-
37caf30b84
feat(video-section): in-call preview attaches to LK track
Jannis Braun
2026-04-27 20:43:40 +02:00
-
4c6bc9e822
feat(video-section): pre-call preview tile auto-starts getUserMedia
Jannis Braun
2026-04-27 20:41:03 +02:00
-
9b402ed291
feat(video-section): enumerate cameras and render dropdown
Jannis Braun
2026-04-27 20:37:33 +02:00
-
5494460834
feat(video-section): scaffold component with permission-probe state machine
Jannis Braun
2026-04-27 20:33:14 +02:00
-
c9b08cdfd2
feat(devices): sweep stale persisted device ids on mount and devicechange
Jannis Braun
2026-04-27 20:30:54 +02:00
-
786823946a
feat(camera): handle camera-track end with branched toast (unplug vs permission revoke)
Jannis Braun
2026-04-27 20:25:26 +02:00
-
e8534339fb
feat(camera): syncCamera effect hot-swaps publication on cameraDeviceId change
Jannis Braun
2026-04-27 20:19:43 +02:00
-
2e41edbc99
feat(camera): use cameraDeviceId from voiceStore on camera enable
Jannis Braun
2026-04-27 20:17:12 +02:00
-
51ad54fda5
refactor(camera): unify toggle paths through handleCameraAction
Jannis Braun
2026-04-27 20:13:43 +02:00