This document defines the implementation steps for the desktop UX shell inspired by Codex-style layout.
Three-pane macOS workspace:
- Left: workspace/admin/project navigation
- Center: primary chat workflow
- Right: context pane with tab switch (
Preview/Git)
Design principles:
- Project-first context (everything scoped to active local project)
- Fast switching between conversation and project evidence
- Stable desktop ergonomics (resizable panes, persistent layout)
Goal: Build resizable 3-pane shell with right context tabs.
Scope:
- Keep existing left sidebar and auth gating
- For chat selection, render center + right panes using
HSplitView - Add context tab switch (
Preview,Git) - Add placeholder right-pane content for both tabs
Done when:
- Chat remains functional in center
- Right pane can switch between preview/git placeholders
- Panes are draggable and feel stable
Goal: Introduce active project context for shell.
Scope:
- Add
ProjectRefmodel (id, name, localPath) - Sidebar project list and active project selection
- Show active project in shell header
Done when:
- Selecting project updates shell context
- All shell areas read from same active project state
Goal: Create/open local project folders for users.
Scope:
- Create project flow (name + path under workspace)
- Open existing project folder
- Save project metadata in local store
Done when:
- User can create/open projects without terminal
- Project metadata survives app restart
Goal: Modernize chat experience to match Codex-style workflow and keep views modular.
Scope:
- Refactor chat UI into smaller components (
Transcript,MessageRow,Composer,ToolbarControls) - Add improved prompt composer (multiline input + clear send affordance)
- Add model picker in composer (backed by Copilot model list endpoint)
- Add lightweight run metadata row (selected model, project scope)
- Keep style aligned with current dark/light theme primitives
Done when:
- Chat is visually closer to target UX in screenshot
- Prompt entry feels faster/clearer for iterative work
- No single chat view file grows into monolithic structure
Goal: Replace placeholders with functional panels.
Scope:
- Preview tab: live web preview host status and container
- Git tab: repo status + changed files list + simple diff panel
Done when:
- Right pane reflects active project state
- Switching tabs is instant and stable
Goal: Make shell production-usable.
Scope:
- Persist pane/tab selection and last active project
- Keyboard shortcuts (new chat, switch tab, focus input)
- Empty/error states and status strip for sidecar/auth/session
Done when:
- Workspace reopens in expected state
- Errors are visible without logs
- Full Monaco editor
- Full deployment pipeline
- Supabase user sync
These are covered in later roadmap phases.