Commit Graph

  • 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