kebab-stackBrand & product system
v1.1.1

The way we build Kebabstack

Less work.
More confidence.

Help IT finish the job, understand what happens next and build the next useful automation. Every tool. Every screen. One clear system.

Standard 1.1.119 chapters · 111 rulesApp adoption is reviewed separately
01 / Remove work

Less to configure.
More to get done.

Reuse what we know. Pick sensible defaults. Automate repeated chores with a clear owner and a safe recovery path.

02 / Explain the next step

Show the action.
Name the responsibility.

Current state, next actor, real blocker. Keep supporting detail close without making it compete with the work.

03 / Earn trust

Evidence before
reassurance.

Saved is not always confirmed. Missing data is not a healthy result. Make uncertainty visible and useful.

What that feels like

Interactive design example
Assets / Sale · fictitious exampleNo live data or actions
SALE-0042

MacBook Pro · 14-inch

A clear outcome, without the noise.

Ready for handover
  1. 01 · Offer
  2. 02 · Invoice
  3. 03 · Paid
  4. 04 · Complete

IT · Next step

Record the physical handover

Payment and preparation are confirmed. Record the handover only after the device is given to the buyer.

Same visual language. Different evidence, responsibility and next action.

A target, with an honest migration path.

This standard sets the rules for new and revised work. Existing apps are reviewed in step two. Their current appearance or behavior is not automatically certified by this page.

See the review order and acceptance gates →

The complete system

Design + behavior

Reference · target tokens

Quiet visuals.
Clear decisions.

Warm paper, forest actions and restrained linework. The visual foundation supports the task instead of competing with it.

These are reference tokens for the next shared migration. The current runtime source remains hub/dist/tokens.css. The logo registry stays at version 1.0.0 with its approved geometry.
Warm paperbg · #f8f7f1 / #17201b
Work surfacesurface · #ffffff / #202b24
Primary textink · #24352e / #edf2ea
Secondary textsecondary · #53665a / #bdcbbf
Forest actionaccent · #255946 / #add4b9
Quiet emphasisaccent-soft · #edf4ed / #294635
Product marklogo · #77826b / #b5c2a7
Keyboard focusfocus · #b94a21 / #ffb38d

Each swatch lists light / dark values. Change Appearance to inspect the active palette. Sage identifies product marks; it is not a general-purpose small-text colour.

Type & hierarchy

UI sans · technical mono
PAGE TITLE · 32–40 / 1.15 · 550

Everything in its place.

SECTION · 24 / 1.2 · 550

Your next useful action

BODY · 16 / 1.6 · 400

Show what changed, who acts next and how to verify the result.

TECHNICAL METADATA · 12 / 1.5POLICY-042 · revision 3

Every colour has a job

ConfirmedNeeds attentionFailedAwaiting confirmationNot checked

Always pair colour with words. Never use an empty or neutral state to imply success.

Enter a complete email address, such as support@example.com.

Reference only: the value is read-only. Labels stay visible, the draft survives and the error explains the correction.

Rhythm & dimensions

FoundationReferencePurpose
Spacing4 / 8 / 12 / 16 / 24 / 32 / 48 / 64 pxGroup related work tightly; separate different decisions.
Radius8 px control · 16 px panelPills are for short statuses, not every action.
Width720 px reading · 1280 px work · 1600 px operationsWider pages need a real comparison task.
Controls44 px default · 36 px dense desktopKeep adequate spacing and accessible target size.
Motion120 / 180 / 240 msFeedback / state / panel. Reduced motion removes animation.
Layers0 / 10 / 20 / 30 / 40 / 50Base / sticky / menu / scrim / dialog / toast.
Accessible by construction, verified in context.

The checked token pairs meet their recorded contrast thresholds. Actual components still require keyboard, screen-reader, zoom and rendered-state review. Read the accessibility rules →

Visual catalogue · approved identity

The Kebabstack logo.

The coloured skewer identifies the suite. The sage line marks identify its individual tools. Both have one fixed source.

kebab-stack
Primary lockup · light background
kebab-stack
Dark background · light rod & lettering

The existing kebabstack.dev geometry and light wordmark are retained. The dark adaptation keeps the same proportions and four layer colours. “Kebabstack” is the written name; the visual wordmark reads “kebab-stack”, with a coloured hyphen and no final dot.

Mark, wordmark, app identity

Usage rules ↗

Suite mark

Website, suite sign-in and suite-level material. Preserve the 40 × 48 viewBox and the four coloured layers.

Light SVG ↓ · Dark SVG ↓
Kebabstack square favicon

Small square icon

The existing favicon has its own optical geometry. Use at 16, 32 or 48 px. Do not squeeze the tall mark into a square.

Favicon SVG ↓
Desk

Product mark

Use the registered app symbol beside its name. Company branding remains the organisation’s own identity.

All product marks ↗

Space to breathe

Construction reference

Clear space ≥ ¼ of the mark’s height on every side.

Standalone mark
Minimum 24 px high
Header lockup
27 × 35 px mark box
Mark → wordmark
8 px gap
Wordmark
23 px / weight 700
Tracking
-1.1 px at 23 px
Smallest lockup
18 px text; scale the full lockup proportionally

A 48 px standalone mark needs 12 px of empty space outside its canvas. For the lockup, apply the same rule outside the combined mark and wordmark; the internal 8 px gap remains fixed at header size. Use the mark alone when the full name cannot fit.

#ffb23a
#ff8a3d
#ff6b4a
#f0503c
Keep the identity intact.

No emoji substitutes, stretching, gradients, new layer colours or mixing the old ring-handle mark with this website mark. Older design/icon.svg and design/wordmark-*.svg are legacy references, not new-use assets. Existing consumers are inventoried and migrated in step two.

The lockup uses the local UI font stack; it is not a font-outlined print logo. The supplied SVG marks are font-independent.

Visual catalogue · target reference

Buttons, precisely.

One clear primary action. Supporting actions stay quiet. Size, spacing and every interaction state are defined here.

Action hierarchy · local examplesActual size · CSS pixels

