Skip to content

feat: Rigging Yard theme, usage panels, and macOS liquid glass - #40

Merged
johnnyhuy merged 5 commits into
mainfrom
feat/brand-rigging-yard-and-usage
Aug 18, 2026
Merged

feat: Rigging Yard theme, usage panels, and macOS liquid glass#40
johnnyhuy merged 5 commits into
mainfrom
feat/brand-rigging-yard-and-usage

Conversation

@johnnyhuy

Copy link
Copy Markdown
Contributor

Summary

  • Brand & theme (Rigging Yard). New Hoist mark, full app icon set (.icns/.ico/.png/icons/), and a rebrand of the design tokens: warm graphite canvas (#121214), safety-orange accent (#f06a3c), Manrope typography, plus 9 swappable colorways via [data-theme] (signal/amber/oxide/safety/cobalt/teal/plum/coral/lime). Brand gallery lives at docs/brand/.
  • Harness & provider usage. New src/main/usage/ module wires harness subscription windows (Claude Code OAuth credentials via Keychain/file, refreshes expired tokens, parses limits[]; Codex reads ~/.codex/auth.json and queries chatgpt.com/backend-api/wham/usage) and provider credits (OpenRouter auth/key, DeepSeek user/balance). Surfaces in the right rail as HarnessUsageOverview + per-request UsagePanel with usage bars and reset countdowns. Behind new IPC channel usage:run (preload type added).
  • macOS liquid glass. electron-liquid-glass enables native vibrancy on the transparent main window, with icon wiring (app.setName('Hoist'), dock icon, BrowserWindow.icon) and a graceful fallback on non-darwin platforms. Builder now emits platform-specific icons (icon.icon/, icon.icns, icon.ico, build/icons/).
  • Renderer wiring. Token swap, new .hoist-usage-* CSS, transparent background under html[data-platform='darwin'], dev theme picker hook.

Consequences

  • electron-liquid-glass@^1.1.1 is a runtime dependency; macOS-only effect, no-op elsewhere.
  • Renderer CSS tokens are renamed to a Rigging Yard palette — if anyone has downstream overrides pinned to the old Knox-like blue, they will need updating.
  • New IPC channel usage:run is additive; no existing channels changed.
  • Builder now requires build/icon.icon/icon.json source tree to be checked in (it is).

Testing

  • npm run lint — clean
  • npm run typecheck — clean (both tsconfig.node.json and tsconfig.json)
  • npm run test:unit — all 36 unit tests pass (doctor, versions, secrets, homebrew detection, install methods)
  • Manual: app launches under npm run dev, library surface mounts, usage meters render against a dev Claude Code credential.

@johnnyhuy
johnnyhuy enabled auto-merge (squash) August 18, 2026 12:40
@socket-security

socket-security Bot commented Aug 18, 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
Addedelectron-liquid-glass@​1.1.17410010084100

View full report

Adds the native macOS liquid glass addon used by the main window to
apply system window vibrancy under the transparent pane.

Declared in optionalDependencies because the package has "os": ["darwin"]
and would otherwise fail `npm ci` on Linux/Windows CI runners. The
runtime use is dynamic-imported (see src/main/index.ts) so the package
is only loaded on macOS.
- Adds the Hoist hook + housing mark (SVG, icns, ico, PNGs at all sizes
  electron-builder needs for mac/win/linux bundle packaging) under build/.
- Adds docs/brand/ — reference mark, design tokens, and a sandbox HTML
  page for visual review of the brand at rest.
- Points src/renderer/public/icon.svg at the legacy rounded variant so
  the in-renderer chrome still resolves when no app icon is loaded.
- Replaces the 1Password-inspired 'Knox' palette with 'Rigging Yard':
  warm cream on graphite, safety-orange signal accent, mint/sky/danger
  status colors. Swaps Inter for Manrope.
- Adds a small dev-only theme picker that flips the accent through
  nine colorways (data-theme on <html>) so reviewers can compare
  variants without rebuilding.
- Wires icon paths into electron-builder.yml for all three platforms.
Adds a usage layer that surfaces subscription-window burn and remaining
credits directly in the app, so users can see at a glance whether
their harnesses and provider keys still have headroom.

Harness side (reads the existing OAuth credentials, never asks for new
ones):
- Claude Code: resolves credentials from env / Keychain /
  ~/.claude/.credentials.json; refreshes via Anthropic's token
  endpoint on expiry; calls /api/oauth/usage and maps the limits[]
  (and the legacy five_hour / seven_day_* buckets) to session and
  weekly windows; surfaces extra_usage credits when enabled.
- Codex: reads ~/.codex/auth.json, calls chatgpt.com/backend-api/
  wham/usage, maps primary_window / secondary_window to a 5h session
  and a weekly window, surfaces plan_type and credits.

Provider side (BYOK keys already in the vault):
- OpenRouter: GET /api/v1/auth/key → limit / limit_remaining / usage.
- DeepSeek: GET /user/balance → balance_infos[0].total_balance.
- Other providers return 'unavailable' cleanly rather than throwing.

Wired end-to-end:
- src/shared/channels.ts: usageRun channel.
- src/main/ipc.ts: usageRun handler pulls API keys from the active
  secret backend when the source is a provider.
- src/preload: typed UsageRequest/UsageResult on window.hoist.usage.run.
- src/renderer/App.tsx: HarnessUsageOverview on the Watchtower rail
  (live, auto-refresh on open), and a UsagePanel on the harness and
  key detail rails. Each renders window-burn bars (turn red at 90%),
  reset times, plan badge, and credits line.
Makes the macOS window transparent and applies the system liquid glass
effect so the OS vibrancy reads through the renderer panes (top bar,
sidebar, detail rail).

- app.setName('Hoist') so the menu bar shows the brand, not the binary.
- BrowserWindow: transparent: true on darwin, dark background elsewhere.
  backgroundColor is #00000000 on darwin so the glass is the surface.
- App icon loaded from build/icon.png; dock icon set in dev too.
- HOIST_DEV_URL env var lets the dev script target a non-default Vite
  port without changing the binary.
- After did-finish-load, dynamically imports electron-liquid-glass and
  calls addView with a 12px corner radius and a tinted overlay
  (#12121459). The dynamic import + ambient type declaration in
  src/main/types/electron-liquid-glass.d.ts keep the package optional
  (it's darwin-only and not installed on Linux/Windows CI). If the
  addon fails to attach (older macOS, dev sandbox, or non-darwin), the
  window stays transparent and the CSS pane translucency still reads
  correctly.
@johnnyhuy
johnnyhuy force-pushed the feat/brand-rigging-yard-and-usage branch from 17dd1b8 to a39af76 Compare August 18, 2026 12:53
@johnnyhuy
johnnyhuy merged commit 4511f7c into main Aug 18, 2026
7 checks passed
@johnnyhuy
johnnyhuy deleted the feat/brand-rigging-yard-and-usage branch August 18, 2026 12:56
@github-actions github-actions Bot mentioned this pull request Aug 18, 2026
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