docs GitHub

Design systemDraft

Copy

Voice

  • Plain, short, calm. Say what happened and what the person can do. No exclamation marks, no cheerleading, no apologies for normal behaviour.
  • Sentence case everywhere: titles, buttons, labels, menus. No caps labels and no letter-spaced mono captions.
  • No em dashes and no section-sign character, in any text: use a colon, a comma or a middle dot.
  • Labels carry no full stop. Sentences in a description do.
  • One idea per line. A second line is meta (--label), not a longer sentence.

Names

  • The person is "you" on their own screens: "You handed back to kit", "Your phone has the keyboard". Never their name where they are the reader. Other people's names appear only where they did something.
  • Agents by name, lower case as they are set: kit, juno. The assistant's name comes from onboarding.
  • Devices by their names: "alex's iPhone", "Chrome on alex's Pixel 8". On owner-facing copy, "Your phone", "Your laptop", "Your Lumen".
  • Projects by name: Harlow Legal. Another client's name never appears on a screen that belongs to a different project (screens are shared with clients).
  • Machine words stay in mono and only where they are what the person types or reads back: commands, paths, IDs, keys, codes. Tool names are never shown to the person.

Buttons

  • A verb, or a verb and an object: Allow once, Send, Start building, Trust this browser, Add your phone. Not OK, Yes, Submit (except a question card's Submit), Confirm.
  • Destructive labels name what goes, with a count: "Delete 214 files", "Forget 3 memories", "Remove alex's Pixel 8".
  • Busy labels keep the button's width and use the verb in progress: Allowing, Sending, Saving.
  • "Always in Harlow Legal", not "Always allow" or "Remember".
  • Cancel, Deny, Discard, Not now and Later are ghosts.

States

  • Empty: a short noun phrase and the first action inline ("No projects yet" and a name field). No illustrations, no "Oops".
  • Loading: no words at first (the skeleton says it); after 10 s "The box is slow to answer".
  • Error: what failed, in plain words, then the detail in mono, then a way out: "Couldn't load kit's history" / ECONNRESET after 15 s / Retry.
  • Offline: say what waits and when it goes: "Queued · sends when the box is back".
  • Decided: past tense and who: "Allowed once by you · 14:22", "Expired after 24 h".
  • Never blame the person; never say "unknown error".

Numbers, times and units

  • Times of day 24-hour: 14:22. Relative ages short: 12m, 3h, 2d; "just now" under a minute.
  • Durations: "2m 14s", "0:42" for a running timer, "5 min" in a sentence.
  • Counts with the noun: "3 of 5", "99+" on badges, "Load 40 more".
  • Money with the currency: "$5 cap per session".
  • Middle dot ( · ) joins meta: "kit · Harlow Legal · 12m".

Words

SayNot
Needs youInbox, notifications, alerts
Ask, question, draftRequest, prompt, popup
Held (by the Gate)Blocked, pending approval
BoxServer, backend
Relay, TailscaleTunnel, VPN (except where iOS calls it that)
Face ID, Touch IDBiometrics, authenticate
Sign in on this deviceLog in, authenticate
Steer, queue for afterInterrupt, append
StopCancel (for a running turn)
Doesn't askBypass, YOLO
Your phone has the keyboardSession locked