Files
HostKeeper/docs/UI_TERMIUS_REFERENCE.md
T
swanadiva c215d68c81 refactor: flatten docs/ — move V2 docs from docs/v2/ to docs/
- git mv docs/v2/*.md docs/ (11 planning documents)
- Remove empty docs/v2/ directory
- Update all references: AGENTS.md, CHANGELOG.md, README.md, ARCHITECTURE.md
- Fix outdated repo tree in ARCHITECTURE.md to match actual structure
2026-07-07 12:04:59 +07:00

13 KiB

Hostkeeper V2 — Termius UI Reference

Status: V2 Planning Complete Last Updated: 2026-06-29 Purpose: Visual reference for replicating Termius-like UI in Hostkeeper V2.


1. Termius Design Analysis

Design Philosophy

Termius follows a dark-first, minimal, professional design language:

  • Dark backgrounds with muted colors
  • High contrast for active elements
  • Subtle hover states (no harsh highlights)
  • Generous padding and whitespace
  • Rounded corners (subtle, not bubbly)
  • Consistent iconography (Feather-style line icons)

Key Design Principles

  1. Content-first — Terminal/SFTP content takes maximum space
  2. Sidebar minimal — Thin sidebar, collapsible, icons + labels
  3. Tab bar compact — Small tab height, status dots, close buttons
  4. Forms clean — Labeled inputs, generous spacing, clear validation
  5. Modals focused — Centered, focused, one task at a time

2. Color Palette

Dark Theme (Default)

Element Color Hex
Background (main) Deep navy #0d1117
Surface (cards, sidebar) Slightly lighter #161b22
Surface hover Subtle highlight #1c2128
Surface active Selected state #21262d
Border Muted line #30363d
Text primary White #e6edf3
Text secondary Muted gray #8b949e
Text tertiary Dim #484f58
Accent (primary) Blue #58a6ff
Accent hover Lighter blue #79c0ff
Success Green #3fb950
Warning Yellow #d29922
Error Red #f85149
Info Blue #58a6ff

Light Theme

Element Color Hex
Background (main) White #ffffff
Surface Light gray #f6f8fa
Surface hover Slightly darker #eaeef2
Border Light line #d0d7de
Text primary Dark #1f2328
Text secondary Gray #656d76
Accent (primary) Blue #0969da

High Contrast Theme

Element Color Hex
Background Pure black #000000
Surface Near black #0a0a0a
Border Bright white #ffffff
Text primary Pure white #ffffff
Accent Bright blue #4da6ff

3. Typography

Font Stack

/* UI text */
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

/* Terminal / code */
font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;

Font Sizes

Element Size Weight
App title 16px 600 (semibold)
Section heading 14px 600 (semibold)
Body text 13px 400 (regular)
Small text 12px 400 (regular)
Caption 11px 400 (regular)
Terminal default 14px 400 (regular)
Terminal small 12px 400 (regular)

Line Heights

Element Line Height
Headings 1.3
Body 1.5
Terminal 1.2

4. Spacing System

Based on 4px grid:

Token Value Usage
--space-1 4px Tight spacing (icon gaps)
--space-2 8px Default spacing (inline elements)
--space-3 12px Component padding
--space-4 16px Section padding
--space-5 20px Card padding
--space-6 24px Section gaps
--space-8 32px Page padding

5. Component Specs

5.1 Sidebar

Width: 240px (default), min 180px, max 400px
Background: var(--surface)
Border-right: 1px solid var(--border)
Padding: 12px (top, bottom)

Sections:
  1. Header (h-9 = 36px)
     - App name (14px, semibold)
     - Collapse button (right-aligned)
  2. Search bar
     - Height: 32px
     - Border-radius: 6px
     - Background: var(--background)
     - Icon: search (left), clear (right)
     - Padding: 0 12px
  3. Group tree
     - Item height: 32px
     - Padding: 0 12px
     - Indent: 16px per level
     - Hover: var(--surface-hover)
     - Active: var(--surface-active)
     - Chevron icon: 14px, muted color
     - Color dot: 8px circle
     - Host count badge: 11px, muted text
  4. Quick actions
     - Fixed at bottom
     - Buttons: icon + label
     - Height: 32px

5.2 Tab Bar

Height: 36px
Background: var(--surface)
Border-bottom: 1px solid var(--border)

Tab:
  - Padding: 0 12px
  - Height: 36px
  - Border-right: 1px solid var(--border)
  - Hover: var(--surface-hover)
  - Active: var(--background)
  - Status dot: 6px circle, left of title
  - Title: 13px, max-width 120px, truncate
  - Close button: 14px, visible on hover, X icon
  - New tab button: + icon, 36px width

