web: a UI sweep across the rail, dashboard, tables and fork !440

merged merged by cmc on 2026-09-20 04:53 UTC · krz/gitbay:web-ui-sweep into main

Discussion

cmc

A batch of web UI fixes.

Rail. Squares are 44px wide at every width (the 32px phone rule is gone) and glyphs 20px below 34rem, where eleven squares plus the mark no longer fit: explore, bookmarks, snippets, new repository, settings, admin and log out move into a More disclosure, leaving dashboard, search, notifications, More and the account cell. Each square comes from one raillink partial; the menu repeats those destinations and the two lists are kept in step by hand. TestRailIconsAreLabelled checks the partial and each call site rather than counting inline markup.

Snippets reach the rail. The profile-page link stays.

/new creates an organization as well as a repository. The form leaves the profile page; POST /new branches on the field and dispatches org create, which is what POST /{owner} already did.

Fork takes a destination. repo fork gains --owner, resolved by resolveNewRepoOwner — lifted out of repo create, so both check an owner the same way and an organization's fork is not counted against the user's quota. GET /{owner}/{repo}/fork renders a form with an owner select and a name field; the header button links to it and refusals render on it.

Dashboard. The pinned key reads above the list, the build dot is centred on its row (.pins .n was stretching an 8px dot to the top), a chip on the second row has its bottom border back (.pins li:last-child outranked the chip rule's shorthand), and the feed drops its state dot.

Tables. The SSH key and account tables keep each row on one line and scroll sideways in the .tablewrap they already had.

.pathbar .actions centres its items, so the · separators sit on the links' line.

Verified against a local instance: axe reports no new violations at 1440px or 375px on dashboard, /new, the fork page, /settings, /admin/users, a profile and a blob. Every rail target measures 44×48 on a phone. TestForkWeb and TestOrgLifecycleWeb pass locally; the rest is CI's.

Two pre-existing findings this surfaced are fixed in the second commit: the action column on the SSH key, PGP key and org member tables carries a visually hidden name, so /settings reports no violations; and the skip link is a full-size target rather than 40px tall.

Two more are left alone, both older than this branch: the activity graph on a profile is a scrollable region without keyboard access, and the notification checkboxes on /settings are 16x16.