Click a button to try its feedback. These examples do not change app data.

Default height
44 px
Horizontal padding
16 px each side
Label
14 px / 20 px / 550
Corner radius
8 px
Border
1 px
Icon
18 × 18 px
Icon → label
8 px
Between actions
8 px

States you can inspect

Primary action · visual specimens
Save changes
Default
Save changes
Hover
Save changes
Pressed
Save changes
Keyboard focus
Save changes
Disabled
Saving…
Loading

Focus: 3 px outline, 4 px offset. Pressed adds an inset edge. Disabled stays legible and has an adjacent reason. Loading retains the button’s width, prevents repeat submission and keeps focus. A missing confirmation must never be labelled “Saved”.

Button sizesActual size · CSS pixels
36 px · dense desktop
44 px · default
48 px · prominent entry

Dense buttons are reserved for desktop rows, with 8 px separation; touch controls remain at least 44 px. Long labels wrap and controls grow vertically. Do not shrink the font to make a translation fit.

Try the behaviorLocal state selection

Ready. Clicking previews feedback only.

Use words that describe the result.

“Add device”, “Record handover”, “Export report”. Avoid a row of equally loud buttons. Destructive confirmation belongs at the point of commitment, with the affected object and consequence visible. Read the behavior rules →

Visual catalogue · target reference

Fields & panels.

Labels stay visible. Related inputs belong together. A panel frames one decision, with enough space to understand it.

Form states · read-only specimensActual size · CSS pixels

Normal · an existing value.

Enter a complete address, such as support@example.com.

Read-only · managed by the directory.

Unavailable until a project is selected.

Control height
44 px minimum
Input text
16 px
Horizontal padding
12 px
Label → control
8 px
Control → help
8 px
Between fields
24 px

Panel anatomy

Panel padding
24 px desktop / 16 px mobile
Panel radius
16 px
Between panels
24 px
Actions
8 px gap; wrap when needed

Use a divider or whitespace for sections within one task. A card around every field adds noise. Put validation next to the field; use a page-level summary when several errors prevent submission. Form behavior rules →

Foundation · 01 / 19

Less work. More confidence.

Kebabstack helps IT teams finish useful work, understand consequences and safely build the next improvement. Calm appearance is a means to that end.

Start with the job

Name the person, the job they need to finish, the current obstacle and the observable result before adding a screen or setting. A feature must remove work, reduce uncertainty or enable a necessary decision.

VerifyA reviewer can state the job and success condition in one sentence.

Make the next step obvious

Every active workflow shows its current state, next meaningful action, responsible person or team, and any blocker. Completed work moves out of the attention queue. Do not invent an action when the user is waiting on someone else.

Payment recorded. IT: prepare the device. Buyer: invoice receipt pending.
VerifyA new operator can identify who acts next without opening help.

Earn certainty with evidence

Distinguish configured, queued, running, confirmed, failed and unknown. Show the source and freshness of consequential claims. Never turn an unavailable check into a green result, an empty count or proof of completion.

VerifyDisconnect one source: the page clearly shows unavailable data while retaining useful confirmed results.

Remove the second piece of work

Reuse known data, sensible defaults and linked records. Prefer a useful suggestion to another mandatory field. Offer repeatable automation after a real repeated task; do not make scripting a requirement for basic use.

VerifyList the manual steps and duplicate entries removed; measure the remaining steps with a representative operator.

Keep the person in control

Make changes explainable, attributable and recoverable where technically possible. The simplest interface still exposes scope, consequences and meaningful choices. Never hide a safety-critical distinction to make a screen look clean.

VerifyThe user can explain what will change and how to recover, or sees explicitly that recovery is unavailable.

Measure outcomes honestly

Track task completion, errors, time to first useful result, repeat manual steps and recovery effort. Compare the same tasks and dataset before and after. Report observed time savings separately from estimates and external service costs.

VerifyA savings claim includes baseline, sample, measurement period and assumptions; otherwise label it an estimate.

Foundation · 02 / 19

One family of tools

The approved kebabstack.dev marks are permanent. A tool feels like part of the suite before the user learns its name.

Kebabstack logo & usage → Product logo library ↗

Use the registry

Product marks come only from design/logos/registry.json. Keep their exact paths, 24 × 24 viewBox, 1.6 stroke and round caps/joins. Do not substitute a similar icon, emoji, gradient tile or generated image.

VerifyRun npm run brand:check; inspect app header, favicon, menu, Kitchen, website and Cloud Engine console.

Keep brand ownership clear

Kebabstack is the suite; Hub, Desk, Assets, Trust, Contracts, Forms, Watch, Crumbs, Kitchen and Vault retain their registered product names. Company branding and external app logos remain separate. Phone is a reserved, planned mark, not a shipped capability. The suite skewer, wordmark, variants and clear-space rules come from design/brand/registry.json and its usage guide; legacy ring-handle assets are not alternatives for new work.

VerifyA renamed connected app still resolves its product mark from its validated identity; external branding is not overwritten.

Preserve proportions and meaning

Use 20–24 px marks in navigation, 26–36 px in headers and 36–48 px in catalogues, with at least 4 viewBox units of clear space. Keep a nearby product name. Decorative marks use empty alt text; icon-only controls have an accessible action name.

VerifyCheck the smallest render at 100% and 200%; the visual mark and accessible control name have distinct jobs.

Use colour by purpose

Sage is the logo colour, forest is the main action colour, and warm orange is a restrained brand accent. Product identity never carries health or permission status. Logo sage is not approved for small body text on every background.

VerifyA monochrome view still communicates every status and action.

Keep the character restrained

Use warm paper, precise linework, generous grouping and occasional editorial diagrams. Avoid mascots, confetti, skeuomorphic tiles and stock imagery in work queues. Marketing may be more expressive; critical work remains calm.

VerifyDecoration does not push the first useful action below the initial viewport.

Foundation · 03 / 19

Colour, type & rhythm

The shared visual language extends the Hub, Assets and Dealroom work. Reference and runtime tokens share one versioned semantic source.

