Mosaic Stack design · draft 1 · 2026-10-09
Identity

Work passes hand to hand. Only gated decisions reach you.

Mosaic Stack lets you declare a business, its projects and its roles. Agents in those roles carry the work end to end under the policy you declared. The brand stays quiet so the work is what you see: a precise blue for action, a warm accent for things that need you, and plain words.

The mark is Relay, the one you preferred. Two hooks pass a piece of work between them, the way messages pass between roles rather than between people (REQ-MSG-1). This draft redraws it on a 16-unit pixel grid so the slits between the hooks still show at favicon size.

Small sizes

The original draws its gaps from overlapping shapes about 2.8/56 units wide, which comes to 0.8 px at 16 px, so they blur away. The refined path keeps the silhouette and widens the slits to about 1.4 px at 16 px.

Original
Refined
48
32
16
48
16

Source: docs/design/brand/relay-refined.svg. One even-odd path, no strokes, no gradient. It is drawn in the palette's action color, or in the text color when it sits on action.

Wordmark and lockups

Mosaic Stack
mosaic

Manrope 800 for the name with tight tracking (−0.025em at display size). "Stack" steps down to 500 in the muted color. In product chrome the short form mosaic matches the command people type. Leave clear space around the mark equal to its slit-to-edge distance, about one eighth of its width.

Voice: calm precision

SayVikunja last read 14:21:07 (12 s ago).

NotEverything is up to date! 🎉

Sayrefused: tracker-starting. Vikunja has not answered the first poll yet. Try again after it does.

NotOops, something went wrong. Please try again later.

SayChoosing “1” authorizes git.push.protected on origin/refactor. Any other choice declines.

NotApprove? (Recommended!)

Name the thing, the state and the next step. Keep the system's own words: refusal codes, event kinds and task refs appear exactly as the bus records them, in mono.

Palettes

Dewey's ten palettes, each with Light, Dim and Dark. Choose one to apply it to this whole page. Harbor is the proposed default; the default palette and mode are still your call.

Type

28 / 800Inbox
20 / 800Tasks in project 32
16 / 700Push the reviewed commits?
14 / 400Running text and table cells sit at 13 to 14 px for density.
11 / 700 capsSection label
mono 12.5vikunja:32/48 · 7f3a91c2 · git.push.protected

Manrope (approved) for interface text. JetBrains Mono for anything a person might type or paste: ids, refs, actions, refusal codes and commands. Both come from Google Fonts with system fallbacks. Numbers in columns use tabular figures.

Icons

Drawn on a 24-unit grid with a 1.75 stroke and round joins, no fills. Each one names a section. Icons never carry state alone; state always has a word or glyph next to it.

Status vocabulary

Agent state (control board)
●working
◐waiting · shows Input needed: text
▲error
○offline · –idle · ?unknown
Decision class and routing
routine within-role logged
cross-role goes to the arbiter (delivery → pm, technical → cto)
gated goes to you
BLOCKING CLI inbox + Discord DM now; otherwise the 08:00 CT digest
Task markers
changed in Vikunja
not created by the stack
conflict
missing: moved not-found no-access
Feature status in this design
implemented in the repository now
in progress on an open queue row
planned in the PRD or a brief
proposed new in this design; needs a ruling