Skip to content

project identity

Route-selected gateway/project identity rendered through one shared icon component and admin-only catalog picker.

The pathname selects identity. /projects renders the gateway projection from the authorized catalog; /p/<id>/ selects only that id's catalog row. The board projection is the compatibility/direct-serving fallback, never a last-loaded or session-local cache. While the probes are still PENDING the selection is unresolved — it yields no identity at all: in-page marks render their neutral default, and the tab head stays unwritten (side-nav) — a default-mark claim is never minted as if it were an answer. A DENIED catalog is an answer: a project guest may use its authorized board identity, and a still-locked scope resolves to its anonymous identity — the URL id plus the default mark, all a guest is entitled to see — but receives no fleet data or management control.

IdentityIcon and IdentityPicker are the one renderer and chooser over icon presets. The renderer supplies every swatch, row mark, rail chip, and favicon. The chooser keeps the local presets as featured choices and restores the established broad Iconify namespace through a compact searchable, source-filtered browser; its results use native radio semantics with accessible names, keyboard movement, theme tokens, and a narrow responsive grid. On the admin Projects face, both project and gateway identity use the same quiet disclosure: a compact current-icon preview beside one familiar edit button, with every full chooser absent until explicitly opened and closed again after a successful choice. Project disclosure lives inside its existing setup/details drawer; gateway disclosure lives in the page's low-priority settings/details area. Both call the host's structured writes.

Every visible projection consumes the selected resolved identity: global branding and tab metadata use the gateway; project rows, switcher rows, scoped current-project mark, tab metadata, session header, and graph brand use the scoped project. A catalog refresh changes those projections live without copying icon state into a route or browser preference. The project switcher renders each catalog project's identity in one fixed mark slot before its name and renders the catalog gateway identity for its global Projects row; locks and the current-project check remain independent trailing/adjacent status projections.