Commit Graph

118 Commits

Author SHA1 Message Date
hobokenchicken 9a6f15662b fix(voice): add reconnect/disconnect event handlers + connection quality logging 2026-07-09 13:15:21 -04:00
hobokenchicken 7d1bd02e31 fix(voice): AudioRenderers listens to room events directly, not zustand 2026-07-09 13:08:02 -04:00
hobokenchicken 8542243745 fix(voice): remove unused import 2026-07-09 13:03:07 -04:00
hobokenchicken 90bddc65d4 fix(voice): handle browser autoplay block — flush pending audio on interaction 2026-07-09 13:02:40 -04:00
hobokenchicken 67a5a54244 fix(voice): simplify RemoteAudioTrack — remove stale listener race 2026-07-09 13:01:49 -04:00
hobokenchicken 33c9dc4f15 fix(voice): AudioRenderers re-renders on participant join 2026-07-09 12:55:36 -04:00
hobokenchicken e6dfe43926 fix(voice): broadcast VOICE_JOIN/LEAVE via ws, show participants in sidebar for all users 2026-07-09 12:47:42 -04:00
hobokenchicken 62e8354d03 feat(voice): persist A/V device preferences in localStorage 2026-07-09 12:36:43 -04:00
hobokenchicken dbd4de8e61 bump: desktop app v0.2.0, build all Linux bundles (appimage, deb, rpm) 2026-07-07 10:20:27 -04:00
hobokenchicken a0bb229173 fix: DMs now show full date+time like channels [DD.MM.YYYY @ HH:MM]
Release Desktop Apps / build-windows (push) Failing after 3h0m23s
Release Desktop Apps / build-linux (push) Has been cancelled
Release Desktop Apps / release (push) Has been cancelled
2026-07-07 14:01:27 +00:00
hobokenchicken c86c602294 change upload limit from 25MB to 1GB 2026-07-07 13:43:41 +00:00
hobokenchicken aa39b6a5be feat: read indicator — NEW divider line between read and unread messages 2026-07-06 19:41:19 +00:00
hobokenchicken 8cf1e91b2b ci: Gitea Actions release workflow for Linux + Windows desktop builds
Triggers on v* tags. Builds AppImage/deb/rpm on Linux runner,
MSI/NSIS on Windows runner, then creates a release with all assets.
Requires self-hosted runners registered in Gitea Actions.
2026-07-06 14:48:59 -04:00
hobokenchicken 559d17d1f2 feat: Tauri desktop app scaffold
- src-tauri/ with Rust backend, Cargo.toml, main.rs, lib.rs
- tauri.conf.json: Linux deb bundle with webkit2gtk deps
- package.json: added tauri script
- Build on a machine with Rust: cd web && npm run tauri build
2026-07-06 18:07:34 +00:00
hobokenchicken 88194b17c4 feat: unread markers for channels and DMs
- Read states store: smarter hasUnread compares against latest message
- ConversationList: orange dot + bold name for unread DMs
- DMChat: auto-mark-read when viewing conversation
- WS handler: mark DM read on new message while active+focused
2026-07-06 17:56:19 +00:00
hobokenchicken 2b45b11ea8 fix: screenshare rendering, voice panel layout, SW cache bust with git SHA
- VideoGrid: add screen share track display with proper sizing
- participantToVoice: detect ScreenShare + ScreenShareAudio tracks
- VoicePanel: flex layout, no scroll, tiles dynamically fill space
- VoiceChannel: show screen/camera icons in participant list
- vite.config: inject git SHA into SW CACHE_VERSION on build
2026-07-06 17:49:17 +00:00
hobokenchicken b3b5ff495d fix: DM message ordering, consolidate input toolbar, add rich text/WYSIWYG, file upload with drag-drop
- Fix DM backend ListMessages to use DESC + reverse (match channel handler)
- Remove spurious .reverse() from frontend message/conversation stores
- Create shared MessageInput component with Slack-style single toolbar row
- Add file upload via + button with progress bar and drag-and-drop
- Add markdown/rich text toggle with full WYSIWYG block formatting
  (lists, blockquotes, links, headings, code blocks)
