Skip to content

feat(ui): remix Hoist chrome in the 1Password / Knox direction - #22

Merged
johnnyhuy merged 4 commits into
mainfrom
ui/1password-remix
Aug 10, 2026
Merged

feat(ui): remix Hoist chrome in the 1Password / Knox direction#22
johnnyhuy merged 4 commits into
mainfrom
ui/1password-remix

Conversation

@johnnyhuy

Copy link
Copy Markdown
Contributor

Remix of Hoist's UI shell, borrowing directly from 1Password 8 (Knox design language). Mocked data only — IPC wiring is a follow-up so the visual redesign can be reviewed before behavior work.

What's in

Design tokens (styles/tokens.css)

  • Surface ladder: #1d1d21 canvas → #26262c#2f2f37#393943#43434f
  • Single brand blue #157bf3 used surgically (1Password accent)
  • Pill radius 9999px for primary CTAs
  • Card radius 12px, control 8px, tile 6px
  • Inter with font-feature-settings: 'calt', 'kern', 'liga', 'ss03'
  • No drop shadows anywhere; hairline borders only

Components (styles/components.css).btn, .input, .card, .badge, .kbd, .icon, plus pill + ghost + danger variants.

Layout (styles/layout.css) — 3-pane grid 232px 1fr 320px with breakpoints for narrower viewports.

Surfaces

  1. Harnesses — list rows with installed badges; right-rail shows status, binary, provider, gateway, and per-harness actions
  2. Provider keys — list rows with kind badge, env var, masked preview, last-probe time. + New key opens a 1Password-style New Item catalogue modal: pick from Anthropic / OpenAI / Azure / Vertex / Bedrock / Custom with monospace descriptor of each
  3. Gateway — searchable list, right-rail shows current gateway state + which harnesses are wired
  4. Watchtower — 6 stat cards (Keys stored / Valid / Invalid / Expiring / Reused / Harnesses outdated) + right-rail with recent probe history

Command palette (Cmd+K / Ctrl+K) — 13 fuzzy-matchable items, 4 categories (ACTION / GATEWAY / NAVIGATE / REVEAL), 80px kind badge on the left, hint on the right, footer with ↑↓ ↵ esc hints. Equivalent of 1Password's Ctrl+Shift+Space Quick Access.

What's not (yet)

  • IPC wiring to the real vaultList / harnessList / gatewayList / probeRun channels
  • Multi-field edit forms for Vertex (project + region), Bedrock (profile + region), Azure (endpoint + deployment + key) — currently the catalogue just picks a kind
  • Real apply-wiring flow with per-harness result rows
  • Real probe (the "12 min ago" timestamps are mocked)
  • Empty states, loading skeletons, error toasts

These are the obvious next pass once the visual baseline is approved.

Verification

  • npm run typecheck
  • npm run lint
  • npm run catalog:check
  • npm run test:extractor ✓ (10/10 URL cases)
  • npm run build ✓ (215 KB renderer JS, 16 KB CSS — gzipped 65 KB / 3.3 KB)
  • 6 screenshots captured against the running dev server:
    • Harnesses
    • Provider keys (with scope dropdown open)
    • New Item catalogue modal
    • Watchtower
    • Command palette (empty)
    • Command palette (filtered: "gateway")

Borrowing directly from 1Password 8: 3-pane vault chrome, hairline-
bordered surface ladder, single brand-blue accent, pill primary CTAs,
Inter with ss03 stylistic set enabled site-wide.