5.3 Host List

Background: var(--background)
Padding: 16px

Header:
  - Title: 20px, semibold
  - Actions row: filter chips + view toggle + add button

Host item (list view):
  - Height: 48px
  - Padding: 0 16px
  - Border-bottom: 1px solid var(--border)
  - Hover: var(--surface-hover)
  - Active: var(--surface-active)
  - Left: status dot (6px) + server icon (16px)
  - Center: name (14px, medium) + hostname (12px, muted)
  - Right: favorite star (16px) + last used (12px, muted)

Host item (grid view):
  - Card size: 200x120px
  - Border: 1px solid var(--border)
  - Border-radius: 8px
  - Padding: 12px
  - Hover: border-color changes to accent

5.4 Terminal

Background: #0d1117 (dark) or #ffffff (light)
Font: JetBrains Mono 14px
Cursor: block, blinking

Toolbar (top):
  - Height: 32px
  - Background: var(--surface)
  - Border-bottom: 1px solid var(--border)
  - Left: host name (14px, medium) + status dot
  - Right: reconnect button, snippet toggle, settings

Status bar (bottom):
  - Height: 24px
  - Background: var(--surface)
  - Border-top: 1px solid var(--border)
  - Left: connection status text (12px)
  - Right: cols x rows (12px, muted)

5.5 SFTP Browser

Background: var(--background)

Pane:
  - Width: 50% (side-by-side) or 100% (stacked)
  - Header: 32px, path breadcrumb
  - Content: file list (table)
  - Footer: 24px, transfer status

File list columns:
  - Name: flex-1, 13px
  - Size: 80px, right-aligned, 12px, muted
  - Date: 120px, 12px, muted
  - Permissions: 80px, 12px, monospace, muted

Row:
  - Height: 32px
  - Padding: 0 12px
  - Hover: var(--surface-hover)
  - Selected: var(--surface-active)
  - Folder icon: yellow
  - File icon: default color

5.6 Forms

Input:
  - Height: 36px
  - Border: 1px solid var(--border)
  - Border-radius: 6px
  - Padding: 0 12px
  - Font: 13px
  - Background: var(--background)
  - Focus: border-color: var(--accent)
  - Error: border-color: var(--error)

Label:
  - Font: 12px, medium
  - Color: var(--text-secondary)
  - Margin-bottom: 4px

Error message:
  - Font: 12px
  - Color: var(--error)
  - Margin-top: 4px

Select:
  - Same as input
  - Dropdown: 200px max-height, scrollable
  - Option: 32px height, hover highlight

Button (primary):
  - Height: 36px
  - Padding: 0 16px
  - Border-radius: 6px
  - Background: var(--accent)
  - Color: #ffffff
  - Font: 13px, 500 (medium)
  - Hover: brightness 1.1

Button (ghost):
  - Same dimensions
  - Background: transparent
  - Color: var(--text-primary)
  - Hover: var(--surface-hover)

5.7 Modals

Overlay: rgba(0, 0, 0, 0.5)
Container:
  - Width: 400px (default), max 560px
  - Background: var(--surface)
  - Border-radius: 12px
  - Border: 1px solid var(--border)
  - Shadow: 0 8px 32px rgba(0, 0, 0, 0.3)
  - Padding: 24px
  - Centered on screen

Title:
  - Font: 16px, semibold
  - Margin-bottom: 16px

Actions:
  - Right-aligned
  - Gap: 8px
  - Cancel (ghost) + Confirm (primary)

5.8 Toast Notifications

Position: bottom-right
Width: 360px
Height: auto (min 48px)
Background: var(--surface)
Border: 1px solid var(--border)
Border-radius: 8px
Shadow: 0 4px 12px rgba(0, 0, 0, 0.2)
Padding: 12px 16px

Left: icon (color-coded)
  - Success: green check
  - Error: red X
  - Warning: yellow triangle
  - Info: blue circle
Center: message (13px)
Right: close button (X)

Animation: slide in from right, fade out after 5s

6. Layout Breakpoints

Name Width Behavior
Mobile < 600px Sidebar collapsed, stacked panes, full-width terminal
Tablet 600-1024px Sidebar narrow (180px), stacked SFTP panes
Desktop > 1024px Sidebar normal (240px), side-by-side SFTP panes
Wide > 1440px Sidebar wider (300px), more content visible

7. Animations

Element Animation Duration
Sidebar toggle Width transition 200ms ease
Tab switch Background fade 150ms ease
Modal open Scale from 0.95 + fade 200ms ease
Modal close Fade out 150ms ease
Toast enter Slide from right 300ms ease
Toast exit Fade out 200ms ease
Hover states Background color 100ms ease
Button press Scale 0.98 100ms ease