Explore tokens & components →

Use semantic tokens

Use tokens.json for the target palette, spacing, type, radii, motion and layer values. Components refer to purpose, not a literal hex code. hub/dist/tokens.css is the canonical generated runtime stylesheet; hub/dist/components.css defines shared workspace controls. Run runtime:sync and runtime:check instead of copying or redefining app palettes.

VerifyNew design decisions reference a token. The implementation plan covers every SDK copy and app override.

Keep text legible

Use the system sans stack or the existing locally hosted Inter for UI and headings. Use monospace only for identifiers, code and compact technical metadata. Body text is 16 px; dense desktop rows may use 14 px. Labels and useful metadata are at least 12 px. Never shrink text to hide a layout problem.

VerifyCheck long labels, real records, zoom and mobile text without clipping or essential hover-only content.
VISUAL-03should

Use a small type scale

Use 32–40 px page titles, 24 px section titles, 18 px panel titles and 16 px body text. Keep heading weight 500–600, body 400, line height 1.5–1.65 and long text around 60–75 characters per line. Use sentence case; reserve spaced uppercase for short optional eyebrows.

VerifyA page has one h1 and an ordered heading hierarchy; headings do not compete with every metric.

Separate boundaries from decoration

Subtle borders may group cards. Interactive boundaries, focus rings and meaningful graphics need sufficient contrast independently. Text uses approved foreground/background pairs; colour is never the only indication of error, selection or health.

VerifyValidate contrast in light and dark themes and disabled, hover, selected and error states.
VISUAL-05should

Use one rhythm

Build from 4, 8, 12, 16, 24, 32, 48 and 64 px spacing. Default cards use a 16 px radius, controls 8 px, overlays 16 px and pills only for short statuses. Use 24 px panel padding and 16 px on small screens. Prefer a divider or spacing over nested cards.

VerifyRelated controls group more tightly than unrelated sections; no card-in-card-in-card composition.

Design both themes

Theme preference follows system until explicitly changed and is shared through the established suite shell. Check every semantic state in both themes. Dark mode is a deliberate palette, not CSS inversion. Exported documents declare their own readable print palette.

VerifyNo white-on-light primary button, invisible graph, unreadable logo or flash of an unrelated theme.

Structure · 05 / 19

Pages that explain themselves

Choose a page pattern by the job. A familiar frame reduces learning across the suite.

Queue: decide what needs attention

Put title, scope and primary action first, then search and relevant filters, then the work list. Default to the meaningful unfinished scope. Show a compact count, owner, state and next useful fact; move full histories and identifiers to detail.

VerifyAn operator can triage realistic records without opening every row.

Detail: do the work, then inspect

Show identity and status once, followed by the next action. Put active work in the main column and supporting facts in a quieter side column. On small screens, use a single logical DOM order with the next action before secondary metadata.

VerifyReading order and keyboard order remain coherent at desktop and 320 CSS px.

Settings: explain the choice

Group settings by operator task and show current configuration before editing. Reveal conditional fields only when relevant; explain effects beside the control. Offer useful defaults. Do not show obsolete toggles or options that never change.

VerifyEach setting has a current value, owner, reason to exist and observable effect.

Setup: reach the first useful result

Use short steps only for genuine dependencies. Allow save/resume, validation and a safe test. Show prerequisites, required external access and who can complete blocked steps. Collapse completed setup; keep setup status distinct from service health.

VerifyA new company can reach a meaningful test without searching the web or reading the whole architecture.

Give content room to reflow

Use a fluid content width up to 1280 px for normal work, up to 1600 px for justified dense operations, and about 720 px for reading. Use 32 px desktop and 16 px mobile gutters. Collapse sidebars before compressing controls. Constrain wide tables locally, not the whole page.

VerifyNo page-level horizontal scrolling at 320 CSS px, except genuinely two-dimensional content inside its labelled region.

Public tasks stay focused

Guest dealrooms, customer intake, embedded forms and public status pages expose only their scoped task. They do not inherit admin navigation, company directory search or unrelated product promotion. Provide recovery for expired access and preserve non-sensitive drafts where safe.

VerifyTest a private link, expired link and unauthorized record directly; no hidden privileged content is fetched.

Interaction · 06 / 19

A small, consistent vocabulary

Reuse the same interaction for the same intent. A component is its behavior, accessibility and states as well as its appearance.

One main action per decision

Use a forest-filled button for the next useful action in the active region, outlined secondary actions and quiet links for tertiary navigation. Label verbs with their object: Save policy, Assign device, Publish update. Do not give every card a competing primary button. Use the measured button geometry and states in the visual catalogue; tokens.json owns the dimensions.

VerifyThe main action is obvious before reading the help text.

Explain unavailable actions

Hide actions the role can never perform, without leaking protected data. For a permitted action blocked by prerequisites, keep its reason visible and link to the remedy. Do not rely on a tooltip attached to a disabled button. Read-only views identify who can make changes.

VerifyA keyboard user can understand every relevant blocked action and its next step.

Menus and tabs have distinct jobs

Menus hold infrequent secondary actions; essential next actions stay visible. Tabs switch related content and expose current selection. Workflow steps show progress; filters narrow a collection. Do not disguise one as another. Use native controls or fully implement their keyboard pattern. The Menus & tabs catalogue defines spacing, hit areas, active indicators and keyboard behavior.

VerifyArrow keys, Tab, Escape and focus behavior match the component used.

Use overlays sparingly

Use a dialog for a short, focused decision; a drawer for contextual inspection; a page for lengthy work. Modal content traps focus, labels its purpose, makes the background inert and returns focus on close. Escape and the close control preserve or explicitly discard drafts. Avoid nested dialogs.

VerifyKeyboard-only opening, validation, cancellation and return focus all work.

Make selection and actions explicit

A checkbox selects; a record link opens. Bulk actions state the number and scope selected, including whether selection spans pages. Preview consequences for destructive or externally visible changes. Report per-item results and make retry target only failed eligible items.

VerifySelecting a row does not unexpectedly open it; partial failure cannot be mistaken for total success.

