Commit Graph

32 Commits

Author SHA1 Message Date
cloudwithax 48e49ee6a5 feat(voice): add TURN credential support, ICE restart logic, and connection quality tracking
Introduce a TURN credentials protocol for requesting time-limited relay
server credentials from the relay node, improving NAT traversal for
WebRTC voice connections.

WebRTC layer improvements:
- Add ICE candidate buffering before remote description is set
- Implement automatic ICE restart with configurable max attempts
- Add disconnection timeout with delayed restart recovery
- Add per-peer connection state tracking and callbacks
- Include public STUN servers (Google, Cloudflare) by default
- Add detailed logging throughout the WebRTC lifecycle

Voice store improvements:
- Fetch TURN credentials from relay before establishing connections
- Track per-peer RTCPeerConnectionState with reactive signals
- Derive overall voice quality signal (good/connecting/degraded/failed)
- Evaluate and surface degraded connection state to the UI
- Clean up peer connection states on participant leave
- Fix video toggle resource leak (stop unused audio tracks)

Backend changes:
- Add TurnCredentialRequest/Response protocol types
- Wire turn_credentials behaviour into swarm and node event loop
- Add get_turn_credentials Tauri command
- Propagate errors from voice commands instead of silently dropping
- Add input validation for SDP types in send_voice_sdp
- Handle missing node handle as explicit error in all voice commands
- Add DirectoryResponse::Error variant handling
- Scope Linux WebKitGTK permission grants to UserMediaPermissionRequest

UI improvements:
- Show connection quality indicator in voice channel header
- Add per-peer connection state ring on participant tiles
- Display failed connection warning icon on participant tiles
- Stack muted/deafened indicators vertically to avoid overlap
- Show participant grid in degraded connection state

