Files
ChatApp/apps/desktop
byGalax 331b1298f8 feat(call): Discord-style screen-share UX
- Watch-gate lifted into CallContext. watchingShareUserIds /
  dismissedShareUserIds / screenShareAudioMutedIds as session-only state,
  cleared on CallState.idle and on TrackUnsubscribed for each sharer.
  Survives layout changes (grid <-> focus <-> fullscreen) without
  resetting which the old local-state viewer dropped on remount.
- ScreenShareAudio tracks tagged via data-track-source="screenshare" at
  attach-time; initial muted follows watching + manual mute mirrors so
  audio never plays before the user clicks "Bildschirm anschauen". Deafen
  still wins at the top of the priority chain.
- New screenShareVolumes store (session-only, keyed by participantId).
  attachTrack pulls the initial volume from this store for screenshare
  audio elements so the context-menu slider takes effect immediately.
- Screen shares are no longer auto-promoted to focus. They render as
  equal-size grid tiles like everyone else; user clicks to focus. The
  "Bildschirm anschauen" overlay replaces auto-play as the opt-in.
- Dismissed sharer-ids filter out of buildTiles, so "Zuschauen beenden"
  really hides the tile until the sharer stops + restarts.
- New ScreenShareContextMenu (portal, Esc / outside-click to close):
  volume slider + audio mute toggle when the share has audio + a
  destructive "Zuschauen beenden" row. Wired via a dispatcher in
  InCallPanel that picks between participant-volume and share-menu
  based on tile.kind.
- Fullscreen cinema gets a "Hide participant strip" toggle (top-right,
  session-only) so focused content reaches the full viewport when the
  bottom thumbnail row would otherwise steal 160px. Fades with the
  auto-hide controls; only surfaces when there's a focus + peers to hide.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 20:42:26 +02:00
..
2026-04-22 19:24:14 +02:00
2026-04-18 23:11:35 +02:00
2026-04-22 19:24:14 +02:00
2026-04-18 23:11:35 +02:00
2026-04-18 23:11:35 +02:00
2026-04-18 23:11:35 +02:00

@chat-app/desktop

Tauri v2 + React + Vite + Tailwind desktop client (macOS / Windows / Linux).

Prerequisites

  • Node 22+, pnpm 9+
  • Rust + Cargo (install via https://rustup.rs)
  • Platform build deps:
    • macOS: Xcode Command Line Tools
    • Linux: libwebkit2gtk-4.1-dev, build-essential, libssl-dev (Debian/Ubuntu)
    • Windows: Microsoft C++ Build Tools + WebView2

Dev

# from repo root
pnpm install
pnpm desktop:dev      # tauri dev — launches Vite + native window
pnpm desktop:build    # production bundle per platform

Layout

  • src/ — React app (Vite bundles into dist/).
  • src-tauri/ — Rust backend. main.rs wires Tauri plugins.
  • vite.config.ts — port 1420, HMR on 1421, aliases to shared packages.

Secure Storage

Session tokens + user private keys live in Stronghold (tauri-plugin-stronghold). Local message history lives in SQLite (tauri-plugin-sql), DB file encrypted at rest.