Prefer standard controls

Use native buttons, links, inputs, selects and details where they satisfy the task. A custom searchable picker needs labels, active option, keyboard selection, clear state and no-results behavior. Dragging always has a non-dragging alternative.

VerifyTouch, keyboard, screen reader and long text work without a pointer-only shortcut.

Interaction · 07 / 19

Ask less. Validate clearly.

Forms should make the correct path easy without making users memorize rules.

Label and group every input

Keep labels visible; placeholders are examples, never labels. Associate help and errors programmatically. Mark optional fields when most are required, otherwise mark required fields consistently. Use fieldsets for related choices.

VerifyEvery control has a useful accessible name, and help remains available after typing.

Keep save behavior predictable

Use an explicit Save for policies, integrations, settings and multi-field edits. If autosave is appropriate, show saving, saved and failed states and preserve the draft on failure. A toggle must not silently commit the rest of a form. Warn about abandoning a meaningful unsaved draft.

VerifyChange one field, fail the save, navigate away and return: there is no false success or silent loss.

Validate where the correction belongs

Validate format near the field after meaningful interaction. On submit, focus an error summary with links to invalid fields; keep entered values. Backend validation remains authoritative. Clearly distinguish invalid input from unavailable service or denied permission.

VerifyMultiple errors are discoverable and correcting one does not erase another field.
FORMS-04should

Reuse known information

Pre-fill confirmed data with its source and let authorized users correct it. Use appropriate autocomplete and inputmode. Do not ask for data already held just because another tool owns it. Only collect information needed for the stated purpose.

VerifyA returning user does not retype known identity or device information.

Handle sensitive inputs deliberately

Mask secrets, expose them only on an authorized explicit action, and explain whether they can be retrieved again. Never prefill a masked placeholder as a new credential. Keep tokens out of URLs, logs, screenshots and telemetry. A successful copy is reported only after the clipboard operation succeeds.

VerifyCancel, failed copy, expiry and page navigation do not leak or overwrite the secret.

Review consequential actions concretely

For deletion, publication, permission changes, financial issuance and fleet actions, show affected scope, consequences and recovery limits before the final action. Routine reversible edits need no ritual confirmation. Recheck current authority and record version at execution.

VerifyA stale review cannot authorize a different set of records or silently overwrite another operator’s changes.

Interaction · 08 / 19

Lists, search & data

Make the common comparison easy; keep detail available without turning each row into a report.

Show decision fields first

Default to identity, state, owner, relevant time and the next-action signal. Choose additional columns only for the task. Right-align comparable numbers and use tabular numerals; keep units and currency visible. Never mix currencies into an unexplained total.

VerifyRepresentative long names, missing values and large amounts remain readable.

Keep query scope visible

Search, active filters and sort order are visible and resettable. Say whether counts describe the complete authorized collection, the filtered result or the current page. Sorting applies to the promised dataset, not just the downloaded rows.

VerifyA filtered queue and exported result use the same documented scope.

Preserve context during refresh

Keep focus, scroll, selection and in-progress edits stable. Do not reorder a queue under the pointer while the user is acting; announce new items with a refresh affordance when needed. Reject stale asynchronous results after identity, route or filter changes.

VerifyA slow response from the previous view cannot replace the current result.

Distinguish absent from zero

Use Not recorded, Not checked, Not applicable and Unavailable where appropriate. A confirmed zero is a value. Show the last successful observation and freshness for imported or monitored data. Keep technical detail in a disclosure with a support reference.

VerifyAn unavailable Watch check never reads All healthy or 0 problems.
DATA-05should

Make imports recoverable

Preview mapping, validation, duplicates and affected records before import. Provide a small downloadable example with fictitious data and precise field definitions. Report accepted and rejected rows separately and provide safe retry guidance.

VerifyImporting the same input twice does not create unintended duplicates; partial completion is explicit.

Exports describe their evidence

Show scope, filters, generation time, timezone, currency and relevant policy version. Restrict export to current role and purpose. Neutralize spreadsheet formulas in untrusted CSV text; do not put private data into filenames. Reports preserve the distinction between draft, approved and released.

VerifyAn exported report can be interpreted without the original browser session.

Interaction · 09 / 19

Tell the truth about state

The screen should remain useful when a network, integration or human step takes longer than expected.

Design the complete state set

Every data region defines initial/loading, loaded, empty, filtered-empty, partial, stale, error and forbidden states where applicable. A skeleton is a loading placeholder, not a count of zero. Keep independent regions useful when one fails.

VerifyExercise each applicable state using a representative fixture.

Use progress that is real

Acknowledge an action immediately. Show the current meaningful stage for longer work, not a fabricated percentage. Explain when it is safe to leave and whether the job continues. If a wait exceeds its timeout, offer a useful recovery path.

VerifySimulate a slow call and lost connection; the user knows whether the operation is still running or uncertain.

Separate accepted from completed

A request accepted into a queue is not a confirmed external result. Show saved in Hub, awaiting app confirmation, confirmed or failed separately. Optimistic UI is limited to reversible low-risk edits that can visibly recover.

VerifyA failed external write never leaves a success toast or permanently green status.

Make errors actionable

Lead with what failed and what remains intact, then the next useful action. Preserve input. Offer retry only when safe; for ambiguous outcomes, check operation status before resubmitting. Put raw stack traces and sensitive provider errors behind sanitized operator diagnostics.

Could not confirm the update. Your draft is still here. Check the job status before trying again.
VerifyThe operator can recover or give support a reference without copying secrets.

Notify accessibly without stealing focus

Use a polite live region for routine asynchronous results; use urgent alerts only for urgent failures. Success toasts are supplementary, not the only receipt for important work. Keep actionable errors persistent until addressed.

VerifyA screen reader receives one useful announcement, not every polling update.

Empty states explain a path

Distinguish first use from no matches, lack of permission and missing integration. Offer one role-appropriate next action. Never show setup controls to employees who cannot use them.

