You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make the spacebot dashboard usable on phones and small tablets. The full experience (agents, workers, channels, OpenCode workbench) should be reachable from mobile, not a stripped-down view.
Library readiness
spaceui is mobile-ready. Built on Radix UI + Headless UI (both touch-aware out of the box), styled with Tailwind v4. Small upstream nits:
packages/ai/src/ChatComposer.tsx has hardcoded w-[210px] / w-[180px] / w-[76px] fragments that won't shrink
packages/primitives/src/Dialog.tsx has min-w-[300px] — can clip ≤320px
Resizable.tsx is desktop-only — consumers should swap to tabs/stacks below md rather than asking spaceui to change
OpenCode embed is mobile-aware but we're disabling it (see below)
OpenCode embed plan (load-bearing)
The vendored OpenCode SPA already has mobile support that interface/src/components/OpenCodeEmbed.tsx actively turns off. Tasks:
Stop force-hiding [data-component="sidebar-nav-mobile"] in the embed's override CSS (lines 268–271), OR replace it with a spacebot-owned mobile nav surface
Make the pre-seeded session: {width: 600} layout (line 234) conditional on viewport ≥ md, or drop it and let OpenCode's own defaults run
Verify the [data-component="prompt-input"]!important overrides don't clip on narrow viewports
Test Kobalte portal elements (dropdowns, dialogs, toasts) on touch — they render outside the Shadow DOM into document.body
Verify contain: "strict" on the embed host (line 374) doesn't break the mobile layout's height calculations
Important context: Tailwind md: classes inside the embed DO work despite the Shadow DOM because they resolve to viewport media queries.
Sidebar pattern
Replace the persistent side-by-side sidebars (Sidebar, ConversationsSidebar, WorkbenchSidebar, ConfigSidebar, SkillsSidebar) with a single drawer/sheet pattern below md. Open via a hamburger / nav button in a top bar. Persist open/closed state per #586.
A separate mobile client consuming the API (rejected: OpenCode embed is Shadow-DOM-mounted same-origin via src/api/opencode_proxy.rs; re-implementing it elsewhere isn't worth it)
Goal
Make the spacebot dashboard usable on phones and small tablets. The full experience (agents, workers, channels, OpenCode workbench) should be reachable from mobile, not a stripped-down view.
Library readiness
packages/ai/src/ChatComposer.tsxhas hardcodedw-[210px]/w-[180px]/w-[76px]fragments that won't shrinkpackages/primitives/src/Dialog.tsxhasmin-w-[300px]— can clip ≤320pxResizable.tsxis desktop-only — consumers should swap to tabs/stacks belowmdrather than asking spaceui to changeOpenCode embed plan (load-bearing)
The vendored OpenCode SPA already has mobile support that
interface/src/components/OpenCodeEmbed.tsxactively turns off. Tasks:[data-component="sidebar-nav-mobile"]in the embed's override CSS (lines 268–271), OR replace it with a spacebot-owned mobile nav surfacesession: {width: 600}layout (line 234) conditional on viewport ≥ md, or drop it and let OpenCode's own defaults run[data-component="prompt-input"]!importantoverrides don't clip on narrow viewportscontain: "strict"on the embed host (line 374) doesn't break the mobile layout's height calculationsImportant context: Tailwind
md:classes inside the embed DO work despite the Shadow DOM because they resolve to viewport media queries.Sidebar pattern
Replace the persistent side-by-side sidebars (Sidebar, ConversationsSidebar, WorkbenchSidebar, ConfigSidebar, SkillsSidebar) with a single drawer/sheet pattern below
md. Open via a hamburger / nav button in a top bar. Persist open/closed state per #586.Scope (routes needing a pass)
Likely approach
mdRelated
Out of scope
src/api/opencode_proxy.rs; re-implementing it elsewhere isn't worth it)