- Add frontend+backend security for file uploads (extension + content-type guards)
2026-07-06 17:33:20 +00:00
hobokenchicken 9512dedec1 feat(chat): add native emoji pickers for chat input and reactions 2026-07-06 13:59:20 +00:00
hobokenchicken 8bbe2a0ff0 fix(dm): remove local append on send to prevent double messages 2026-07-06 13:53:11 +00:00
hobokenchicken c2fb3165f4 fix(dm): add image paste support to DM chat and fix realtime DM updates 2026-07-06 13:44:41 +00:00
hobokenchicken 0c26e2402b feat(chat): support pasting images directly into the chat box 2026-07-06 13:38:02 +00:00
hobokenchicken 88e7faaafb fix(webrtc): fix typescript errors for participant list migration 2026-07-06 13:32:10 +00:00
hobokenchicken 1d37284c25 fix(permissions): wire up MUTE_MEMBERS bitmask and fix member permissions in frontend 2026-07-06 13:27:38 +00:00
hobokenchicken b1b41ca5e1 fix(webrtc): add error handling and ui alerts for background processor initialization 2026-07-06 13:16:01 +00:00
hobokenchicken 2631e6ce4a fix(webrtc): fix invalid hook call in device settings modal for bgMode 2026-07-06 13:13:05 +00:00
hobokenchicken 239640975f feat(webrtc): add background blur and virtual background options 2026-07-06 13:08:59 +00:00
hobokenchicken ed408c4044 feat(webrtc): add admin option to mute other participants 2026-07-06 13:04:39 +00:00
hobokenchicken 9aeedb1a53 feat(webrtc): add UI to select audio/video input and output devices 2026-07-06 12:56:27 +00:00
hobokenchicken 59846fc1e4 chore(build): automatically embed git commit hash in version string 2026-07-06 12:52:20 +00:00
hobokenchicken 944ae4074e fix(webrtc): sync participants state when local user publishes tracks 2026-07-06 12:49:14 +00:00
hobokenchicken 549bf842d0 feat(ui): tabulate voice and chat panels to prevent overlapping 2026-07-06 12:47:23 +00:00
hobokenchicken 83c05731ed fix(webrtc): correctly subscribe to remote camera tracks 2026-07-06 12:40:26 +00:00
hobokenchicken 5d8f420882 fix(webrtc): fix VideoGrid reactivity and layout 2026-07-06 12:37:35 +00:00
hobokenchicken 074742ddb4 feat(webrtc): render remote audio tracks and allow camera access 2026-07-06 12:25:40 +00:00
hobokenchicken 7e1c0b822b feat: inline markdown formatting toolbar
FormatToolbar component: B I S ` || buttons that wrap selected text
with markdown syntax. Added to both channel and DM input areas.
Keyboard shortcuts: Ctrl+B bold, Ctrl+I italic already work via
browser defaults on the rendered markdown.
2026-07-02 15:58:59 -04:00
hobokenchicken f61b33ff81 feat: GIF picker and kaomoji in DMs
- Added GiphyPicker to DM input area (toggle with [GIF] button)
- Added EmojiPicker/kaomoji to DMs (toggle with [☺] or Ctrl+E)
- GiphyPicker shows above input when toggled
- Kaomoji appends to input text
2026-07-02 15:50:28 -04:00
hobokenchicken ed50815902 feat: restore last active channel on login
- Channel store saves {serverId, channelId} to localStorage on select
- ServerBar restores last server+channel after fetching servers
- Fetches channels for the saved server, then sets the channel if valid
- Gracefully handles missing/deleted servers or channels
2026-07-02 15:44:55 -04:00
hobokenchicken 53f8c6b2ef fix: remove requireInteraction, bump vibrate for Android
requireInteraction can suppress heads-up delivery on some Android
versions when screen is off. Removed it so the OS can auto-dismiss
after showing the notification.
2026-07-02 15:36:51 -04:00
hobokenchicken 15f9f6ae07 fix: push delivery when app is closed
- TTL 30s -> 86400 (24h): push services were dropping undelivered notifs
- Urgency: high: wakes device from doze/sleep
- Topic: per-user to collapse duplicate pending pushes
- SW push handler: try/catch for malformed payloads, always call waitUntil
- Bump SW cache to v6
2026-07-02 15:11:07 -04:00
hobokenchicken c803991cda fix: iOS push notification prompt
iOS requires user gesture for Notification.requestPermission().
- Added NotificationPrompt banner that shows on permission='default'
- autoSubscribePush only fires when already 'granted' (re-subscribe on restore)
- Banner uses tap handler for permission request (works on iOS)
- Gruvbox themed, dismissible, bottom-center toast
2026-07-02 15:04:31 -04:00
hobokenchicken a593f04d7f feat: auto-subscribe push on login, better push logging
- Auto-subscribe to push on login, register, and session restore
- Guard against nil db in SendChannelNotification
- Log push send count per channel message
- Bump SW cache to v5
2026-07-02 14:34:02 -04:00
hobokenchicken 85f9c21f4c fix: center and fill PWA icons
Trim background, cover-crop to square, center. No more letterboxing.
2026-07-02 14:16:14 -04:00
hobokenchicken 92af2e21b1 feat: safe area insets for Dynamic Island / notch / cutout
viewport-fit=cover already set. Added env(safe-area-inset-*) padding
to outer container so content doesn't hide behind Dynamic Island,
notches, or the home indicator bar.
2026-07-02 14:07:19 -04:00
hobokenchicken 1e22daead3 fix: remove unused activeChannelId variable 2026-07-02 14:00:12 -04:00
hobokenchicken 9e70884a16 fix: use ChannelStore for activeChannelId subscription
activeChannelId lives on ChannelStore, not ServerStore.
2026-07-02 13:59:27 -04:00
hobokenchicken b6d4614881 feat: mobile-responsive layout
- Mobile (<md): single-panel view, sidebar/chat/members as overlays
- Hamburger button toggles sidebar overlay (ServerBar + ChannelList)
- Members button toggles MemberList overlay
- ← back button in ChatArea and DMChat headers returns to sidebar
- Auto-switch to chat view when channel or DM is selected
- Tap empty area to dismiss overlays
- Desktop layout unchanged (all panels side by side)
- Status/settings buttons hidden on small screens to save space
2026-07-02 13:58:15 -04:00
hobokenchicken 0b645fe765 feat: PWA overhaul
- Remove debug artifact from login page ('Use Link component: HOME')
- Full icon set: 48/72/96/128/144/152/192/384/512 + maskable variants
- Proper manifest: display_override, shortcuts, categories, scope
- Better service worker: offline fallback page, pre-caching, stale-while-revalidate
- Custom install banner (Android beforeinstallprompt + iOS instructions)
- Connection status indicator (online/offline toast)
- Updated index.html with proper favicon sizes and meta tags
2026-07-02 13:51:42 -04:00
hobokenchicken f30ddb1323 feat: show git commit SHA as version in footer
TERM v1.0 → TERM v5ca5e01 (or whatever SHA is building).
GIT_SHA is injected via vite define from Makefile.
2026-07-02 13:19:43 -04:00
hobokenchicken 5ca5e018ca feat: feature requests board with voting
- [FEATURES] tab next to PINNED in channel header
- Create, vote/unvote, filter by status (open/planned/done/rejected)
- Sort by vote count (most voted first)
- Status selector for moderation
- DB: feature_requests + feature_request_votes tables
- Backend: full CRUD + vote endpoints under /servers/{id}/feature-requests
2026-07-02 13:11:52 -04:00
hobokenchicken 3002626ac4 fix: use window.addEventListener for dropdown keyboard nav
inputRef-based listener never fired (ref null at effect time or
element-level listeners don't catch events in this React setup).
Switched to window.addEventListener matching the pattern every other
keyboard handler in this codebase already uses.
2026-07-02 13:03:41 -04:00