VerifyNo matching devices offers Clear filters; an unconfigured connector offers setup only to the authorized operator.

Behavior · 10 / 19

Progress with a clear owner

A workflow is a sequence of verified outcomes, including exceptions and human decisions.

Name outcomes, not implementation flags

Use a small set of domain states with explicit entry/exit conditions. Model waiting, blocked and failed deliberately. Complete means the stated outcome is achieved; Cancelled is a terminal side branch, not the next step after success.

VerifyA transition table defines allowed actors, preconditions, evidence, effects and recovery for every transition.

Show the next actor

Each unfinished case names who is responsible now, the blocker and a due time if one exists. A stage counter and a per-record progress indicator have different scopes. Do not ask the current user to perform another person’s acceptance.

VerifyA paid sale awaiting buyer confirmation explains the exact blocker and permitted follow-up, not a mysteriously disabled handover.

Coordinate without duplicating authority

Link records through stable IDs and identify the owning tool. Offboarding can collect equipment, contracts, forms and tickets while each source enforces access. Deactivation stops access independently of ticket completion; equipment custody is not silently erased.

VerifyRepeated directory events correlate to the same unfinished case; source failure is visible and retryable.

Treat manual exceptions as decisions

If a real process allows an override, name who may use it, the reason required, the evidence retained and which safeguards remain. Do not add a universal Force complete button or silently invent acceptance on someone else’s behalf.

VerifyAn override is auditable and cannot bypass a non-overridable safety or permission condition.

Keep handovers explicit

Assignment, ownership, payment, physical handover, data erasure and closure are distinct facts. Preserve history when a person departs. External buyer flows require their own scoped access; disabling an employee account does not grant external access automatically.

VerifyA former employee’s device remains traceable until a verified return, transfer or sale outcome.

Close the loop

Show completion evidence, remaining obligations and the relevant record of what happened. Remove resolved items from urgent queues without hiding their history. Offer a reusable template when a repeated workflow has stabilized.

VerifyThe user can distinguish completed work from a case merely hidden by a filter.

Behavior · 11 / 19

Access that people can explain

Hub is the authority for central app roles. The interface explains effective access without creating a second role system.

One central source of app authority

Show effective app role, scope and provenance from Hub. Active Hub Owners and global Admins inherit app administration according to the central policy; only Owners delegate central app privileges. Do not add local app-admin lists. Follow docs/APP-PERMISSIONS.md for exact enforcement.

VerifyAn employee, app admin, global admin, owner and inactive person each have verified positive and negative paths.

Limit views to their actual purpose

Employees see their own and explicitly shared objects. Project, responder and HR/Finance capabilities expose only the data needed for that task. Read-only reporting does not imply access to incident narratives, customer messages or company-wide tickets.

VerifyOpen a restricted route and call its API directly; neither returns data outside the scope.

Explain inheritance and propagation

Show where access comes from and link authorized administrators to Hub. Distinguish policy saved from app enforcement confirmed. If fresh authorization cannot be established, fail closed and explain how to recover. Never promise immediate upstream IdP revocation.

VerifyA stale directory or disconnected app cannot masquerade as current confirmed access.

Keep sign-in on one journey

Use the shared sign-in shell from tool entry through provider selection, verification and handoff. State the destination and company. Once company authentication succeeds, continue directly to the authorized destination without showing an interactive Hub home or original login screen.

VerifyTest direct entry, Hub launch, existing session, expiry, cancelled provider login and a deep link.

Recover safely from interrupted login

Validate return destinations against configured origins. Keep background navigation inert during handoff; prevent duplicate submissions. Offer retry and a deliberate return on timeout. Re-authentication preserves safe task context without storing credentials or leaking protected drafts.

VerifyA slow or failed login never exposes a clickable admin page, arbitrary redirect or previous person’s content.

Treat guest access as a separate scope

Private links, embedded intake and public forms use narrowly scoped capabilities with clear validity and recovery behavior. Browser widgets never contain privileged API secrets. Existing external integrations such as Lunch keep their documented identity/data contracts.

VerifyAn external guest cannot enumerate records, cross projects or use a staff endpoint.

Behavior · 12 / 19

Automate with confidence

A good automation removes a repeated chore while making its boundaries, evidence and recovery understandable.

Describe a rule in plain language

Every rule shows trigger, matching scope, prerequisites, action, owner and failure behavior. Show what it will not match when that affects a decision. Give human-readable examples based on authorized records.

When a person becomes inactive, open or update their offboarding case and collect accessible assigned equipment.
VerifyAn IT operator can predict whether a sample event will run the rule.

Preview consequential automation

Separate a non-mutating preview from a real run. Show affected records, external systems and required permissions. Require explicit configuration before automatic destructive or externally visible actions. Approved routine rules can then run without repeated prompts.

VerifyA preview performs no writes or notifications and says which results could not be verified.

Make repeated events harmless

Use stable correlation and idempotency for repeat events and retries. Recheck authority and preconditions at execution. Show skipped, already handled and failed items separately. Never retry an uncertain financial or destructive action blindly.

VerifyDeliver one event twice, interrupt after a partial write and retry: there is one intended outcome.

Offer a useful run history

A run shows trigger, rule version, actor, affected scope, per-step outcomes, timestamps and links to evidence. Expose Pause, retry failed work and manual recovery where supported. Pausing future runs does not claim to undo actions already performed.

VerifyAn operator can answer what happened, why, what remains and who owns it without reading server logs.

Suggest the next useful automation

Suggest a template after repeated manual work and show editable conditions. Avoid constant nudges, speculative savings and a blank workflow canvas as the first experience. Provide an accessible list/form editor even if a visual builder is added.

VerifyA basic recurring task can be configured without code; advanced users can inspect its documented contract.

AI respects evidence and authority

Label generated drafts, cite accessible source records and state uncertainty or missing information. Treat retrieved text as data, not instructions. AI acts within the user’s rights; impactful actions use the same preview and execution safeguards as manual actions. Explain any external model data flow and retain only necessary history.

VerifyThe user can correct or reject a suggestion; untrusted ticket text cannot grant permissions or trigger an action by itself.

