byGalax
f6e0e4dd09
feat(P3.T3): app:hostname IPC for device-name default
2026-05-16 19:04:03 +02:00
byGalax
d449e128a8
docs(hotfix): screen-share taskbar crop + strip-toggle icon padding plan
2026-05-16 18:59:59 +02:00
byGalax
5b0aa24a8d
feat(P3.T2): DeviceRecord.revokedAt + revokeDevice wrapper
...
Extend DeviceRecord with revokedAt field, update registerDevice and
listOwnDevices selects to include revoked_at, add revokeDevice RPC
helper, update db-types to reflect T1 migration schema, and add
vitest coverage for all new behaviour.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 18:52:34 +02:00
byGalax
540b506f91
feat(P3.T1): devices.revoked_at + revoke_device RPC + realtime publication
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 18:48:22 +02:00
byGalax
ede0d00f5b
docs(P3): Phase 3 implementation plan (Session/Device List + Revoke)
2026-05-16 18:45:46 +02:00
byGalax
ef1f9f45d8
fix(desktop): swap GIF provider from Tenor (closed Jan 2026) to GIPHY
...
Google closed Tenor v2 to new API clients in Jan 2026, so the only
people who could use the picker were those with a pre-existing Google
Cloud Console key. Swapped to GIPHY's Developer API (still open, free
keys at https://developers.giphy.com/dashboard/ ).
- Env var renamed VITE_TENOR_API_KEY → VITE_GIPHY_API_KEY
- Endpoint, response mapping, error sentinel updated
- File still named tenor.ts for import-path stability — renaming
later if it bothers anyone
- Public GifResult interface unchanged so the picker UI didn't need
edits beyond the error-message switch
2026-05-16 18:25:18 +02:00
byGalax
95156a65eb
feat(desktop): view-once image attachments (sender toggle + recipient lightbox + tombstone)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 18:18:39 +02:00
byGalax
915569db39
feat(shared): mark_attachment_viewed + view_once on AttachmentHandle
2026-05-16 18:12:15 +02:00
byGalax
526f9d7bcc
feat(db): message_attachments.view_once + mark_attachment_viewed RPC
2026-05-16 18:09:36 +02:00
byGalax
cd79b77e6f
feat(desktop): GIF button + picker wired into composer
2026-05-16 18:07:40 +02:00
byGalax
7726498218
feat(desktop): GIF picker popover (Tenor + trending/search/recent)
2026-05-16 18:05:45 +02:00
byGalax
f1d9602a76
fix(desktop): read Tenor API key from VITE_TENOR_API_KEY env, no hardcoded credential
2026-05-16 18:03:20 +02:00
byGalax
45bcbb449c
feat(desktop): Tenor v2 GIF search/featured/recent client
2026-05-16 18:02:01 +02:00
byGalax
ef98efb938
feat(desktop): mention notifications via realtime + osNotify
2026-05-16 17:59:57 +02:00
byGalax
7355b343c8
feat(shared): sendEncryptedMessage inserts mention rows after the message row
2026-05-16 17:57:52 +02:00
byGalax
1a39c1bb33
feat(shared): parseMentionUsernames + insertMentions helpers
2026-05-16 17:55:20 +02:00
byGalax
70209be1de
feat(db): message_mentions table (RLS: mentioned user + author can SELECT)
2026-05-16 17:52:40 +02:00
byGalax
3dbeabd268
feat(desktop): pin/unpin from message context menu + side panel
2026-05-16 17:51:01 +02:00
byGalax
6bff163f09
feat(desktop): pinned-messages side panel
2026-05-16 17:47:39 +02:00
byGalax
ddeedeb71d
feat(desktop): pinned-messages pill in conv header
2026-05-16 17:45:43 +02:00
byGalax
7e85ffe548
feat(desktop): usePinnedMessages live hook
2026-05-16 17:43:45 +02:00
byGalax
0d30a462b3
feat(shared): pinned-messages list/pin/unpin helpers
2026-05-16 17:42:09 +02:00
byGalax
745b8cd69d
feat(db): pinned_messages table (≤5 per conv via trigger)
2026-05-16 17:39:42 +02:00
byGalax
5ace6735d8
docs(plan): phase 2 — messaging (pinned / mentions / GIF / view-once)
2026-05-16 17:36:21 +02:00
byGalax
ffaa6ceb70
feat(mobile): SecurityCenter — PIN change, recovery, reset, migration retry
2026-05-16 17:23:04 +02:00
byGalax
ccac822cb9
feat(mobile): settings hub with security section + signout
2026-05-16 17:21:57 +02:00
byGalax
74a0ef6c32
refactor(mobile): chats header opens settings instead of inline logout
2026-05-16 17:18:56 +02:00
byGalax
9de2c368bf
feat(desktop): optional wipe-on-close (Settings -> Sicherheit)
2026-05-16 17:17:59 +02:00
byGalax
88345420e0
refactor(mobile): AttachmentImage drops device-keyed props
2026-05-16 17:17:37 +02:00
byGalax
0354676d2f
refactor(mobile): MessageBubble drops ownDeviceId prop
2026-05-16 17:17:30 +02:00
byGalax
cb7bd99fb4
refactor(mobile): conversation detail uses ownUserId + drops senderDeviceId
2026-05-16 17:13:47 +02:00
byGalax
3b55fcaf2c
feat(mobile): (app) layout routes by userKeyState
2026-05-16 17:11:05 +02:00
byGalax
7ae1d5ba8c
feat(mobile): UserKey unlock screen (PIN entry + recovery tab + reset)
2026-05-16 17:09:50 +02:00
byGalax
50bfb5b137
feat(desktop): wipe local crypto + caches on sign-out
2026-05-16 17:09:01 +02:00
byGalax
41359816f1
feat(mobile): UserKey setup screen (PIN + optional recovery code)
2026-05-16 17:08:47 +02:00
byGalax
8ad212291a
feat(desktop): apply friend nicknames in header / bubble / mentions / call tile
2026-05-16 17:06:18 +02:00
byGalax
18a6365586
feat(mobile): PinInput component — 6-digit numeric pad
2026-05-16 17:04:25 +02:00
byGalax
898b7469bb
feat(desktop): set-nickname dialog + right-click trigger in friends list
2026-05-16 17:01:38 +02:00
byGalax
a5eadef663
feat(desktop): friendNicknames local store + useNickname hook
2026-05-16 16:58:14 +02:00
byGalax
e8074e7da0
feat(desktop): empty-state for empty conversation
2026-05-16 16:56:27 +02:00
byGalax
88409aff5d
feat(desktop): empty-state for friends list
2026-05-16 16:54:12 +02:00
byGalax
b7d7a85253
feat(desktop): empty-state for chat list
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 16:51:37 +02:00
byGalax
502c6af1b8
feat(desktop): EmptyState primitive component
2026-05-16 16:49:16 +02:00
byGalax
adc9686035
refactor(mobile): AuthProvider exposes userKeyState instead of device record
2026-05-16 16:47:55 +02:00
byGalax
472665b980
fix(desktop): tray badge — IPC handler died when icon.ico missing from packaged resources
2026-05-16 16:47:19 +02:00
byGalax
c52c65faa9
feat(mobile): userIdentity orchestrator (setup/unlock/cache/change-PIN/reset)
2026-05-16 16:43:50 +02:00
byGalax
79f1786ac6
feat(desktop): Settings — 🌐 Global toggle per voice hotkey
2026-05-16 16:43:00 +02:00
byGalax
ca77214e2d
fix(desktop): voice hotkeys are window-scoped unless Global is toggled
...
The old code registered every enabled hotkey through Electron globalShortcut
API, which captures system-wide. Setting M as mute meant m could not be
typed in any other app. Now the OS-level registration only happens when
binding.global === true; otherwise the existing window-keydown listener
handles it.
2026-05-16 16:41:20 +02:00
byGalax
8c27e8eafa
feat(mobile): legacyDeviceVault helper for per-device key probing
2026-05-16 16:41:18 +02:00
byGalax
69733168ed
feat(desktop): add 'global' flag to voice hotkey binding (default false)
2026-05-16 16:38:51 +02:00