11 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous, requirements, must_haves
| phase | plan | type | wave | depends_on | files_modified | autonomous | requirements | must_haves | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 06-chat-ui-redesign | 02 | execute | 2 |
|
|
true |
|
|
Purpose: Visual alignment with Manus AI system design — correct tokens, correct indicators, correct iconography. Output: Updated CSS vars, Tailwind config, ChatView.tsx (send button + thinking JSX), ChatView.css (thinking animation + width rules).
<execution_context> @$HOME/.config/opencode/get-shit-done/workflows/execute-plan.md @$HOME/.config/opencode/get-shit-done/templates/summary.md </execution_context>
@.planning/PROJECT.md @.planning/phases/06-chat-ui-redesign/06-RESEARCH.md @.planning/phases/06-chat-ui-redesign/06-01-SUMMARY.md@tauri-app/src/index.css @tauri-app/tailwind.config.js @tauri-app/src/components/ChatView.tsx @tauri-app/src/components/ChatView.css
Current index.css :root vars to update (tauri-app/src/index.css lines 4-14):
:root {
--bg: #0d1115; /* → #171717 (Manus base) */
--bg2: #12171d; /* → #1E1E1E (Manus surface) */
--bg3: #171d24; /* → #262626 (Manus elevated)*/
--bg4: #1e252d; /* → #333333 (Manus hover) */
--bg5: #27303a; /* → #333333 or keep as-is */
--text: #f2f4f7; /* → #F3F4F6 (Manus tx) */
--text2: #a0a9b4; /* → #9CA3AF (Manus tx2) */
--text3: #6f7782; /* → #52525B (Manus tx3) */
}
Current tailwind.config.js (full contents):
export default {
content: ["./index.html", "./src/**/*.{ts,tsx}"],
corePlugins: { preflight: false },
theme: {
extend: {
colors: {
"c-bg": "var(--bg)", "c-bg2": "var(--bg2)", "c-bg3": "var(--bg3)",
"c-bg4": "var(--bg4)", "c-bg5": "var(--bg5)",
"c-bdr": "var(--border)", "c-bdr2": "var(--border2)",
"c-tx": "var(--text)", "c-tx2": "var(--text2)", "c-tx3": "var(--text3)",
"c-ac": "var(--accent)", "c-ac2": "var(--accent2)",
"c-danger": "var(--danger)", "c-success": "var(--success)", "c-warn": "var(--warning)",
},
},
},
};
Current thinking indicator JSX (ChatView.tsx lines 763-769):
{generating && !streamReasoning && !streamContent && !streamThinkingOpen && (
<div className="msg-wrapper assistant">
<div className="thinking">
<span /><span /><span />
</div>
</div>
)}
Current send button (ChatView.tsx line 871 — non-hero):
<button className="send-btn" ...><ArrowUp size={18} weight="duotone" /> Send</button>
Current send button (ChatView.tsx line 657 — hero):
<button className="send-btn" ...><ArrowUp size={18} weight="duotone" /></button>
Current message width CSS (ChatView.css):
.messages-container { max-width: 1200px; }
.msg-wrapper.user { max-width: 800px; }
.msg-wrapper.assistant { max-width: 100%; } /* <- too wide */
.input-row { max-width: 800px; }
/* NEW: Manus design tokens as named vars (for new components) */ --manus-base: #171717; --manus-surface: #1E1E1E; --manus-elevated: #262626; --manus-hover: #333333; --manus-tx: #F3F4F6; --manus-tx2: #9CA3AF; --manus-tx3: #52525B; --manus-blue: #3B82F6; }
**tailwind.config.js — add Manus named color tokens:**
Add the following entries to the `colors` extension (append after existing entries):
```js
"manus-base": "var(--manus-base)",
"manus-surface": "var(--manus-surface)",
"manus-elevated": "var(--manus-elevated)",
"manus-hover": "var(--manus-hover)",
"manus-tx": "var(--manus-tx)",
"manus-tx2": "var(--manus-tx2)",
"manus-tx3": "var(--manus-tx3)",
"manus-blue": "var(--manus-blue)",
Pitfall: CSS specificity — existing hardcoded hex values in .css files (e.g., background: #252525 in ChatView.css) will NOT automatically update when CSS vars change. Do NOT touch those yet (they are handled in Task 2).
cd tauri-app && npm run build 2>&1 | grep -E "error|warning" | head -10
index.css :root has updated vars + new --manus-* vars. tailwind.config.js has manus-* color tokens. Build passes.
-
Import: Add
PaperPlaneRightto the phosphor import line (line 10):import { ArrowUp, PaperPlaneRight, Image, Microphone, Paperclip, ChatCircleText } from "@phosphor-icons/react";(Keep
ArrowUpimport only if used elsewhere; otherwise remove it.) -
Thinking indicator (lines ~763-769): Replace the three-span bounce with Manus-style:
{generating && !streamReasoning && !streamContent && !streamThinkingOpen && ( <div className="msg-wrapper assistant"> <div className="thinking-manus"> <span className="thinking-dot" aria-hidden="true" /> <span className="thinking-label">Thinking</span> </div> </div> )} -
Send button icon: Find ALL occurrences of
<ArrowUpinside send button JSX (hero ~line 657, regular ~line 871) and replace with<PaperPlaneRight size={18} weight="fill" />. Remove the "Send" text label from the non-hero button to make it icon-only. Keep the.send-btnclass unchanged.
ChatView.css — four changes:
-
Remove/replace old
.thinking spanblock (lines ~770-802). Replace with Manus thinking styles:.thinking-manus { display: flex; align-items: center; gap: 8px; padding: 8px 0; } .thinking-dot { width: 8px; height: 8px; background: #3B82F6; border-radius: 50%; flex-shrink: 0; animation: thinking-pulse 1.5s ease-in-out infinite; } .thinking-label { font-size: 0.875rem; color: #9CA3AF; font-weight: 400; } @keyframes thinking-pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.35; transform: scale(0.7); } }Remove the old
@keyframes thinking-bounceblock too. -
Message + input reading column alignment: Update the width rules so messages and input align:
/* Consistent reading column: 800px for user, aligned input */ .msg-wrapper.assistant { max-width: 800px; margin-left: 0; } /* was 100% */ .msg-wrapper.user { max-width: 800px; } /* unchanged */ .input-row { max-width: 800px; } /* unchanged */Keep
.messages-container { max-width: 1200px; }as the scroll container — only the message wrapper width matters. -
Update any hardcoded background on
.chat-viewor.initial-screen: Find and replacebackground: #252525(or similar hardcoded colors on the hero/initial screen container) withbackground: var(--bg)so it picks up the updated#171717token. Only change the hero background — do not mass-replace all hex values. cd tauri-app && npm run build 2>&1 | tail -10 TypeScript build passes. ChatView renders PaperPlaneRight send button. thinking-manus class replaces thinking. Message widths set to max 800px for both user and assistant.
<success_criteria>
- App background is neutral dark (#171717), not navy-black
- Thinking state shows "● Thinking" (pulsing blue dot + text), not three bouncing dots
- Send button is a paper plane icon, no text label
- User and assistant messages share same max reading width (800px)
- Build passes clean </success_criteria>