Skip to content

feat(ui): redesign Cockpit as a calm, consistent desktop app - #1

Merged
capjan merged 37 commits into
mainfrom
feat/v2-redesign
Nov 4, 2026
Merged

capjan merged 37 commits into
mainfrom
feat/v2-redesign

Conversation

@capjan

@capjan capjan commented Nov 4, 2026

Copy link
Copy Markdown
Owner

Rebuilds the UI as a calm, consistent desktop app and makes it report only what it can back up.

What changes

  • Pages: new Overview, Versions grouped by release channel, reworked Tools and Settings, and a pre-flight check. Detail drawers, an Install .NET sheet, an Add Tool sheet and a command palette.
  • Truthful status: support dates, end of life and the timeline come from the official release catalog. If it is unavailable, the status is shown as unknown. Placeholder sizes, dates and names are gone.
  • Safe changes: every removal, update and setup action asks first and shows the command, through a dialog or a /confirm page without JavaScript. Actions show a busy state. Several removals need one administrator approval on macOS.
  • Calm normal state: color marks only what needs attention, actions line up in one column, and all filters follow one model. Success appears as a short toast.
  • Design system: token-based stylesheet with six type sizes, three radii and semantic colors. Fluent UI is removed.
  • Colors: Cockpit, macOS, GitHub and Codex palettes in light and dark. The macOS style follows the system accent color.
  • Settings file: appearance and pre-flight choices live in settings.json, because the free port changes the browser origin on every launch.
  • Version: 0.2.0.

Testing

  • .NET tests, browser tests and the native smoke test.
  • New: a contrast test for all palettes, and screenshot comparisons for healthy, mixed and empty systems. Screenshots run on macOS in CI.

Not verified

  • The UI on Windows. CI covers build and smoke test there, and multiple removals still ask once per item.
  • Clean up with one password prompt and the refresh after a real .NET installer run have not been confirmed by hand.

capjan added 30 commits November 3, 2026 14:29
… every change

Support dates, end-of-life state and the timeline now come from the official
release metadata instead of fixed text, and an unavailable catalog is reported
as unknown. The ring, action list and navigation badge share one count.

Every change asks first through a shared dialog, with a /confirm page for
browsers without JavaScript, and shows a busy state while it runs. Preferences
move to a settings file because the free port changes the browser origin on
every launch, which also makes the pre-flight setting work for the first time.

The client script is split into modules, drawers render from server templates,
and placeholder package sizes, release dates and the fixed workspace name are
gone. The unused downloads section and the previews setting are removed.
…lter model

Versions and tools now use color only where something needs attention: a check
mark replaces the Latest tag, Remove stays neutral until hovered, and all row and
channel actions share one column. Drawers overlay the list instead of reflowing it.

Filters share one model everywhere: a segmented control for the main dimension,
toggle chips for extras, one search field, a result count and a reset, all on one
baseline. Sorting moves into its own menu.

The stylesheet is rewritten on tokens with six type sizes, three radii and
semantic colors that meet 4.5:1 in both themes, in cascade layers without
!important. Fluent UI is removed, because nothing used it beyond badges.
…idths

The Install .NET sheet filters on the server through links, script-only controls
stay hidden until the script has loaded, and the theme switch and pre-flight
choice are plain forms. Tables no longer scroll sideways down to 1024 px. Menus,
the palette and the drawers handle Escape, focus return and focus containment,
and the result message no longer repeats on reload.
Fixture pages render healthy, mixed and empty systems with a fixed date, and
Playwright compares them in both themes, at 1024 px and with overlays open. The
comparison runs on macOS in CI, where the baselines were created.

Also fixes the tools table scrolling sideways at 1100 px, which slipped into the
previous commit, and reduces the corner radii to the three tokens.
… from test feedback

The content starts next to the navigation and grows to 1600 px, navigation counts
share one column, and the overview ring shows the actions in proportion by severity.

The page looks again when the window regains focus or the install sheet closes, so
an installer finishing elsewhere shows up without polling. Success now appears as a
short toast with the changed row highlighted.

Installing a tool goes through the shared confirmation, which replaces the command
footers. No search result is singled out, channels in the install sheet collapse,
counts say when only the newest releases are listed, unsupported channels appear in
the timeline only when installed, and the inline search stays hidden with script.
Each removal used to start its own elevated process, so cleaning up asked for the
password once per item, and more for runtimes with several frameworks. On macOS all
removals now run in one elevated shell. Every item is attempted and a failure is
reported at the end.

The shown command now names every framework of a runtime, matching what runs.
…logos unframed

Below 960 px the page grid shared spare height with the navigation row, which made
it grow on short pages. Tool logos now appear without a tile or border.
Settings offers four palettes with a live preview, each for light and dark. They
override color roles only, so shape and spacing stay the same. The choice is kept in
the settings file and also works without JavaScript. A test holds every palette to
4.5:1 on the main pages in both themes, and screenshots cover them.
Cockpit reads the accent color from the macOS settings, because the CSS system color
depends on the browser. All eight choices have variants that meet 4.5:1 in light and
dark, and a changed color is picked up when the window regains focus.
…visible

Bars faded through opacity almost vanished on neutral palettes such as Codex. They
now use a tinted fill with a solid outline, and the Codex bar colors are stronger.
Fixtures gain a channel that is not installed, and refreshing baselines rewrites all
of them, because small differences otherwise stay below the comparison tolerance.
@capjan
capjan merged commit 2a290ef into main Nov 4, 2026
12 checks passed
@capjan
capjan deleted the feat/v2-redesign branch November 6, 2026 17:28
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