9.3 KiB
TUI v2 Mockup Gap Audit (2026-03-02)
Status: Active
Scope: visual and interaction parity between UI_mockups/PNG/*.png and current Textual TUI v2 runtime
Sources Compared
- Mockups:
UI_mockups/PNG/UI Board.pngUI_mockups/PNG/Password Board.pngUI_mockups/PNG/Stored Password Board.pngUI_mockups/PNG/Note Board.pngUI_mockups/PNG/2FA Board.pngUI_mockups/PNG/BIP-39 Seed Board.pngUI_mockups/PNG/SSH Board.pngUI_mockups/PNG/PGP Board.pngUI_mockups/PNG/Nostr Board.png
- Current v2 evidence:
artifacts/ui_eval/audit_20260302/state_dump.txt- current code path:
src/seedpass/tui_v2/app.py - user runtime screenshot (provided in thread)
- Mockup size baseline:
- all mockups are
1854x1080(identify UI_mockups/PNG/*.png)
Executive Status
Overall parity to mockup direction is partial and not release-grade for UI fidelity.
Estimated alignment:
- Layout shell parity: ~65%
- Interaction model parity: ~55%
- Board visual/content parity: ~70%
- Responsive behavior parity: ~45%
Main blockers:
- Inspector is effectively always populated because the first row auto-selects on render.
- Left navigation is not a real hierarchical tree of fingerprints -> managed accounts.
- Header/footer rhythm and panel proportions do not match mockup geometry.
- Dense table readability is limited by current spacing and border treatment.
Confirmed Mismatches
1) Inspector Lifecycle and Context Awareness
Mockup expectation:
- Lower board is contextual and meaningfully state-driven.
- Empty states should appear only when no relevant item is selected.
- Panel emphasis should shift by active context (entry type, mode, and selection).
Current behavior:
- Initial render auto-selects first entry (
Selected: #0 AIIT) so inspector loads immediately. - Side/notes panel is persistently present in normal layout.
- Link/secret areas are rendered as static regions with status text.
Evidence:
artifacts/ui_eval/audit_20260302/state_dump.txt:6artifacts/ui_eval/audit_20260302/state_dump.txt:35artifacts/ui_eval/audit_20260302/state_dump.txt:48artifacts/ui_eval/audit_20260302/state_dump.txt:58src/seedpass/tui_v2/app.py:1134
Gap severity: High
2) Left Tree Hierarchy Depth
Mockup expectation:
- A clear multi-level tree with top-level seeds/fingerprints and child managed accounts.
- Expand/collapse semantics and active branch clarity.
- Tree as a primary navigation rail, not only summary text.
Current behavior:
- Left pane prints a profile list block with pseudo-tree glyphs.
- No concrete managed-account child nodes tied to each fingerprint branch.
- Branch semantics are visually ambiguous (single selected marker plus list lines).
Evidence:
artifacts/ui_eval/audit_20260302/state_dump.txt:15artifacts/ui_eval/audit_20260302/state_dump.txt:17artifacts/ui_eval/audit_20260302/state_dump.txt:18src/seedpass/tui_v2/app.py:961
Gap severity: High
3) Header and Footer Structure
Mockup expectation:
- Top ribbon packs operational status into one dense strip: fingerprint, managed users, entries, filter, sync.
- Bottom strip is simple operator actions with high scanability.
Current behavior:
- Top status details are split across multiple lines in the left pane, not in a single dense ribbon.
- Bottom action strip is text-heavy and wraps into long hint sequences.
- Geometry and spacing diverge from the mockup’s rigid row framing.
Evidence:
artifacts/ui_eval/audit_20260302/state_dump.txt:3artifacts/ui_eval/audit_20260302/state_dump.txt:22artifacts/ui_eval/audit_20260302/state_dump.txt:30src/seedpass/tui_v2/app.py:724
Gap severity: Medium
4) Entry Grid Density and Legibility
Mockup expectation:
- Table columns are tight but consistently aligned.
- Dense data view still preserves strong hierarchy and line separation.
- Search bar and table header rows are visually integrated.
Current behavior:
- Current grid is compact but still visually looser than the mockups.
- Spacing and separators in real terminal output can feel sparse or noisy depending on viewport.
- User screenshot shows empty-looking cells and over-emphasized border blocks.
Evidence:
artifacts/ui_eval/audit_20260302/state_dump.txt:27src/seedpass/tui_v2/app.py:1025- user screenshot attached in thread (2256x1504 display; large pane but low information density)
Gap severity: Medium
5) Kind-Specific Inspector Boards
Mockup expectation:
- Each kind board follows a common skeleton with strong field blocks.
- Notes/tags side rail appears as a stable right section.
- Sensitive boards present explicit reveal/copy/export affordances in a consistent row.
Current behavior:
- Most board templates are present and functionally wired (
password,stored_password,document,totp,seed,ssh,pgp,nostr). - Boards are currently text-driven; they do not fully match mockup panel geometry and control placement.
- QR/reveal behavior is command-first; visual call-to-action is weaker than mockup buttons.
Evidence:
artifacts/ui_eval/audit_20260302/state_dump.txt:62artifacts/ui_eval/audit_20260302/state_dump.txt:149artifacts/ui_eval/audit_20260302/state_dump.txt:178artifacts/ui_eval/audit_20260302/state_dump.txt:206artifacts/ui_eval/audit_20260302/state_dump.txt:265src/seedpass/tui_v2/app.py:1244
Gap severity: Medium
6) Responsive Behavior and Screen Fit
Mockup expectation:
- Stable composition at standard laptop and ultrawide sizes.
- Scroll and panel collapse rules that preserve operator context.
Current behavior:
- Compact mode triggers at terminal width < 150 columns (
_compact_layout). - In compact mode, side panel is hidden and notes/tags move inline.
- This is useful fallback behavior, but breakpoint and proportion strategy still need tuning for large/high-DPI terminals.
Evidence:
src/seedpass/tui_v2/app.py:855artifacts/ui_eval/audit_20260302/state_dump.txt:294artifacts/ui_eval/audit_20260302/state_dump.txt:334
Gap severity: Medium
7) Reveal/QR UX (as perceived by user)
Mockup expectation:
- Reveal and QR should feel immediate and obvious from board controls.
- Sensitive panel state should communicate exactly what happened.
Current behavior:
- Implementation path exists for reveal and QR and includes confirm gates.
- User-reported behavior indicates reveal key not producing expected visual result in their install.
- This suggests a runtime/render/state issue still exists in at least one install path.
Evidence:
src/seedpass/tui_v2/app.py:311src/seedpass/tui_v2/app.py:312src/seedpass/tui_v2/app.py:2026- user screenshot and report in thread
Gap severity: High (because user-visible and trust-impacting)
Detailed Board-by-Board Comparison
UI Board
Matched:
- Three-zone concept exists (left nav, table, inspector zone).
- Global/search/filter controls exist.
Missing/Off:
- Tree depth and true hierarchy behavior.
- Dense top ribbon shape.
- Footer action strip simplicity and visual weight.
- Inspector should not pre-populate by default.
Password / Stored Password
Matched:
- Core fields and actions exist.
- Notes/tags are available.
Missing/Off:
- Geometry differs from mockup button block layout.
- Visual CTA buttons are weaker than mockup-style controls.
- Sensitive feedback placement not as clear.
Note
Matched:
- Note content and tags/notes context are present.
Missing/Off:
- Scroll area framing and right-side tag rail are less structured than mockup.
- Edit affordance placement differs.
2FA
Matched:
- 2FA board, code/secret/QR paths implemented.
Missing/Off:
- Direct board-level action clarity (copy code/url) is less visual.
- Timing/code emphasis differs from mockup board design.
BIP-39 Seed, SSH, PGP, Nostr
Matched:
- Per-kind data and reveal/export/copy action paths exist.
Missing/Off:
- Board framing and button hierarchy diverge.
- QR and reveal state transitions are too subtle visually.
Prioritized Fix Queue (Before More Feature Surface Area)
- Stop auto-selecting first row on initial render; show neutral inspector empty state.
- Build real left hierarchical tree model:
- root fingerprint nodes
- child managed account nodes
- clear active branch highlighting
- Rework top ribbon into one dense status row.
- Simplify bottom action strip to mockup-style short labels.
- Strengthen inspector context transitions:
- hidden when no selection
- board-specific widgets when selected
- clearer sensitive panel transitions for
v/g
- Tune spacing/density for large displays:
- tighter vertical padding
- narrower borders
- reduced label verbosity
Font Size and Density Note
Terminal font size is controlled by the terminal emulator, not by Textual app CSS in a reliable cross-terminal way.
To fit more content on screen in-app, we should treat this as a density problem:
- reduce widget padding/margins
- shorten labels
- shrink fixed panel heights
- increase rows per table viewport
- collapse secondary hints behind
?/help overlay
Recommendation for Next Implementation Slice
Do not add new feature surface first.
Start with UX parity slice focused on:
- selection/inspector lifecycle
- real left tree hierarchy
- density and strip simplification
Then re-run screenshot audit against all 9 mockups and update this doc with pass/fail per board.