jig-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +7 -0
- package/README.md +115 -0
- package/dist/index.js +544 -0
- package/package.json +61 -0
- package/rules/00-anti-patterns.md +501 -0
- package/rules/01-modes.md +213 -0
- package/rules/02-tokens.md +210 -0
- package/rules/03-patterns.md +459 -0
- package/rules/04-principles.md +154 -0
- package/rules/05-copy.md +153 -0
- package/rules.index.json +637 -0
- package/templates/SKILL.md.tmpl +53 -0
- package/templates/command-metadata.json +27 -0
- package/tokens/brand.default.css +152 -0
- package/tokens/mode.editorial.css +72 -0
- package/tokens/mode.operator.css +74 -0
- package/tokens/mode.product.css +69 -0
package/rules/05-copy.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# 05 · Copy
|
|
2
|
+
|
|
3
|
+
**Status:** draft v0.1
|
|
4
|
+
**Scope:** universal. Interface text in every mode.
|
|
5
|
+
**Load when:** writing or reviewing any user-facing string — labels, buttons, headings, errors, empty states, help text.
|
|
6
|
+
|
|
7
|
+
Interface text is interface design. A screen with perfect spacing and a vague button label is a broken screen. Most of what follows costs nothing to apply and is invisible when done well.
|
|
8
|
+
|
|
9
|
+
Rules keep the `I-` prefix and their original numbers, which is why they are not contiguous — numbers are stable identifiers, never renumbered (`00-anti-patterns.md`).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Voice
|
|
14
|
+
|
|
15
|
+
### I-53 Title Case Used For Interface Text
|
|
16
|
+
❌ "Add To Cart", "Save Post for Later?"
|
|
17
|
+
✅ Sentence case: only the first word and proper nouns capitalised. "Add to cart", "Save post for later?"
|
|
18
|
+
Title case is harder to read — the eye expects lowercase, and each capital interrupts the scan. Its rules are also not standardised, so it is applied inconsistently even by people trying. Applies to headings, buttons, labels, menu items, table headers and dialog titles alike.
|
|
19
|
+
|
|
20
|
+
### I-55 Vague or inflated language
|
|
21
|
+
❌ "Utilise", "leverage", "seamlessly", "Custom domains are the bee's knees"
|
|
22
|
+
✅ Write as if talking to a capable person unfamiliar with the topic. Short words over long ones. No jargon, no slang, no technical vocabulary the reader has not been given. Contractions are good — "you're", "they're", "who's" — they read as speech rather than documentation.
|
|
23
|
+
|
|
24
|
+
### I-79 Padding words and introductory phrases
|
|
25
|
+
❌ "Would you like to save the article? Don't worry, you'll still be able to publish it later."
|
|
26
|
+
✅ "Save article? Save the article to your library to publish later"
|
|
27
|
+
Cut: **filler** — actually, basically, really, truthfully, quite. **Introductory phrases** — "would you like to", "in order to", "when it comes to", "are you sure", "there are", "it is". **Articles**, where the meaning survives without them.
|
|
28
|
+
Keep sentences under 20 words. A sentence with several commas loses the reader partway.
|
|
29
|
+
The test: remove a word. If nothing is lost, it was not doing anything.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Structure
|
|
34
|
+
|
|
35
|
+
### I-54 Text that buries the point
|
|
36
|
+
❌ "You should read these 5 UI design eBooks", "Subscribe to my newsletter to learn UI design"
|
|
37
|
+
✅ Front-load — the key information first. "5 UI design eBooks you should read", "Learn UI design by subscribing to my newsletter"
|
|
38
|
+
People scan the first two or three words of a line and skip the rest. Applies hardest to headings, links and buttons, which are also read out of context by screen readers.
|
|
39
|
+
|
|
40
|
+
### I-80 Long text without a structure
|
|
41
|
+
❌ A run of text with no ordering — context first, the conclusion buried in the middle, and the thing the reader has to do somewhere near the end.
|
|
42
|
+
✅ For anything longer than a sentence, use the **inverted pyramid**: most important information first, supporting detail next, background last.
|
|
43
|
+
|
|
44
|
+
| Layer | Goes in |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| Most important | The heading — enough on its own to complete the task |
|
|
47
|
+
| Supporting | The paragraph beneath, for those who need more |
|
|
48
|
+
| Background | A separate screen or a disclosure (`P-11`) |
|
|
49
|
+
|
|
50
|
+
Someone who reads only the heading still gets the point. Someone who needs the detail can find it. Nobody is made to read background information to reach the action.
|
|
51
|
+
|
|
52
|
+
### I-81 Vague headings
|
|
53
|
+
❌ "Location", "Check-in", "Parking"
|
|
54
|
+
✅ "Beautiful waterfront location", "Fast check-in experience", "Free secure parking"
|
|
55
|
+
A heading must carry its own meaning. People scan headings and skip the supporting text, and screen reader users routinely pull up a list of every heading on a page to navigate — a list of one-word labels tells them nothing.
|
|
56
|
+
Break long passages into groups with a descriptive heading each, rather than one unbroken block.
|
|
57
|
+
|
|
58
|
+
### I-82 Uneven text length across parallel elements
|
|
59
|
+
❌ Three feature columns of two, four and three lines
|
|
60
|
+
✅ Write parallel elements to a similar length. Uneven blocks break the alignment that groups them (`03` layout method) and make a tidy layout look accidental. Edit the long one down rather than padding the short one.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Words
|
|
65
|
+
|
|
66
|
+
### I-83 Numbers spelled out
|
|
67
|
+
❌ "eight hundred and ninety nine designers"
|
|
68
|
+
✅ "899 designers". Numerals have a different shape to letters, so they are faster to find and read, and anyone looking for a figure expects a figure.
|
|
69
|
+
Format consistently: **1,000** not 1000. For very large numbers, mix numerals and words — **1 billion**, not 1,000,000,000 — so nobody has to count digits.
|
|
70
|
+
|
|
71
|
+
### I-84 Abbreviations and acronyms
|
|
72
|
+
❌ "Apt. no.", "The ETA of the dept. manager is COB tomorrow"
|
|
73
|
+
✅ "Apartment number". Write it out. Abbreviations save a few characters and cost the reader a moment of decoding every time.
|
|
74
|
+
Where one is genuinely necessary, expand it on first use: "ETA (estimated time of arrival)". Best is usually to remove it altogether, even if the sentence gets longer.
|
|
75
|
+
|
|
76
|
+
### I-85 UPPERCASE
|
|
77
|
+
❌ Uppercase sentences, uppercase buttons, uppercase anything long
|
|
78
|
+
✅ Reading works by word shape, and every uppercase word is the same rectangle, so the reader is forced letter by letter.
|
|
79
|
+
The one legitimate use is a **short label** distinguishing itself from nearby text — a category or section marker. Then: small size, bold weight, and increased letter spacing (`--tracking-caps`). 14px bold with generous tracking reads as a label; 18px regular with none reads as shouting.
|
|
80
|
+
|
|
81
|
+
### I-86 Full stops on fragments
|
|
82
|
+
❌ "Property features." · "Free secure parking."
|
|
83
|
+
✅ Most interface text is too short to need them. Use a full stop only where the text is a complete sentence containing commas.
|
|
84
|
+
Whichever you choose, be consistent across sibling elements — a list where three items end in a stop and two do not looks like a mistake, because it is one.
|
|
85
|
+
|
|
86
|
+
### I-87 Inconsistent vocabulary
|
|
87
|
+
❌ "Add to cart" beside a "Bag" icon; "Sign up" on the page and "Register" in the nav
|
|
88
|
+
✅ One word per concept, everywhere. Keep a term list in the project and follow it.
|
|
89
|
+
The usual offenders: cart / bag · sign up / register · log in / sign in · delete / remove · publish / post · subscribe / join · edit / update.
|
|
90
|
+
Users assume different words mean different things, because in a well-built interface they do.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Labels and links
|
|
95
|
+
|
|
96
|
+
### I-88 "My" or "your" on form labels
|
|
97
|
+
❌ "My email", "Your email"
|
|
98
|
+
✅ "Email". Think of the interface as speaking to the user: a field labelled "My email" refers to the *interface's* email. "Your" is at least accurate but usually unnecessary. Mixing both in one product is the worst case.
|
|
99
|
+
|
|
100
|
+
### I-89 Generic link text
|
|
101
|
+
❌ "Learn more", "Read more", "Click here" — especially three "Learn more" links in a row
|
|
102
|
+
✅ Name the destination: "Explore templates", "How affiliates work", "Email marketing features".
|
|
103
|
+
Screen reader users pull up a list of every link on a page; a list of "learn more" is useless. Sighted users scanning have to read the surrounding text to work out where each one goes. Three identical links also imply one destination.
|
|
104
|
+
"Click here" is worse still: it explains a mechanism people already understand, and it is wrong for anyone on touch, keyboard or voice.
|
|
105
|
+
Often the cleanest fix is to drop the link and make the **heading** the link.
|
|
106
|
+
|
|
107
|
+
### I-57 Actions and text centred by default
|
|
108
|
+
❌ Centred buttons and centred body text as a general habit
|
|
109
|
+
✅ Start-align text and actions. A consistent left edge scans faster, and a start-aligned action stays inside the viewport of someone using a screen magnifier.
|
|
110
|
+
|
|
111
|
+
### I-56 Brand colour spent on decoration
|
|
112
|
+
❌ Brand colour on headings and dividers while links and buttons are neutral
|
|
113
|
+
✅ Reserve `--color-brand` for interactive elements. The implication runs **one way**: brand colour means interactive; interactive need not mean brand colour (`C-49`, `C-50`).
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Errors
|
|
118
|
+
|
|
119
|
+
### I-90 Error messages that report without helping
|
|
120
|
+
❌ "Oops, something went wrong! Your payment wasn't successful as an error occurred" → **OK**
|
|
121
|
+
✅ "Payment failed. Update your payment details and try again" → **Update payment details**
|
|
122
|
+
|
|
123
|
+
An error message has three jobs: say **what happened**, say **why** where it helps, and give the **way forward**. Then:
|
|
124
|
+
|
|
125
|
+
- **Never blame the user.** Not "you entered an invalid card number" but "that card number doesn't look right".
|
|
126
|
+
- **Cut the apology.** "Please", "sorry", "oops", "unfortunately" add length and delay the useful part. A cheerful "Oops!" above a failed payment is worse than nothing.
|
|
127
|
+
- **No system voice.** No codes, stack traces or internal terminology in front of a user.
|
|
128
|
+
- **Make the heading and the button descriptive enough to work alone.** Someone who reads only "Payment failed" and the button label can recover without the paragraph.
|
|
129
|
+
|
|
130
|
+
See `P-01` for *where* the message goes and `F-37` for field-level validation text.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Checklist
|
|
135
|
+
|
|
136
|
+
1. Sentence case throughout? (`I-53`)
|
|
137
|
+
2. Any word removable without loss? (`I-79`)
|
|
138
|
+
3. Key information first in every heading, link and button? (`I-54`)
|
|
139
|
+
4. Every heading meaningful read on its own? (`I-81`)
|
|
140
|
+
5. Every link naming its destination? (`I-89`)
|
|
141
|
+
6. Numerals as figures, formatted consistently? (`I-83`)
|
|
142
|
+
7. One word per concept across the whole product? (`I-87`)
|
|
143
|
+
8. Every error saying what happened and what to do next? (`I-90`)
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Notes for the author (not for the agent)
|
|
148
|
+
|
|
149
|
+
**Where your taste is recorded here:** the ban on apology words in errors, and `I-90`'s requirement that the heading and button work without the body text. Both come from the same instinct as the rest of the system — the person reading is trying to get something done, and the interface should not make them wade.
|
|
150
|
+
|
|
151
|
+
`I-87` is the rule most likely to need a project-specific companion. A term list belongs in the brand file's voice section, not here; this rule only says that one must exist and be followed.
|
|
152
|
+
|
|
153
|
+
Deliberately absent: tone-of-voice guidance beyond plain language. Tone is a brand decision and varies per client, so it belongs in `03-brand.md` when that file exists.
|