Skip to content

feat: fluid Miro-like board + 3-way connect onboarding#33

Open
Weegy wants to merge 5 commits into
mainfrom
worktree-fluid-canvas
Open

feat: fluid Miro-like board + 3-way connect onboarding#33
Weegy wants to merge 5 commits into
mainfrom
worktree-fluid-canvas

Conversation

@Weegy

@Weegy Weegy commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Fluid Board (Miro-style) + full A/B/C connect onboarding

Replaces the Sidebar + Desktops + split-tree tiling with one infinite, pannable, zoomable board — each former canvas is a free-floating, draggable, resizable app frame. Includes the origin/main merge (mDNS/HTTP autodiscovery) and the onboarding flow surfaced per design.

Commits

  • feat(canvas): fluid Miro-like board — new boardStore (pan/zoom/geometry reducers + persistence) + Board.tsx; App.tsx renders <Board>, connects all apps, relocates the instance switcher to a floating chip. Scrolling inside a frame body no longer pans the board. Sidebar/Workspace/desktopStore left dormant.
  • merge origin/main — brings client autodiscovery (discovery.ts HTTP probe + mdnsBrowser.ts mDNS, bonjour-service).
  • fix(build): externalize wsexternalizeDepsPlugin({ include: ['ws'] }) so the main process boots (ws is a devDep → was bundled → bufferutil boot error).
  • feat(onboarding): surface the full A/B/C connect flow — LAN "On this network" section always visible (with a "Searching the local network…" state), Server-address field (B), and a hint for pasting a full ws(s)://…/omadia-ui/canvas URL (C).
  • chore(dev): auto-GC stale app instancespredev kills stale Electron/electron-vite before every bun run dev (scoped to this worktree, never a blanket pkill).

Verification

  • tsc (node + web) clean · 174 tests pass (22 files, incl. new board + merged discovery tests) · electron-vite build ok · boots clean (single instance, no bufferutil error).

Notes

  • Board geometry persists client-side only (no LVL2 wire-sync yet).
  • Dormant Sidebar/Workspace/desktopStore files still on disk (bounded diff); can be removed in a follow-up.

Weegy added 5 commits June 15, 2026 09:14
Each former canvas is now a free-floating, draggable, zoomable 'app' frame on
one infinite board. New boardStore (pan/zoom/geometry reducers + persistence)
and Board.tsx; App.tsx renders <Board>, connects all apps, relocates the
instance switcher to a floating chip. Scrolling inside a frame body no longer
pans the board. Sidebar/Workspace/desktopStore left dormant. Tests + ISA added.
…erge

ws is a devDependency, so externalizeDepsPlugin didn't externalize it → ws got
bundled and its optional bufferutil import broke boot ('Could not resolve
bufferutil'). Externalize main/preload deps and include ws explicitly; ws is
required at runtime and its WS_NO_BUFFER_UTIL fallback applies.
Make the discovery flow visible per the design: the 'On this network' LAN
section (Scenario A, mDNS) is always shown with a passive 'Searching the local
network…' state when no hosts have answered yet (was gated on lanHosts>0 and
invisible). Clarify the manual path (C) with a hint that a full ws(s):// canvas
URL can be pasted directly. Server-address field (B) unchanged in function.
HARD RULE (only one app instance — old Electron procs eat RAM). predev now runs
tools/gc-app-instances.mjs first: scoped to THIS worktree's path (never a blanket
pkill), matches the real Electron binary (…/Electron.app/Contents/MacOS/Electron,
not the .bin launcher — the old pattern missed every app), kills MAIN procs
(helpers die with them) + any lingering electron-vite. Verified: caught 2 strays.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant