Skip to content

Commit c5ff10a

Browse files
committed
Design doc
1 parent d39115d commit c5ff10a

File tree

1 file changed

+230
-0
lines changed

1 file changed

+230
-0
lines changed

docs/design-visual-language.md

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
# Visual Language & Design System
2+
3+
Design principles and visual elements for MEW Protocol CLI.
4+
5+
## Aesthetic Direction
6+
7+
**Pixel Art / Retro Terminal**
8+
- Avoid emojis in favor of ASCII art and Unicode box-drawing characters
9+
- Geometric shapes over organic forms
10+
- Clean, monospace-friendly layouts
11+
- Terminal-native feel
12+
13+
## Character Palette
14+
15+
### Envelope & Message Markers
16+
17+
**Current Implementation:**
18+
- `` - Chat messages (filled diamond)
19+
- `` - Regular envelopes (hollow diamond)
20+
- `` - Thinking/reasoning spinner (twinkling effect)
21+
22+
### Proposal Markers
23+
24+
**Current Implementation:**
25+
- `╔╗ Proposal:` - top corners (pixel art box frame aesthetic)
26+
27+
**Alternative options for consideration:**
28+
29+
**Geometric shapes:**
30+
- `■ Proposal:` - solid square
31+
- `▪ Proposal:` - small solid square
32+
- `▸ Proposal:` - right-pointing triangle
33+
- `► Proposal:` - filled arrow
34+
- `⬢ Proposal:` - hexagon
35+
36+
**ASCII/text-based:**
37+
- `[P] Proposal:` - bracketed P
38+
- `>> Proposal:` - double arrows
39+
- `:: Proposal:` - double colon
40+
- `* Proposal:` - asterisk
41+
- `! Proposal:` - exclamation mark
42+
43+
**Border/frame style:**
44+
- `[◆] Proposal:` - diamond in brackets (consistent with envelope markers)
45+
46+
### Diff Markers
47+
48+
**Current Implementation:**
49+
- `+` - Additions (green)
50+
- `-` - Removals (red)
51+
- `...` - Truncation/omission indicator
52+
53+
### Border Characters
54+
55+
**Current Implementation:**
56+
- `` - Top/bottom borders (horizontal bar, full width)
57+
- `` `` `` `` - Rounded corners for boxes
58+
- `` - Vertical borders
59+
60+
### UI Navigation
61+
62+
**Current Implementation:**
63+
- `>` - Selection caret (in proposal confirmation dialog)
64+
- `` - Direction indicator (participant arrows, action indicators)
65+
66+
### Status Indicators
67+
68+
**Potential additions:**
69+
- `` or `!` - Warning
70+
- `` or `` or `[✓]` - Success/complete
71+
- `` or `[✗]` - Error/failed
72+
- `` `` `` `` - Loading/progress (quarter circles)
73+
- `` or `` - Refresh/retry
74+
75+
### Separators
76+
77+
**Current Implementation:**
78+
- `▔▔▔...` - Full-width separator between messages
79+
80+
**Potential additions:**
81+
- `─────` - Thin separator
82+
- `═════` - Thick separator
83+
- `┄┄┄┄┄` - Dashed separator
84+
- `· · ·` - Dotted separator
85+
86+
## Color Usage
87+
88+
### Message Types
89+
- **Chat content**: White (default)
90+
- **System messages**: Gray
91+
- **Reasoning thoughts**: Cyan
92+
- **Reasoning actions**: Magenta
93+
- **Proposals**: Cyan (bold)
94+
- **Details/metadata**: Gray (dimmed)
95+
96+
### Diff Colors
97+
- **Additions**: Green (bright)
98+
- **Removals**: Red (bright)
99+
- **Context/omissions**: Gray
100+
101+
### UI Elements
102+
- **Borders**: Theme-dependent
103+
- Chat messages: Magenta (or theme chatBorder)
104+
- Input box: Cyan (or theme inputBorder)
105+
- Proposal dialog: Yellow
106+
- Content boxes: Gray
107+
108+
### Interactive Elements
109+
- **Selected option**: No inverse/highlight, just `>` caret
110+
- **Disabled elements**: Gray, dimmed
111+
- **Active/focused**: No special treatment (caret indicates selection)
112+
113+
## Box Drawing Characters
114+
115+
### Single Line
116+
```
117+
┌─┬─┐ ╭─┬─╮
118+
│ │ │ │ │ │
119+
├─┼─┤ ├─┼─┤
120+
│ │ │ │ │ │
121+
└─┴─┘ ╰─┴─╯
122+
```
123+
124+
### Double Line
125+
```
126+
╔═╦═╗
127+
║ ║ ║
128+
╠═╬═╣
129+
║ ║ ║
130+
╚═╩═╝
131+
```
132+
133+
### Mixed/Heavy
134+
```
135+
┏━┳━┓
136+
┃ ┃ ┃
137+
┣━╋━┫
138+
┃ ┃ ┃
139+
┗━┻━┛
140+
```
141+
142+
## Animation Patterns
143+
144+
### Spinner Sequences
145+
146+
**Thinking/Reasoning (current):**
147+
```
148+
· → ◇ → ◈ → ◆ → ✦ → ◆ → ◈ → ◇
149+
```
150+
200ms interval, diamond twinkling effect
151+
152+
**Alternative spinner ideas:**
153+
```
154+
⠋ → ⠙ → ⠹ → ⠸ → ⠼ → ⠴ → ⠦ → ⠧ → ⠇ → ⠏ (braille dots)
155+
◐ → ◓ → ◑ → ◒ (quarter circles)
156+
▖ → ▘ → ▝ → ▗ (quadrants)
157+
⣾ → ⣽ → ⣻ → ⢿ → ⡿ → ⣟ → ⣯ → ⣷ (braille spinner)
158+
```
159+
160+
## Typography
161+
162+
### Headers
163+
- **Bold** for emphasis (proposal titles, headers)
164+
- Regular weight for body text
165+
- No italic (not always monospace-safe)
166+
167+
### Hierarchy
168+
1. **Bold + Color** - Primary headers (e.g., `📋 Proposal: Edit file`)
169+
2. **Color only** - Section labels (e.g., `File: /path/to/file`)
170+
3. **Gray** - Metadata, hints (e.g., "scroll up to see details")
171+
4. **Default** - Body content
172+
173+
## Layout Patterns
174+
175+
### Message Structure
176+
```
177+
◇ participant → envelope-kind
178+
Content indented 6 spaces
179+
Multiple lines maintain indent
180+
```
181+
182+
### Proposal Structure
183+
```
184+
◇ mew → mcp/proposal
185+
186+
╔╗ Proposal: Tool name
187+
File: /path/to/file
188+
Metadata...
189+
190+
╭───────────────────╮
191+
│ Diff or content │
192+
│ ... │
193+
╰───────────────────╯
194+
```
195+
196+
### Dialog Structure
197+
```
198+
╭────────────────────────────────────────╮
199+
│ participant → method (tool) │
200+
│ (scroll up to see proposal envelope) │
201+
│ 1=Yes │
202+
│ 2=Grant │
203+
│ 3=No │
204+
╰────────────────────────────────────────╯
205+
```
206+
207+
### Full-Width Elements
208+
```
209+
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
210+
◆ you →
211+
message content
212+
213+
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
214+
```
215+
216+
## Implementation Notes
217+
218+
- All visual elements should work in monospace terminals
219+
- Test with various terminal color schemes (light/dark)
220+
- Maintain consistent spacing (6-space indent for content)
221+
- Use theme system for customizable colors
222+
- Avoid Unicode characters that might not render in all terminals (stick to widely-supported sets)
223+
224+
## Future Considerations
225+
226+
- **Badges/Tags**: For message metadata (e.g., `[APPROVED]`, `[DENIED]`)
227+
- **Progress bars**: For long-running operations
228+
- **Trees/Hierarchies**: For file structures or nested data
229+
- **Tables**: For structured data display
230+
- **Graphs**: ASCII art graphs for metrics/stats

0 commit comments

Comments
 (0)