Behavior · 13 / 19

Privacy built into the task

Collect less, reveal deliberately and explain the actual lifecycle of data.

Minimize the default view

Show only fields useful for the current task and role. Avoid personal details in global lists, wallboards, notification previews and URLs. Reveal sensitive information explicitly when authorized, with a clear purpose.

VerifyHR reporting, employee views, public pages and TV mode use deliberately different data projections.

Describe retention precisely

Show what is stored, why, the configured retention period, the event that starts it and who owns the policy. Distinguish source data, audit evidence, issued documents and backups. Automatic cleanup must expose last run, next due work, holds and failures.

VerifyA completed ticket and retained invoice can have different policies without a misleading global deletion promise.

Deletion is not revocation or archive

Name the actual action: revoke a link, archive a record, anonymize fields, delete data or expire a backup. Preview scope and irreversible effects, handle linked records and explain lawful retention holds without claiming automated legal judgment.

VerifyA user can tell which copies remain and which external systems require a separate action.

Do not claim compliance from appearance

Design for data access, correction, export, deletion requests and restricted audit review. Document deployment location, operator access and external data processing limits. Do not describe the suite as GDPR-certified, confidential from operators or compliant merely because a feature exists.

VerifyCompliance language names the implemented support, required company policy and remaining operator responsibility.

Keep audit useful and limited

Audit consequential changes with actor, time, scope, before/after where appropriate and result. Redact secrets and restrict sensitive event details. Search and export respect the same permissions and retention policy as the source.

VerifyA routine support screenshot or log export cannot reveal credentials, unlock codes or unrelated personal data.

Behavior · 14 / 19

Notifications & incident response

Attention is a scarce resource. Escalate a real obligation, not every state change.

Notify someone who can act

Every actionable notification includes what changed, impact, scope, owner, time and a direct permitted destination. Informational updates can be grouped. Distinguish delivery accepted, delivered where provable, acknowledged and resolved.

VerifyNo notification says a responder was alerted merely because an outbound request was queued.

Deduplicate and route deliberately

Correlate repeated signals, rate-limit noisy sources and summarize repeats without hiding escalation. Respect configured severity, subscription scope and quiet hours; define explicit critical overrides. Recovery updates reference the same incident.

VerifyA flapping monitor produces one coherent incident with event history rather than an unbounded list of identical alerts.

Separate technical failure from service impact

A failed monitor or unknown check is not proof of a service outage. Explain evidence, last successful observation and customer impact independently. Do not auto-publish internal diagnostic detail to a public status page.

VerifyInternal notes, customer updates and public status each have an explicit audience and preview.

Make on-call responsibility visible

Show who is primary and backup now, the schedule timezone, next handover and uncovered intervals. Swaps and overrides have an explicit interval and conflict check. Do not promise phone wake-up reliability before delivery, acknowledgment and fallback paths are verified.

VerifyTest weekends, holidays, DST, missing coverage and an unacknowledged escalation.

Public status is a deliberate publication

Status updates need a clear audience, affected service, impact, timeline and next update expectation. Keep a publication history and distinguish planned maintenance from incidents. A monitor can prepare a draft under configured rules; automatic publication requires explicit policy.

VerifyPreview contains no employee identifiers, secrets or internal incident discussion.

Use quiet visual urgency

Use text labels and restrained semantic colour for severity. Avoid sirens, flashing banners, endless animation and default browser permission prompts. Ask for notification permission when a user chooses a useful channel and explain the benefit.

VerifyA noncritical update does not interrupt a focused workflow; critical work remains discoverable.

Experience · 15 / 19

Dashboards, reports & TV

A good overview answers a decision. It does not become another queue to maintain.

Give each metric a question

Show the metric’s meaning, scope, timeframe, source and freshness. Put items requiring action ahead of decorative totals. A summary links to the same filtered source view where authorized. Do not mix readiness, performance and volume into an unexplained score.

VerifyA manager can state what decision each metric supports and why it changed.

Use honest charts

Use labelled axes, units, time ranges and comparable baselines. Bars start at zero; a deliberately restricted line-chart axis is clearly labelled. Distinguish missing data from zero and forecasts from observations. Colour has a text or pattern alternative, and useful values are accessible without hover.

VerifyA chart has a concise textual summary and an accessible table or equivalent data view.

Do not invent trends

Only show history retained by the source, with coverage and gaps. Display sample size and denominator for rates or scores; state the score policy/version where relevant. Do not animate a number from zero in a way that implies a live observation.

VerifyA newly installed tool shows insufficient history instead of a fabricated upward curve.

TV mode is a separate audience

Use independently scoped read-only display access, explicit expiry/revocation and aggregate data by default. No employee names, private tickets, contracts or departure details on shared screens. Show unavailable sources and freshness prominently.

VerifyA revoked, expired or stale display hides protected data and cannot navigate into an admin session.

Design for the viewing distance

Provide a deliberate 16:9 wallboard layout tested at 1920 × 1080 and 3840 × 2160. Use a few large summaries and readable labels, not a scaled desktop table. Subtle change transitions may help orientation; avoid mandatory carousels and constant movement.

VerifyAt the intended room distance, viewers can read the key state without approaching the screen.

Reports preserve approval meaning

Operational summaries, submitted time, approved time, compensation calculation, released statements and payroll export are distinct. Show units, timezone, policy version, currency, adjustments and approval history. A report does not claim money was paid unless that result is verified.

VerifyHR/Finance can reconcile a period without receiving unnecessary incident content; self-approval rules remain enforced.

Experience · 16 / 19

Accessible by default

WCAG 2.2 AA is the acceptance target. These rules are a practical baseline, not a certification or a substitute for a full audit.

Reference: W3C · WCAG 2.2. Full conformance requires an audit of the actual implementation.

Meet contrast and reflow requirements

Text normally needs at least 4.5:1 contrast; large text may use 3:1. Meaningful graphics and control boundaries need 3:1 where required. Support 200% text resizing and reflow at 320 CSS px without loss of functionality. Test text-spacing overrides.

