Copy voice and casing
A librarian's voice, not a coach's. Sentence case everywhere, with one deliberate exception.
The copy of Quoin has two separate rule sets: voice (what the words say) and casing (how the words are
capitalized). Both rule sets come from a Mobbin survey of roughly 60 production apps (docs/05-research.md) and
from the component spec of Quoin. Both rule sets are also skills. Any agent that works on this product can load
the skills copy-voice and copy-casing.
Voice
Quoin sounds like a librarian's voice, not a coach's voice. It states the figure and its interval. It never puts an adjective in their place. It uses the same sentence when the news is good and when the news is bad.
| Surface | Pattern | Example |
|---|---|---|
| Marketing hero | One promise in ≤ 12 words, a subhead that names what is absent, two CTAs | "Flags and experiments for teams with a database and no data team." |
| Verdict sentence | Figure and interval in one sentence. The sentence ends with the literal state word. Never a colored badge | "converted.14d rose 21.6% [+5.2, +37.9] — clear." |
| AI analysis | Cites only numbers that are already on the page. States its own confidence. Does not interpret broken/too-early | Every figure carries an inline reference to its exact JSON path. |
| Rule editor dialogs | The title names the object and the environment | "Lock and start instant-search-results in production." |
| Toasts | A past participle, a revision id and an Undo action | "Rolled out to 45%. r-0419. Undo" |
CLI / --help | Verb-first grammar, a copyable command and sentence-first errors | quoin flags rollout onboarding.checklist_v2 50 --env production |
| Errors | What happened, then what to do, then the code | "That key doesn't match any workspace. Check the key your app sends, or generate a new one." (quoinCode: unauthorized) |
| Empty states | What is empty, what fills it, one action | "Nothing rolling out right now." |
| Destructive confirms | Names what is lost. Ends with "This can't be undone". The kill switch alone asks for nothing | "Delete search.instant_results? This removes the row; the flag serves its code default everywhere." |
Never use these:
- A bare win-probability or p-value as the headline
- "chance to win" in any phrasing
- Color-coding of a decision card or verdict sentence by good or bad
- Hype adjectives ("powerful," "seamless," "game-changing")
- "OK"/"Submit"/"Confirm" on a button that can say what happens ("Resume anyway," "Ship early," "Turn off")
Casing
The rule: sentence case, everywhere. Capitalise the first letter and proper nouns. Do not capitalise anything
else. Do not use Title Case on buttons or headings. Do not use ALL-CAPS section headers. Do not use
text-transform: uppercase in product UI. There is one exception.
| Role | Pattern | Example |
|---|---|---|
| Buttons | Sentence case | "Sign in", "Ship early", "Turn off" |
| Headings & dialog titles | Sentence case | "Lock and start instant-search-results in production" |
| Section headers | Sentence case, small, muted. Not caps | "Needs a look", "Recently concluded" |
| Verdict sentence | Sentence case. Ends with the literal state word | "…21.6% [+5.2, +37.9] — clear." |
| Form labels | Sentence case | "Work email", "Guardrail margin" |
| Nav / sidebar | Sentence case | "Home", "Flags", "Experiments", "Settings" |
| CLI grammar | Lower-case, verbatim | quoin flags rollout onboarding.checklist_v2 50 --env production |
The one exception: the decision-record Stamp ("rolled back," "shipped," "harmed"). The source text is
lowercase. CSS alone renders it in caps (text-transform: uppercase), rotated −2°. This is the single deliberate
use of all caps in the whole product.
Why sentence case
The Mobbin survey covered settings, empty states, tables, create dialogs, destructive confirms, toasts, sign-in screens and pricing screens. The large majority of well-regarded production apps use sentence case throughout. Examples are Linear, Supabase, Notion, incident.io, Railway, Cursor and Workable. Title Case remains mainly as an iOS Human-Interface-Guidelines habit. Even the apps that use it do not apply it in a consistent way. ALL CAPS remains only as a tiny marketing eyebrow or a whole-brand stunt. No surveyed app uses it as the default voice for every label, status pill and chip. The one legitimate ALL-CAPS use in Quoin is narrower: a single component, and only there.