This website requires JavaScript.
5b8af14e12
feat(web): AudioOutputSection — output picker, volume, test tone, lifecycle-aware sinkId check
Jannis Braun
2026-05-03 01:47:49 +02:00
8e67f1d553
fix(web): mic meter reacts to AudioContext lifecycle; extract picker primitives
Jannis Braun
2026-05-03 01:43:01 +02:00
3aea8210bd
feat(web): AudioInputSection — full input picker with level meter and resolved-default hint
Jannis Braun
2026-05-03 01:37:37 +02:00
8907bb305d
fix(web): mic-loss recovery uses 'could not be restored' for unclassified errors
Jannis Braun
2026-05-03 01:35:07 +02:00
63bf9e684c
fix(web): mic-loss detection observes upstream stream, not published clone
Jannis Braun
2026-05-03 01:20:13 +02:00
9a26513009
feat(web): mic-track-loss recovery — probe, attempt re-acquire, toast
Jannis Braun
2026-05-03 01:09:04 +02:00
674d011d3c
fix(web): debounce devicechange handler and gate listener on baseline seeding
Jannis Braun
2026-05-03 01:05:37 +02:00
d992b2bb41
feat(web): seamless audio hot-plug — re-acquire live stream + toast new devices
Jannis Braun
2026-05-03 01:01:03 +02:00
2726cc5c5a
feat(web): expose AudioManager helpers for device introspection + test tone
Jannis Braun
2026-05-03 00:57:26 +02:00
a1ebb23264
feat(web): add useAudioDevices hook for permission-aware audio enumeration
Jannis Braun
2026-05-03 00:51:20 +02:00
c0e71b1ded
fix(federation): hydrate downloads replicated avatars locally + backfill stale URL rows
Jannis Braun
2026-05-02 22:45:27 +02:00
c0fd7e3a75
feat(web): home tile uses primary purple when active/hovered, grey when idle
Jannis Braun
2026-05-02 22:12:18 +02:00
12a71a12d4
fix(web): close writable on download pause/abort so partial bytes flush (resume continues from offset)
Jannis Braun
2026-05-02 21:13:09 +02:00
f33ebe2aa7
chore(web): drop unused React import; static-import idbHandles consistently
Jannis Braun
2026-05-02 20:54:50 +02:00
bc32eccc2d
fix(server): CORS allows tus headers (federated uploads no longer blocked at preflight)
Jannis Braun
2026-05-02 20:42:02 +02:00
3a050f475b
fix(web): tus uploads use per-origin token (federation auth)
Jannis Braun
2026-05-02 20:37:17 +02:00
33cfc66ac4
fix(web): boot rehydrate normalizes transfers; paused has its own visual
Jannis Braun
2026-05-02 19:10:29 +02:00
61be9d013f
fix(web): hide Retry when blob unavailable; failed-state surfaces actionable error
Jannis Braun
2026-05-02 18:58:05 +02:00
2f0940c30b
feat(admin): manual cleanup of stale tus upload sessions + visibility
Jannis Braun
2026-05-02 18:44:19 +02:00
4e5a440176
fix(web): server-side DELETE for failed/discarded uploads (no janitor wait)
Jannis Braun
2026-05-02 18:22:45 +02:00
dd91f5f349
fix(web): retry-after-abort starts fresh tus session; preserve File past abort
Jannis Braun
2026-05-02 18:18:07 +02:00
61dea725a3
fix(web): polish failed-upload row — pill-shaped, content-width, proper button affordance
Jannis Braun
2026-05-02 18:11:31 +02:00
a58b7459fb
fix(web): in-session pause/resume preserves File ref; aborted transfers flip bubble to failed
Jannis Braun
2026-05-02 18:03:12 +02:00
403c6e9075
fix(web): orchestrator dispatches eager-upload bubbles via pendingMessageStore subscribe
Jannis Braun
2026-05-02 17:52:05 +02:00
b8da1c1778
docs(design): tray as .glass popover; radial-progress ring primitive
Jannis Braun
2026-05-02 17:16:26 +02:00
38a3d4fba8
docs(api,federation): tus upload endpoints; federation worker boundary note
Jannis Braun
2026-05-02 17:16:00 +02:00
fb7add4f83
docs(uploads): tus protocol, three-store architecture, download pipeline, capability matrix
Jannis Braun
2026-05-02 17:15:38 +02:00
348800bfca
feat(web): channel-header transfer indicator + global tray panel
Jannis Braun
2026-05-02 17:11:41 +02:00
0be69808e4
feat(web): right-click Save Video / Save Audio via transferStore
Jannis Braun
2026-05-02 17:07:39 +02:00
aaa15cef88
feat(web): file-card download routes through transferStore
Jannis Braun
2026-05-02 17:06:26 +02:00
d3f45dbda4
feat(web): saveImage routes through transferStore
Jannis Braun
2026-05-02 17:05:51 +02:00
2be243336b
feat: all profile uploads through transferStore; delete legacy POST /api/uploads
Jannis Braun
2026-05-02 16:46:29 +02:00
727c51f659
feat(web): RegisterPage avatar uses transferStore + waitForTransfer helper
Jannis Braun
2026-05-02 16:40:50 +02:00
48d199515a
feat(web): chatStore dedups WS echo against pendingMessageStore (FIFO)
Jannis Braun
2026-05-02 16:37:22 +02:00
e534644e57
feat(web): Message renders pending-bubble overlay + retry/discard chrome
Jannis Braun
2026-05-02 16:31:53 +02:00
7b6586110d
feat(web): MessageList interleaves pending bubbles by createdAtLocal
Jannis Braun
2026-05-02 16:22:33 +02:00
b97326ef18
feat(web): MessageInput uses composerStore + transferStore (eager upload, FS handles)
Jannis Braun
2026-05-02 16:09:24 +02:00
65d8a19c87
feat(web): AttachmentProgress overlay component
Jannis Braun
2026-05-02 16:02:47 +02:00
5128a625b8
feat(web): pending-message orchestrator (TTL discard, deferred send, online retry)
Jannis Braun
2026-05-02 15:53:23 +02:00
b01ad4edb8
feat(web): pendingMessageStore with FIFO dedup matcher and TTL discard
Jannis Braun
2026-05-02 15:45:06 +02:00
c986f734ee
feat(web): composerStore (per-channel draft + staged transfer ids)
Jannis Braun
2026-05-02 15:37:08 +02:00
2864d84a0f
feat(web): transferStore.startDownload + pause/resume/abort with FS-handle path
Jannis Braun
2026-04-30 02:16:38 +02:00
bde00e2d9f
feat(web): transferStore upload + resume via tus-js-client
Jannis Braun
2026-04-30 02:11:43 +02:00
bdfe7b453a
feat(web): transferStore skeleton with versioned persistence
Jannis Braun
2026-04-30 02:06:17 +02:00
054f063f1f
feat(web): IDB persistence + capability detection for FileSystemFileHandle
Jannis Braun
2026-04-30 02:03:01 +02:00
097976538d
deps(web): add tus-js-client, idb, fake-indexeddb
Jannis Braun
2026-04-30 02:00:43 +02:00
2e6dabd7ff
feat(server): janitor sweeps for tus expired uploads and stragglers
Jannis Braun
2026-04-30 01:56:39 +02:00
974fbf759e
feat(server): tus upload endpoint at /api/files with auth, ownership, size, finalize hooks
Jannis Braun
2026-04-30 01:24:45 +02:00
21022eaa73
feat(server): tus hook helpers (metadata parse, extension extract, ownership check)
Jannis Braun
2026-04-30 01:13:45 +02:00
9902130916
feat(server): config keys for tus upload directory and expiration
Jannis Braun
2026-04-30 01:11:34 +02:00
4477554f8a
deps(server): add @tus/server and @tus/file-store
Jannis Braun
2026-04-30 01:08:26 +02:00
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