Skip to content

Add AppBrand, useBrandFavicon and the brand colour tokens - #2

Merged
MiniCodeMonkey merged 1 commit into
mainfrom
brand-mark
Sep 5, 2026
Merged

Add AppBrand, useBrandFavicon and the brand colour tokens#2
MiniCodeMonkey merged 1 commit into
mainfrom
brand-mark

Conversation

@MiniCodeMonkey

Copy link
Copy Markdown
Member

Summary

Gives every internal tool the shared pieces of a brand identity, without the package owning any brand itself.

  • BrandMark: a mark as shape data, so one definition renders the corner lockup and serialises to the tab favicon and static assets.
  • AppBrand: the sidebar lockup at fixed sizes (20px mark, 13.5px semibold name), router-agnostic through LinkComponent, with a compact mode for narrow rails.
  • useBrandFavicon: draws the mark as the favicon in the brand colour, follows the OS colour scheme, and takes an optional status pip knocked out of the tab background.
  • Brand tokens: --color-brand and --color-brand-soft map to --brand and --brand-soft, which each app declares in its own stylesheet. The package deliberately ships no value, so a tool without a brand colour renders a visible gap rather than the shared accent.

The rule this encodes: the brand colour is identity, not interaction. It goes on the mark, the favicon, the active nav rail and the touch icon. Buttons, links and focus rings stay on --accent in every tool.

Release

Merge, then npm version minor on main and push the tag. The five app PRs pin ^0.2.0 and stay red until v0.2.0 is on npm.

Consumers

Atlas, Bullpen, Chop Chop, Deployer and Recordkeeper each have a PR that adopts this. Design canvas with the marks, colours and the reasoning: https://claude.ai/code/artifact/9614014d-2cbd-4978-ac2f-2484bf7c6e88

All five lockups, light and dark

https://claude.ai/code/session_012VgdRpRf6d49xfAU1gPLCc

Every internal tool gets one flat brand colour and one silhouette mark.
The package now owns the pieces the tools share:

- `BrandMark`: a mark as shape data, so one definition renders as the
  corner lockup and serialises to the tab favicon and static assets.
- `AppBrand`: the sidebar lockup at fixed sizes (20px mark, 13.5px
  name), router-agnostic via `LinkComponent`.
- `useBrandFavicon`: draws the mark as the favicon in the brand colour,
  follows the OS scheme, and takes an optional status pip.
- `--color-brand` / `--color-brand-soft` map to `--brand` /
  `--brand-soft`, which each app declares itself. The package ships no
  value on purpose: the brand colour is identity, not interaction, and
  buttons, links and focus rings stay on the shared accent.

Claude-Session: https://claude.ai/code/session_012VgdRpRf6d49xfAU1gPLCc
@MiniCodeMonkey
MiniCodeMonkey merged commit 27517ae into main Sep 5, 2026
1 check passed
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