8. Iconography

Icon set: Lucide React (MIT license, Feather-compatible)

Common icons:

Icon Usage
Server Host item, host form
Globe Network, hostname
Key SSH keys
Lock Vault, security
Folder Groups, directories
File Files, snippets
Terminal Terminal sessions
Search Search bar
Plus Add new item
Edit Edit item
Trash Delete item
Star Favorite
ChevronRight Tree expand
ChevronDown Tree collapse
X Close, clear
Check Success, confirm
AlertTriangle Warning
Info Information
Settings Settings screen
Download Download file
Upload Upload file
Refresh Refresh/reload
PanelLeftClose Collapse sidebar
PanelLeftOpen Expand sidebar

Icon sizes:

  • Inline text: 14px
  • Button icon: 16px
  • Navigation icon: 20px
  • Large feature icon: 48px

9. CSS Variables

:root {
    /* Colors - Dark theme */
    --bg-primary: #0d1117;
    --bg-secondary: #161b22;
    --bg-tertiary: #1c2128;
    --bg-active: #21262d;
    
    --border-primary: #30363d;
    --border-secondary: #21262d;
    
    --text-primary: #e6edf3;
    --text-secondary: #8b949e;
    --text-tertiary: #484f58;
    
    --accent-primary: #58a6ff;
    --accent-hover: #79c0ff;
    
    --success: #3fb950;
    --warning: #d29922;
    --error: #f85149;
    --info: #58a6ff;
    
    /* Spacing */
    --space-1: 4px;
    --space-2: 8px;
    --space-3: 12px;
    --space-4: 16px;
    --space-5: 20px;
    --space-6: 24px;
    --space-8: 32px;
    
    /* Border radius */
    --radius-sm: 4px;
    --radius-md: 6px;
    --radius-lg: 8px;
    --radius-xl: 12px;
    
    /* Shadows */
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
    --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.3);
    --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.4);
    
    /* Transitions */
    --transition-fast: 100ms ease;
    --transition-normal: 200ms ease;
    --transition-slow: 300ms ease;
    
    /* Typography */
    --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
    
    --text-xs: 11px;
    --text-sm: 12px;
    --text-base: 13px;
    --text-lg: 14px;
    --text-xl: 16px;
    --text-2xl: 20px;
    
    /* Layout */
    --sidebar-width: 240px;
    --sidebar-min: 180px;
    --sidebar-max: 400px;
    --tab-height: 36px;
    --status-height: 24px;
    --toolbar-height: 32px;
}

/* Light theme override */
[data-theme="light"] {
    --bg-primary: #ffffff;
    --bg-secondary: #f6f8fa;
    --bg-tertiary: #eaeef2;
    --bg-active: #d0d7de;
    
    --border-primary: #d0d7de;
    --border-secondary: #eaeef2;
    
    --text-primary: #1f2328;
    --text-secondary: #656d76;
    --text-tertiary: #8c959f;
    
    --accent-primary: #0969da;
    --accent-hover: #0550ae;
    
    --success: #1a7f37;
    --warning: #9a6700;
    --error: #cf222e;
    --info: #0969da;
}

/* High contrast theme override */
[data-theme="high-contrast"] {
    --bg-primary: #000000;
    --bg-secondary: #0a0a0a;
    --bg-tertiary: #141414;
    --bg-active: #1a1a1a;
    
    --border-primary: #ffffff;
    --border-secondary: #666666;
    
    --text-primary: #ffffff;
    --text-secondary: #cccccc;
    --text-tertiary: #888888;
    
    --accent-primary: #4da6ff;
    --accent-hover: #80c8ff;
}

10. Responsive Behavior

Mobile (< 600px)

  • Sidebar: collapsed by default, hamburger menu to open
  • SFTP: stacked panes (one at a time)
  • Terminal: full-width, custom keyboard toolbar
  • Forms: full-width inputs
  • Modals: full-width bottom sheet

Tablet (600-1024px)

  • Sidebar: narrow (180px), icons + truncated labels
  • SFTP: stacked or side-by-side (user choice)
  • Terminal: normal width
  • Forms: two-column where possible

Desktop (> 1024px)

  • Sidebar: normal (240px)
  • SFTP: side-by-side panes
  • Terminal: normal
  • Everything as designed

Wide (> 1440px)

  • Sidebar: wider (300px) or user-resized
  • SFTP: side-by-side with more space
  • Terminal: extra wide
  • Settings: side navigation visible