Real-usage feedback from driving the shipped console (v0.1) live. The approver works
(propose → PIN → approve → broadcast, verified end-to-end), but the UX is developer-facing.
This issue collects the v2 direction. The console is already ratatui, so colors, borders,
styled text and a frame-loop animation are incremental — not a rewrite.
1. The card shows raw data, not human data (quick wins)
amount_wei: 10000000000000000 is unreadable — show 0.01 ETH (keep raw wei under a "details" toggle).
to: is a bare 0x… — show a shortened/checksummed address, room for a label later.
- Hide dev fields for a plain send:
decoded_call: (none) and raw_data: 0x are noise; surface them only when they carry meaning (a contract call / decoded approval).
2. Skip the redundant select step for a single item
When the queue has exactly one pending item, auto-open its card instead of requiring the user to select it and press Enter. The Queue+Card two-pane layout is fine for many items; it's friction for the common case of one.
3. Visual redesign — branded, styled, minimal animation
Match the polish of TUIs like opencode / Hermes (clean frames, color, restrained motion). Use the website palette for brand consistency (from rustok-landing tokens):
| Role |
Hex |
| Background |
#0B0712 / deep #08050F |
| Frame borders |
#2A1C4D (soft) · #7A45CC / #9D5CFF (accent) |
| Text / ink |
#EDE7FF |
| Success / approve |
#16E0C3 (teal) |
| High-risk / warning |
#FFB454 (amber) |
| Danger / reject |
#FF6B6B |
Apply: purple frames, teal on the approve action / executed state, amber on HIGH RISK lines, red on reject. Keep it legible on any terminal (degrade gracefully to 16-color).
4. Animated transaction flow
For a pending tx, render it as two info blocks with a flowing arrow between them showing direction:
┌ From ─────────────┐ ┌ To ───────────────┐
│ your wallet │ ⟩⟩⟩⟩ │ 0x7099…79C8 │
│ 0x489F…9Fbb │ ▸▸▸▸▸▸ │ (recipient) │
│ balance: 0.99 ETH │ 0.01 ETH → │
└───────────────────┘ └───────────────────┘
The marquee arrows animate on the existing frame loop (FRAME≈250ms) — minimal motion, clear intent. High-risk (unlimited approve) can pulse the amber.
5. Persistent dashboard, not a one-shot approver (bigger direction)
Today the console exits on decision (exit code = outcome, invariant #7). Users expect to stay in the app: see balance, recent activity, and the pending queue, and approve without the window disappearing. This is a real product direction and pairs with the daemon + compose arc (a long-lived wallet service the console attaches to and survives across sessions) — see distribution plan §1.6. Scope this as its own slice; it changes the run model, not just styling.
Already done / related
Scope note
Items 1–2 are small, self-contained wins. 3–4 are a styling slice. 5 is a product-direction slice (daemon-mode). None block the current listing; this is the console repo's own roadmap.
Real-usage feedback from driving the shipped console (v0.1) live. The approver works
(propose → PIN → approve → broadcast, verified end-to-end), but the UX is developer-facing.
This issue collects the v2 direction. The console is already ratatui, so colors, borders,
styled text and a frame-loop animation are incremental — not a rewrite.
1. The card shows raw data, not human data (quick wins)
amount_wei: 10000000000000000is unreadable — show0.01 ETH(keep raw wei under a "details" toggle).to:is a bare0x…— show a shortened/checksummed address, room for a label later.decoded_call: (none)andraw_data: 0xare noise; surface them only when they carry meaning (a contract call / decoded approval).2. Skip the redundant select step for a single item
When the queue has exactly one pending item, auto-open its card instead of requiring the user to select it and press Enter. The Queue+Card two-pane layout is fine for many items; it's friction for the common case of one.
3. Visual redesign — branded, styled, minimal animation
Match the polish of TUIs like opencode / Hermes (clean frames, color, restrained motion). Use the website palette for brand consistency (from
rustok-landingtokens):#0B0712/ deep#08050F#2A1C4D(soft) ·#7A45CC/#9D5CFF(accent)#EDE7FF#16E0C3(teal)#FFB454(amber)#FF6B6BApply: purple frames, teal on the approve action / executed state, amber on
HIGH RISKlines, red on reject. Keep it legible on any terminal (degrade gracefully to 16-color).4. Animated transaction flow
For a pending tx, render it as two info blocks with a flowing arrow between them showing direction:
The marquee arrows animate on the existing frame loop (FRAME≈250ms) — minimal motion, clear intent. High-risk (unlimited approve) can pulse the amber.
5. Persistent dashboard, not a one-shot approver (bigger direction)
Today the console exits on decision (exit code = outcome, invariant #7). Users expect to stay in the app: see balance, recent activity, and the pending queue, and approve without the window disappearing. This is a real product direction and pairs with the daemon + compose arc (a long-lived wallet service the console attaches to and survives across sessions) — see distribution plan §1.6. Scope this as its own slice; it changes the run model, not just styling.
Already done / related
rustok-starthost launcher (auto-detects the running wallet container, execsrustok-console). To be formalized in the wallet image'sinstall.sh/install.ps1(distribution plan §1.5), so a normal user types one word.Scope note
Items 1–2 are small, self-contained wins. 3–4 are a styling slice. 5 is a product-direction slice (daemon-mode). None block the current listing; this is the console repo's own roadmap.