What changed:
- src/renderer/styles/tokens.css     — design tokens: surface ladder, single
                                          accent (#157bf3), pill radius, Inter
                                          w/ font-feature-settings ss03
- src/renderer/styles/components.css — .btn / .input / .card / .badge primitives
- src/renderer/styles/layout.css     — 3-pane shell (sidebar / main / right rail)
- src/renderer/App.tsx              — full rewrite: 3-pane shell with
                                          Harnesses / Provider keys / Gateway /
                                          Watchtower surfaces
- src/renderer/index.html           — Inter via rsms.me
- src/renderer/main.tsx              — load the new styles

Surfaces:
1. Harnesses    — installed-state rows with right-rail inspector
2. Provider keys — New Item catalogue modal (1Password item-catalogue pattern)
3. Gateway      — searchable list with placeholder warnings
4. Watchtower   — health grid (6 stat cards) + right-rail recent probes

Power:
- Cmd+K / Ctrl+K  → global command palette (Quick Access)
- 13 fuzzy-matchable items: install / probe / apply / navigate / reveal
- 80px-wide kind badges (ACTION, GATEWAY, NAVIGATE, REVEAL) per row

Mocked data for the screenshot — IPC wiring into the existing
vaultList / harnessList / gatewayList / probeRun channels is a
follow-up so the static UI can be reviewed first.
- npm install lucide-react
- src/renderer/App.tsx imports the 13 icons we use:
    Zap              - brand mark + sidebar Harnesses item + Claude Code row
    Search           - palette trigger + palette modal
    KeyRound         - sidebar Provider keys item
    Globe            - sidebar Gateway item + Gateway row
    ShieldCheck      - sidebar Watchtower item
    ChevronDown      - account caret + scope caret
    Check            - scope check + list row selected check
    X               - close buttons + danger actions (Uninstall / Delete)
    RotateCw         - Re-detect / Probe now
    Download         - Update
    Pencil           - Edit
    Terminal         - OpenCode row
    SquareTerminal   - Codex row
    Circle           - OpenAI row + OpenAI catalogue tile

- src/renderer/styles/layout.css: removed font-size rules on icons now
  they're real SVG elements, added display: inline-flex on every icon
  class so they align + accept color via currentColor.

Typecheck + lint + build all green.
@socket-security

socket-security Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedlucide-react@​1.28.0100100989680

View full report

Single source of truth for "what does Hoist look like and why?"
Pairs with docs/adr/ (decisions) and src/renderer/styles/* (tokens).

Sections:
1. Design intent — 5 principles + 4-source lineage (1Password Knox, Linear,
   Raycast, Claude Code /config)
2. Tokens — surface ladder, color, type (Inter w/ ss03), shape, spacing
3. Component catalogue — .btn / .card / .input / .badge / .kbd + Lucide
   icon mapping table
4. App shell architecture — 3-pane grid diagram + topbar / sidebar / main /
   detail rail sections
5. Surfaces — Harnesses, Provider keys (+ New Item catalogue), Gateway,
   Watchtower
6. Command palette — 13 items documented by kind
7. Status indicators — 3-color palette
8. Mocked vs real — table mapping each surface to its IPC todo
9. Adding to this design — how to add provider / surface / palette command /
   status color
10. Future directions — auto-lock, .env import, theme picker, multi-window
11. File map — everything relevant grouped
12. PR-review verification checklist — 11 items

Nothing in here changes code; it documents PR #22 and the surrounding
intent so future contributors can extend consistently.
Based on the design.pen review of the Hoist 1Password / Knox remix:

Tokens (src/renderer/styles/tokens.css):
- Add --surface-recessed (#0f0f12) — deeper than canvas, used for the
  icon-only rail backdrop and the terminal code block surface.
- Add --rail-width (56px) and --sidebar-width (232px) — the design
  explicitly chose a 56px rail for the Library surface (icon-only nav
  with a H vault mark + 5 icons + ?).
- Promote the status palette to 5 colors matching the design's harness
  state vocabulary:
      installed  → ok      (green  #2da44e)
      installing → info    (blue   #157bf3, reuses accent)
      available  → accent  (cyan   #3ec1f3)
      deprecated → merged  (purple #a371f7)
      failed     → bad     (red    #cf222e)
      warning    → warn    (orange #d97a00, unchanged)
  Each gets a paired -soft variant for muted backgrounds.

Badges (src/renderer/styles/components.css):
- Switch to filled treatment (the design's installed is a solid green
  pill, not an outline). New variants: badge-ok-faded, badge-info-faded,
  badge-accent-faded, badge-merged-faded, badge-bad-faded.
- New badge-info, badge-accent, badge-merged cover the 5 harness states.

Docs/design.md:
- New section for the rail + sidebar widths and the 5-status palette.
- New paragraphs summarizing the design's 5 shells, 3 surfaces,
  6-component grammar, and 4-card spec.
- Section 5.1 Harness → Library (chosen shell).
- New section Component grammar mapping the design's 6 reusable patterns
  to the codebase.
- Section 8 Status indicators now maps the 5 harness states to the new tokens.
- Section 13 verification checklist adds the rule: if the change adds a
  new state to the harness lifecycle, add the matching status token plus
  badge variant rather than reusing an existing one.
@johnnyhuy
johnnyhuy merged commit c02dd4b into main Aug 10, 2026
7 checks passed
@johnnyhuy
johnnyhuy deleted the ui/1password-remix branch August 10, 2026 06:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant