ff154c50307eb33432e7f3d4e9bfc48b5c7303ab
Frameless (window_manager, hidden titlebar): chrome bar on welcome, drag-to-move appbar + window buttons on connect, drag layer + window buttons in session controls; min size 160x90; volume-scroll off for drag; session maximize = fullscreen toggle. Verified on KDE Wayland. Delete legacy/minimal/nosheet bisect screens; session routes direct (black-screen fix verified incl. WAN). Avatar: pipeline now 128px aspect-kept PNG (was cropped JPEG); profile card centered 64px hover-to-change; member avatar drops ResizeImage downscale. NOTE open: pipeline 512 KiB check vs server 64 KiB enforcement mismatch. Fixes: idle warn/unready skipped while PLAYING; sendChat drops blanks; one chat row per send (drop textless server feed echo); chat field keeps focus after send. Playback libass true; sdk floor 3.13. Handoff 9-11: 9+10 fixed, 11 jumpy seek still open. Docs: handoff/roadmap/protocol record all of the above; few-commits preference going forward.
sync_relay_project
Watch-together desktop app (working title). One binary, three modes:
- Client — GUI Join, sync WS + mpv. No server code runs.
- Server+Client (Host) — GUI Host starts
packages/serverin-process, listens on a port, self-connects via loopback. Host must open ports. Clients never open ports. - Headless —
watch.exe --headless, same server package, no window.
v1 order: links support (shared http(s) media URL, Syncplay-style sync) first, file relay (server-proxied bytes, whitelist case) after. Jellyfin native + auto-update are deferred as their own undertakings.
Layout:
/packages/core protocol, sync engine, messages (pure Dart, no Flutter)
/packages/server room + media HTTP endpoint (pure Dart, no Flutter)
/apps/desktop Flutter app embedding packages/server (the ONE binary)
/tool spikes + harnesses (range_logger, shaper, fake_viewer, e2e_check)
/deploy systemd unit, notes
/docs PROTOCOL.md, ARCHITECTURE.md, mpv-http-contract.md, ROADMAP.md
Phases + status: docs/ROADMAP.md. Session handoff: HANDOFF.md (root).
Enforcement: core and server must have zero Flutter imports (tested).