Also remove unused imports across several frontend components.
2026-02-24 20:59:19 -05:00
cloudwithax 044b5ca111 feat(storage): upsert directory entry to preserve existing data on conflict 2026-02-19 17:48:05 -05:00
cloudwithax ef6114a751 feat(frontend): relay discoverability toggle, sign-up disclosure, offline badge
- setRelayDiscoverable IPC wrapper in tauri.ts
- relay_discoverable in defaultSettings + toggleRelayDiscoverable function
- Privacy settings: discoverable on relay toggle
- Sign-up: disclosure text about relay username storage
- User directory: WifiOff badge for relay-only (offline) peers
- Improved empty state hint text

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 12:42:09 -05:00
cloudwithax 72a82c1a11 feat(commands): relay-fallback search + set_relay_discoverable command
search_directory falls back to relay when local results < 5.
Relay stubs upserted with INSERT OR IGNORE to preserve existing data.
set_relay_discoverable persists setting and notifies running node.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 12:35:48 -05:00
cloudwithax cb45e2e463 feat(node): wire directory service into event loop
- Registers profile on relay reservation accepted (if discoverable)
- DirectorySearch, DirectoryRegister, DirectoryRemove, SetRelayDiscoverable commands
- Pending reply map for async search results

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 12:25:15 -05:00
cloudwithax c01dc94338 feat(app): directory protocol types, behaviour, relay_discoverable setting
- protocol/directory.rs: DirectoryRequest/Response/ProfileEntry + DIRECTORY_PROTOCOL
- node/behaviour.rs: directory_service field on DuskBehaviour
- node/swarm.rs: outbound directory_service cbor behaviour
- storage/disk.rs: relay_discoverable bool in UserSettings (default true)
- types.ts: relay_discoverable added to UserSettings interface

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 12:19:43 -05:00
cloudwithax 31cdd4932b feat: update desktop packaging workflow for self-hosted runners and improve artifact handling 2026-02-18 21:20:49 -05:00
cloudwithax 8e5b6cc8ac rename 2026-02-18 21:15:17 -05:00
cloudwithax d34def24b0 feat: add desktop packaging support for multiple platforms and CI workflow 2026-02-18 21:13:48 -05:00
cloudwithax f97cde8608 feat: enhance relay address validation and configuration management 2026-02-18 18:23:24 -05:00
cloudwithax 9c3f7250df feat: add crescent moon image asset to project 2026-02-16 21:42:28 -05:00
cloudwithax 8f494fcc60 fix: prevent deadlock by releasing node_handle lock before requesting sync in join_community 2026-02-16 17:17:26 -05:00
cloudwithax 197d8ec16c feat: add IPC logging for all command invocations
- Introduced a macro `ipc_log!` to log the invocation and result of Tauri IPC commands in the Rust backend.
- Updated existing commands in `dm.rs` and `identity.rs` to use the new logging macro.
- Wrapped the `invoke` function in the frontend to log all IPC calls and their results, including redacting sensitive arguments.
2026-02-16 08:29:22 -05:00
cloudwithax 70377f13b8 feat: implement pending join role management for community invites 2026-02-15 23:17:44 -05:00
cloudwithax 11a987e0de feat: enhance DM search functionality and improve message loading
- Refactor DMSearchPanel to utilize a debounced search mechanism with improved filtering options.
- Implement asynchronous message searching with new searchDMMessages API.
- Introduce VirtualMessageList for optimized rendering of messages in DMChatArea.
- Add unread message count indicator in ServerList for better user awareness.
- Enhance message loading logic to support pagination and lazy loading of older messages.
- Update types and stores to accommodate new search filters and message handling.
2026-02-15 22:46:59 -05:00
cloudwithax a4e7e51f50 chore: checkpoint current local changes 2026-02-15 21:36:37 -05:00
cloudwithax 5a61b81811 feat: add mention functionality and improve notification system
- Implemented mention support in DMChatArea, allowing users to mention peers in messages.
- Enhanced markdown rendering to support mentions, converting <@peer_id> tokens to display names.
- Updated notification system to handle navigation on notification clicks, directing users to relevant channels or DMs.
- Introduced caching for avatar icons to reduce redundant disk writes.
- Added a MentionList component for displaying mention suggestions.
- Improved styling for mentions in both chat and editor contexts.
- Persisted last viewed channels per community across app restarts.
2026-02-15 21:01:00 -05:00
cloudwithax 1626a40f32 feat: integrate notification functionality with Tauri plugin 2026-02-15 19:54:22 -05:00
cloudwithax 4bf42706c3 feat: add CommunitySettingsModal component for managing community settings 2026-02-15 18:45:36 -05:00
cloudwithax 26c1563ea9 feat: add GIF search and trending functionality with Tauri commands
- Implemented `search_gifs` and `get_trending_gifs` commands in Tauri for GIF retrieval.
- Created a new protocol for GIF requests and responses.
- Added `EmojiPicker` component for emoji selection with recent emoji storage.
- Developed `GifPicker` component for searching and selecting GIFs.
- Introduced emoji data management with recent emoji tracking.
- Added markdown conversion utilities for rendering formatted text.
- Updated Vite configuration to optimize dependencies for Prosemirror.
2026-02-15 16:46:31 -05:00
cloudwithax e468f5ae44 feat: add GIF search and trending functionality with Tauri commands
- Implemented `search_gifs` and `get_trending_gifs` commands in Tauri for GIF retrieval.
- Created a new protocol for GIF requests and responses.
- Added `EmojiPicker` component for emoji selection with recent emoji storage.
- Developed `GifPicker` component for searching and selecting GIFs.
- Introduced emoji data management with recent emoji tracking.
- Added markdown conversion utilities for rendering formatted text.
- Updated Vite configuration to optimize dependencies for Prosemirror.
2026-02-15 16:46:19 -05:00
cloudwithax aa640bf81d fix(DMSidebar): change button to div for better accessibility and keyboard navigation 2026-02-15 14:14:49 -05:00
cloudwithax 42f3f86f08 feat(directory): update peer profile to include public key and improve placeholder handling in user directory 2026-02-15 13:49:30 -05:00
cloudwithax 718bd9557e feat(dev-server): add development-only HTTP API for programmatic access
feat(Cargo.toml): add axum as a dependency with dev-server feature
fix(package.json): update tauri script to include dev-server option
2026-02-15 12:37:42 -05:00
cloudwithax 1940bb3fbf feat(readme): enhance README with versioning, licensing, and system dependencies
feat(profile): implement profile announcement and publishing on peer discovery

fix(directory): refresh known peers on modal open for immediate visibility
2026-02-15 10:51:34 -05:00
cloudwithax ed7e6d6239 feat(relay): add custom relay address handling and UI for selection 2026-02-14 22:14:43 -05:00
cloudwithax b4f75cd995 feat(peer-discovery): implement global peer discovery and update peer profile handling 2026-02-14 20:42:29 -05:00
cloudwithax 34cc1883f5 feat(auth): handle fresh install flow in splash screen
add separate effect for users without stored identity to play
animation then transition to signup, preventing unnecessary
retry loop meant only for returning users
2026-02-14 20:31:21 -05:00
cloudwithax 086c2a9d2c lint fixes 2026-02-14 19:55:12 -05:00
cloudwithax 1f06ada9d2 started implementing core features (profiles, dms, servers, text/voice, settings, etc)
added icons and branding
2026-02-14 19:54:55 -05:00
cloudwithax e008d4e579 add LICENSE and README files for project documentation 2026-02-13 18:23:41 -05:00
cloudwithax 99e5a1d0ec init commit 2026-02-13 18:12:13 -05:00