Skip to content

fix(web-ui): draw the server mark as solid rack units - #3173

Merged
bobleer merged 1 commit into
GCWing:mainfrom
bobleer:lwb/server-mark-solid-rack-units
Sep 21, 2026
Merged

bobleer merged 1 commit into
GCWing:mainfrom
bobleer:lwb/server-mark-solid-rack-units

Conversation

@bobleer

@bobleer bobleer commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

The mark a headless (CLI) host draws was the one mark out of family in a device list: hollow where every system beside it is a solid logo, and 13x10px of ink where the Apple, Tux and HarmonyOS marks draw 13x16 and the Windows mark 13x13. The same shape is masked behind the device card's 2:1 artwork, so both carriers change together.

It is now drawn as the machine instead: three rack units on the family's own 24-unit grid, each unit's status light punched out as negative space, in the same solid ink and the same view box as the Windows mark.

Fixes # (none - no issue filed)

Type and Areas

Type: Fix / UI/UX

Areas: web UI (shared device system marks, device card artwork)

Motivation / Impact

Measured at the sizes the product actually uses (a 16px slot in the desktop list, trigger and account device card; 20px and 22px in mobile web):

ink before ink after
server 13.0 x 10.1 px, hollow outline, 3 rows of chassis + slots 13.0 x 13.0 px, solid
Apple / Tux / HarmonyOS 13.0 x 16.0 px, solid unchanged
Windows 13.0 x 13.0 px, solid unchanged

Every mark in the table renders at one width, so the box the server mark was given (91.4844 x 112.3082) normalised its width while leaving its landscape ink only 10px tall. The mark was also a stroked chassis: at 16px the unit dividers and status lights each landed on about half a pixel.

What changes:

  • src/shared/device-system/deviceSystemMarks.ts draws the server as three rounded units (24 wide, 6 tall, 3 apart, radius 1.5) with a 1.5-radius light punched out at x=18.6 in each, in the Windows mark's box. The file's header records what the mark is, that it is this product's own drawing, and why it is deliberately not the artwork's outline rack.
  • The mark stays one shape shared by the desktop shell and mobile web, so all four of its call sites move together: the footer trigger, the attached device list, the account panel's device cards, and mobile web's devices page and compact device rows. No caller changed; they keep their own sizes and colours.
  • assets/server.svg masks the same shape on the same grid, with the ink centred in its box, and NavPanel.scss sizes the 2:1 artwork slot 30% / 24:29.4629 instead of 38.11849% / 91.484375:70.7421875. A portrait stack takes less width and more height than the landscape laptop silhouettes beside it, at the same weight.

The status light is kept on purpose: three plain bars read as a generic list or layers icon at 13px, and the light is what makes the drawing a machine. It carries no live state.

The mark table's other entries, deviceSystemKeyFromOs, and the artwork-to-mark map are untouched. No persisted shape, command, wire contract or CSS token changes.

Verification

web UI:

  • pnpm run check:web - exit 0 (Appearance contract, theme color and theme visual governance, type-check)
  • pnpm --dir src/web-ui run test:run src/app/components/NavPanel - 32 files, 186 tests pass
  • pnpm --dir src/web-ui run test:run src/app/components/RemoteConnectDialog - 17 files, 153 tests pass
  • pnpm --dir src/web-ui run test:run src/infrastructure/design-system/IconUsageIntegration.test.tsx src/app/startup/startupPreload.test.ts - 17 tests pass
  • pnpm --dir src/web-ui run icons:check - exit 0

mobile web:

  • pnpm run type-check:mobile-web - exit 0
  • pnpm run build:mobile-web and the built bundle was checked for the new path data and for absence of the old one - both as expected
  • pnpm --dir src/mobile-web run test:device-compatibility - 12 tests pass

repository:

  • pnpm run check:repo-hygiene - exit 0
  • node scripts/check-git-object-sizes.mjs --base upstream/main --head HEAD - exit 0

Not verified: no real device, real Relay session or real browser pass was run for this change; it is a pure vector asset and geometry change, and the evidence above is the built bundle, the DOM tests and rendered comparisons at the product's own slot sizes.

Remote scenarios

  • Remote workspace: unaffected. No desktop command, registry row or transport path is touched.
  • Remote control (mobile web): shares the same mark table, so the mark changes there by construction; verified through its type-check, its production build and its device-list tests, not on hardware.
  • Peer Device Mode: unaffected. The mark is presentation over facts the shell already has; no host-invoke path or capability advertisement changes.
  • Detached Dispatch: unaffected.

Reviewer Notes

  • The new path is one d with opposite winding on the light circles, so the holes render under the default nonzero fill; renderers that ignore winding would paint three solid bars.
  • The box is 0 -2.7315 24 29.4629, character for character the Windows mark's box, so the two marks take the same room and the same optical correction (0, measured: the stack is symmetric about its box centre).
  • The Linux mark's licence note is unchanged; the server mark is this product's own drawing, so nothing new enters THIRD_PARTY_NOTICES.md.
  • The device card's artwork is now a portrait stack where every other artwork there is a landscape machine. If reviewers prefer the card to keep a landscape subject, only assets/server.svg and the two numbers in NavPanel.scss need to change; the row mark does not depend on them.
  • Before/after renders at the product's slot sizes were produced locally and are not attached: the compare image is available at .openbitfun/tmp/server-mark-before-after.png in the author's workspace and can be dragged into this PR.

Checklist

  • This PR is focused and does not include secrets, temporary prompts, generated scratch files, or unrelated artifacts.
  • Relevant verification is recorded above, or skipped checks are explained.
  • AI-assisted work: this change was written with an AI agent and is fully tested at the level recorded above.

The row-sized server mark was traced from the card artwork's outline rack, and
it read as the one mark out of family: hollow where every system beside it is a
solid logo, 13x10px of ink where the Apple, Tux and HarmonyOS marks draw 13x16
and the Windows mark 13x13. A device list is a row of those logos, so the
server row looked lighter and smaller than the machines around it.

Draw the machine instead: three rack units on the family's own 24-unit grid,
each unit's status light punched out as negative space, in the same solid ink
and the same view box as the Windows mark, so the mark takes the same room in a
row. It renders 13x13px at the 16px slot the device list, the footer trigger and
the account device card give it, and scales by the same rule at the mobile web
sizes of 20px and 22px.

The card artwork masks the same shape, so server.svg is redrawn on the same grid
with its ink centred in the box, and the 2:1 artwork slot sizes it 30% wide by
24:29.4629 instead of the landscape 38.11849% by 91.484375:70.7421875: a portrait
stack carries the weight the landscape laptop silhouettes carry beside it. The
mark table's other entries, the resolver and the artwork-to-mark map are
untouched.

Co-authored-by: bitfun-ai <318544290+bitfun-ai@users.noreply.github.com>
@bobleer
bobleer merged commit 3756f38 into GCWing:main Sep 21, 2026
13 checks passed
@bobleer
bobleer deleted the lwb/server-mark-solid-rack-units branch September 24, 2026 08:19
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