VerifyRun automated contrast checks, then inspect actual rendered combinations and keyboard focus in both themes.

Make every task keyboard operable

Use logical DOM order, visible focus, a skip link and landmarks. Keep focus unobscured by sticky bars and overlays. Do not use positive tabindex. Pointer actions have keyboard equivalents; drag actions also have a simple non-dragging method.

VerifyComplete the principal task and recover from an error without touching a mouse.

Use comfortable targets

Aim for 44 × 44 CSS px controls and touch targets; dense desktop controls may be 36 px where spacing and purpose justify it. Meet WCAG 2.2 target-size requirements or their documented exceptions; do not use a tiny icon as the sole hit area.

VerifyCheck adjacent controls at touch size and zoom, not only with a precise pointer.

Expose names, relationships and updates

Use semantic headings, lists, tables with headers and accessible form associations. Icon-only actions name the action, not the shape. Status changes are announced appropriately; charts and images provide equivalent information.

VerifyInspect the accessibility tree and test representative flows with VoiceOver or another screen reader.

Respect motion and sensory needs

Honor prefers-reduced-motion. No essential information depends on motion, sound, colour or hover alone. Avoid flashes and autoplay media. Provide pause/stop controls for nonessential persistent movement or automatically updating presentations where required.

VerifyReduced-motion mode retains every status and action with no shimmering skeleton or looping decorative animation.

Keep authentication accessible

Allow password managers, paste and platform authentication aids. Avoid arbitrary memory puzzles. Explain passkey, provider and popup progress; provide recovery when the external flow closes or fails. Do not time out a user’s work without warning and a recovery path where feasible.

VerifyKeyboard and assistive-technology users can complete sign-in and return to the intended task.

Experience · 17 / 19

Words, time & language

Be calm, direct and precise. The operator should not have to translate implementation vocabulary into a decision.

Say the outcome first

Use short sentences, concrete nouns and useful verbs. Explain the action and consequence next. Put implementation detail behind a relevant disclosure. Prefer one concise helper line to a paragraph that repeats the title.

VerifyRemove every sentence that neither helps a decision nor explains a necessary consequence.

Use consistent microcopy

Buttons describe the result; confirmations name scope; errors say what failed and how to proceed. Avoid vague OK, Submit, magic, bulletproof, guaranteed and blame. Completed work gets a calm receipt, not praise or confetti.

VerifySave access policy; Access saved · awaiting app confirmation; Could not confirm access · check connection.

Make time unambiguous

Use locale-aware display and stable machine timestamps. Show an exact date/time and timezone for deadlines, schedules and evidence; relative time can supplement it. Let viewers distinguish their timezone from the schedule’s timezone. Define DST and period boundaries.

VerifyA handover across regions cannot be interpreted as two different instants.

Localize meaning, not just strings

Keep language selection consistent with the suite. Support longer translations, plural forms, diacritics and locale number/date formatting. Do not concatenate translated sentence fragments. Keep a currency code with ambiguous symbols and never silently convert amounts.

VerifyTest German-length labels and at least one narrow viewport with non-English names.

Teach at the point of need

Offer brief contextual help and a linked guide for external setup. Show prerequisite, procedure, verification and recovery; label planned behavior separately. Keep changelogs focused on changed user behavior and migration impact.

VerifyAn IT operator can finish setup without a web search; a leader can understand operational dependencies and remaining work.

Keep examples safe to publish

Use fictitious people, example.com domains, placeholder IDs and sanitized records in docs, screenshots, templates and fixtures. Do not copy customer data or internal policy into public examples.

VerifyReview documentation and visual assets as part of the sanitized repository publication checks.

Experience · 18 / 19

Motion, speed & shared surfaces

Smooth means stable, responsive and understandable, even when the backend is slow.

Animate orientation, not decoration

Use 120 ms feedback, 180 ms state transitions and at most 240 ms for a deliberate panel movement. Prefer opacity and transforms; do not animate layout size in a busy queue. Never delay an action just to finish an animation.

VerifyEvery transition has a purpose and a reduced-motion alternative.

Keep the first useful view lightweight

Reuse local assets, load detail when needed, bound lists and avoid loading all private data for an aggregate. Show independent results progressively. No third-party font or analytics request merely to render the core work surface.

VerifyMeasure cold start and a slow connection; publish actual measurements rather than promising instant loads.

Prevent layout and focus jumps

Reserve image and skeleton dimensions. Keep stable keys, labels and button widths during async work. Do not rerender the active input or reorder current work because a polling request finished.

VerifyTyping, tabbing and clicking remain predictable while data refreshes.

Keep every touchpoint in the family

Apply the same logo, naming, token roles and content hierarchy to login, tools, Hub menu, Kitchen, Cloud Engine metadata, help, emails, exports, embeds and marketplace material. Functional documents such as invoices keep their required semantics.

VerifyReview a full journey including the email/link, login, task, confirmation and downloaded evidence.

Shared foundations stay shared

SDK client and runtime token copies remain byte-identical to their canonical sources. Use the shared sign-in shell. New components need documented states and keyboard behavior before adoption. Eliminate app overrides only as part of a verified migration, not by sweeping replacement.

VerifyRun SDK, logo and design drift checks and compare representative screenshots in all affected apps.

Make extension a supported path

Give templates, stable IDs, scoped API examples, field/schema discovery, verification and failure examples. Show what a key may do and where it must be stored. Prefer a working first integration over a long catalogue of possible integrations.

VerifyAn operator can test an embed or API request with fictitious data and understand a denied or partial result.

Adoption · 19 / 19

Keep the standard alive

The standard is versioned source. Adoption is verified per surface and role, not declared suite-wide because this page exists.

Read the standard before changing UI

Read design/README.md, the relevant rules and the affected module guides before design work. Reference rule IDs in reviews. New tools use the same foundations; a new tool does not get a new design language.

VerifyA change identifies its user task, relevant rules and acceptance evidence.

Use explicit rule strength

Must is an acceptance requirement. Should is the default and may differ for a documented task-specific reason. A must exception needs a written decision, owner, affected scope, compensating measure and expiry/review date; it never authorizes a permission or safety bypass.

VerifyExceptions are discoverable in the app audit and do not silently redefine shared components.

Record adoption honestly

Use Not reviewed, Gap found, In progress and Verified with date, commit, role, viewport and evidence. Do not label an entire app compliant after reviewing one page. Shared visual adoption and complete workflow/accessibility certification are separate evidence claims.

VerifyThe audit distinguishes inspected facts, hypotheses and untested scenarios.

Verify before release

Use the acceptance checklist for role scope, workflow integrity, accessibility, privacy and visual consistency. Preserve real authorization and data-integrity regressions. Follow the existing tested-release and production-authorization workflow. A design change never grants rollout authority.

VerifyNo release has an unresolved critical data/access defect or silently skipped required check.

Change one source, regenerate copies

Edit standard.json and tokens.json as source; generate the browsable standard, Markdown and Hub-served copies with npm run design:build. Edit logos only in their registry. Bump the design version and changelog; bump affected modules for their releases.

Verifynpm run design:check and npm run brand:check pass; committed generated files match source.

Review the value of the interface

In each iteration, remove an unnecessary decision, duplicate entry or ambiguous state before adding a new configuration option. Test key jobs with an IT operator and the actual secondary roles, including employees and Finance.

VerifyKeep a short before/after task record; unresolved friction becomes a prioritized issue, not more help text.

Step two · deliberate adoption

One foundation.
Then every solution.

Review real jobs and every relevant role. Fix confusing logic before polishing the surface. Verify each change without losing the workflows people already rely on.

Current status: Shared visual foundations implemented across official apps. Workflow and accessibility evidence remains scoped to the recorded checks; this is not a blanket certification. Read the suite adoption record → Full workflow certification needs its own evidence.

01 · Shared foundations

In progress

SDK, logos, tokens, sign-in, app switcher

One recognizable, accessible journey across the stack.

Verify shared palette, controls, suite mark, focus, sign-in, direct/deep-link handoff and role boundaries. Retain real IdP and assistive-technology checks as separate evidence.

See reviews/2026-09-22-suite-standard.md for the cross-suite visual adoption, regression checks and remaining manual certification boundaries.

02 · Hub & operations

In progress

Hub, Kitchen, Vault, Cloud Engine console

Understand access, automate work and operate the suite with confidence.

People → effective permissions → app confirmation; sync provenance; updates and partial recovery; snapshot/restore consequences; TV pairing, expiry and aggregate scope.

See reviews/2026-09-22-suite-standard.md for the cross-suite visual adoption, regression checks and remaining manual certification boundaries.

03 · Everyday work

In progress

Desk & Assets

Resolve requests and equipment work without duplicate entry.

Employee/agent/admin journeys; customer project boundaries; offboarding with inactive people; device return and external sale; next-action blockers and actual physical handover.

See reviews/2026-09-22-suite-standard.md for the cross-suite visual adoption, regression checks and remaining manual certification boundaries.

04 · Response & reporting

In progress

Desk on-call, customer support, status, HR/Finance

Coordinate incidents, schedules and defensible reporting.

Coverage, DST and swaps; acknowledgment vs delivery; customer/public audience previews; project scope; time review, compensation, release and export boundaries.

See reviews/2026-09-22-suite-standard.md for the cross-suite visual adoption, regression checks and remaining manual certification boundaries.

05 · Risk & commitments

In progress

Trust, Watch & Contracts

Understand the evidence and act before a problem becomes costly.

Posture score denominators and freshness; device deployment/recovery guides; unavailable DNS/certificate checks; actionable renewal deadlines and currency/report scope.

See reviews/2026-09-22-suite-standard.md for the cross-suite visual adoption, regression checks and remaining manual certification boundaries.

06 · Build & publish

In progress

Forms, Crumbs, SDK/MCP, Bug, website & marketplace

Create useful extensions and publish a credible, coherent product.

Form creation and guest scope; analytics empty/history states; embed guides and key scopes; AI evidence; game-specific visual exception; marketing truth; sanitized screenshots and docs.

See reviews/2026-09-22-suite-standard.md for the cross-suite visual adoption, regression checks and remaining manual certification boundaries.

The acceptance gates

Download review template ↗
  1. 01 · Job & next step

    Name the primary role, job, next actor, blocker and completion evidence.

  2. 02 · Authority & scope

    Test permitted and denied roles, inactive identities, direct URLs, API calls and guest/project boundaries.

  3. 03 · State & recovery

    Exercise loading, empty, partial, stale, forbidden, error, retry, duplicate events and interrupted writes.

  4. 04 · Forms & consequences

    Check drafts, validation, save behavior, concurrency, bulk scope and consequential-action preview.

  5. 05 · Shared design

    Check canonical logos, semantic tokens, type, spacing, hierarchy, components, themes and full cross-app journey.

  6. 06 · Accessible interaction

    Keyboard, focus, semantic structure, screen reader, contrast, 200% text, 320 px reflow and reduced motion.

  7. 07 · Data & evidence

    Verify query/count/export scope, units, currencies, timezone, data freshness and source links.

  8. 08 · Privacy & audiences

    Check data minimization, secrets, retention/cleanup evidence, public updates and TV/HR projections.

  9. 09 · Words & setup

    Use consistent language, useful errors, translated-length labels and prerequisite → action → verify → recover guides.

  10. 10 · Release & outcome

    Record before/after task evidence, module versions/changelogs, required tests, known gaps and deployment status.

A score cannot hide a critical defect.

Access/data integrity defects and blocked core or accessible tasks stop the affected release. Record gaps with a rule ID, reproduction, impact, owner and evidence. Unreviewed does not mean passed.

Across the standard

Find the right reference.

Confirmation example

Record this handover?

This demonstration covers one device and one sale. A real confirmation must be based on the physical handover and current preparation evidence.

This is a local design example. It does not update a device, contact a buyer or change any sale.