@mohammadhprp/system-prompt 0.11.0 → 0.11.2
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/framework/agents/backend-architect.md +1 -1
- package/framework/commands/commit.md +0 -3
- package/framework/mcps/figma-mcp-go/README.md +0 -1
- package/framework/mcps/gitlab-mcp/README.md +0 -1
- package/framework/mcps/jira-mcp/README.md +0 -1
- package/framework/mcps/laravel-boost/README.md +0 -1
- package/framework/mcps/notion-mcp/README.md +0 -1
- package/framework/mcps/supabase-mcp/README.md +0 -1
- package/framework/plugins/opencode-goal-plugin/README.md +0 -1
- package/framework/references/standards/api.md +0 -1
- package/framework/references/standards/architecture.md +0 -1
- package/framework/references/standards/database.md +0 -1
- package/framework/references/standards/debugging.md +0 -1
- package/framework/references/standards/documentation.md +0 -2
- package/framework/references/standards/logging.md +0 -1
- package/framework/references/standards/naming.md +0 -1
- package/framework/references/standards/observability.md +0 -1
- package/framework/references/standards/performance.md +0 -1
- package/framework/references/standards/pull-requests.md +0 -1
- package/framework/references/standards/security.md +0 -1
- package/framework/references/standards/testing.md +0 -1
- package/framework/skills/README.md +15 -3
- package/framework/skills/codenavi/SKILL.md +306 -0
- package/framework/skills/codenavi/examples.md +33 -0
- package/framework/skills/codenavi/references/coding-principles.md +143 -0
- package/framework/skills/codenavi/references/notebook-spec.md +171 -0
- package/framework/skills/create-adr/SKILL.md +429 -0
- package/framework/skills/create-adr/examples.md +35 -0
- package/framework/skills/docs-writer/SKILL.md +39 -0
- package/framework/skills/docs-writer/examples.md +34 -0
- package/framework/skills/docs-writer/references/style-guide.md +72 -0
- package/framework/skills/frontend-design/SKILL.md +55 -0
- package/framework/skills/frontend-design/examples.md +45 -0
- package/framework/skills/humanizer/SKILL.md +412 -0
- package/framework/skills/humanizer/examples.md +46 -0
- package/framework/skills/learning-opportunities/SKILL.md +140 -0
- package/framework/skills/learning-opportunities/examples.md +34 -0
- package/framework/skills/learning-opportunities/references/PRINCIPLES.md +42 -0
- package/framework/skills/perf-web-optimization/SKILL.md +163 -0
- package/framework/skills/perf-web-optimization/examples.md +35 -0
- package/framework/skills/perf-web-optimization/references/bundle-optimization.md +180 -0
- package/framework/skills/perf-web-optimization/references/core-web-vitals.md +154 -0
- package/framework/skills/perf-web-optimization/references/image-optimization.md +170 -0
- package/framework/skills/security-best-practices/LICENSE.txt +201 -0
- package/framework/skills/security-best-practices/SKILL.md +89 -0
- package/framework/skills/security-best-practices/examples.md +35 -0
- package/framework/skills/security-best-practices/references/golang-general-backend-security.md +988 -0
- package/framework/skills/security-best-practices/references/javascript-express-web-server-security.md +1151 -0
- package/framework/skills/security-best-practices/references/javascript-general-web-frontend-security.md +725 -0
- package/framework/skills/security-best-practices/references/javascript-jquery-web-frontend-security.md +672 -0
- package/framework/skills/security-best-practices/references/javascript-typescript-nextjs-web-server-security.md +1138 -0
- package/framework/skills/security-best-practices/references/javascript-typescript-react-web-frontend-security.md +975 -0
- package/framework/skills/security-best-practices/references/javascript-typescript-vue-web-frontend-security.md +789 -0
- package/framework/skills/security-best-practices/references/python-django-web-server-security.md +880 -0
- package/framework/skills/security-best-practices/references/python-fastapi-web-server-security.md +1030 -0
- package/framework/skills/security-best-practices/references/python-flask-web-server-security.md +835 -0
- package/framework/skills/sentry/SKILL.md +127 -0
- package/framework/skills/sentry/examples.md +34 -0
- package/framework/skills/sentry/scripts/sentry_api.py +238 -0
- package/framework/skills/show-me/SKILL.md +127 -0
- package/framework/skills/show-me/examples.md +78 -0
- package/framework/skills/spec-driven-eval/SKILL.md +341 -0
- package/framework/skills/spec-driven-eval/examples.md +35 -0
- package/framework/skills/spec-driven-eval/references/quickstart.md +118 -0
- package/framework/skills/spec-driven-eval/references/reference.md +295 -0
- package/framework/skills/technical-design-doc-creator/README.md +411 -0
- package/framework/skills/technical-design-doc-creator/SKILL.md +1484 -0
- package/framework/skills/technical-design-doc-creator/examples.md +35 -0
- package/framework/skills/tlc-spec-driven/SKILL.md +184 -0
- package/framework/skills/tlc-spec-driven/examples.md +34 -0
- package/framework/skills/tlc-spec-driven/references/code-analysis.md +98 -0
- package/framework/skills/tlc-spec-driven/references/coding-principles.md +72 -0
- package/framework/skills/tlc-spec-driven/references/context-limits.md +31 -0
- package/framework/skills/tlc-spec-driven/references/design.md +199 -0
- package/framework/skills/tlc-spec-driven/references/discuss.md +159 -0
- package/framework/skills/tlc-spec-driven/references/implement.md +436 -0
- package/framework/skills/tlc-spec-driven/references/lessons.md +115 -0
- package/framework/skills/tlc-spec-driven/references/memory.md +144 -0
- package/framework/skills/tlc-spec-driven/references/specify.md +228 -0
- package/framework/skills/tlc-spec-driven/references/sub-agents.md +147 -0
- package/framework/skills/tlc-spec-driven/references/tasks.md +451 -0
- package/framework/skills/tlc-spec-driven/references/validate.md +355 -0
- package/framework/skills/tlc-spec-driven/scripts/check_commit.py +115 -0
- package/framework/skills/tlc-spec-driven/scripts/lessons.py +412 -0
- package/framework/skills/tlc-spec-driven/scripts/validate_spec.py +260 -0
- package/framework/skills/tlc-spec-driven/scripts/validate_state.py +162 -0
- package/framework/skills/tlc-spec-driven/scripts/validate_tasks.py +251 -0
- package/framework/skills/web-design-guidelines/SKILL.md +65 -0
- package/framework/skills/web-design-guidelines/examples.md +32 -0
- package/framework/skills/web-design-guidelines/references/guideline.md +174 -0
- package/package.json +1 -1
- package/src/catalog.js +15 -3
- package/src/installer.js +66 -1
- package/framework/skills/backend-engineer/SKILL.md +0 -76
- package/framework/skills/backend-engineer/examples.md +0 -31
- package/framework/skills/documentation/SKILL.md +0 -74
- package/framework/skills/documentation/examples.md +0 -31
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-adr
|
|
3
|
+
description: Creates Architecture Decision Records (ADRs) to document significant architectural choices and their rationale for future team members. Use when the user says "write an ADR", "document this decision", "record why we chose X", "add an architecture decision record", "create an ADR for", or wants to capture the reasoning behind a technical choice so the team understands it later. Do NOT use when the decision hasn't been made yet (use create-rfc instead), for implementation planning (use technical-design-doc-creator), or for general documentation.
|
|
4
|
+
license: CC-BY-4.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: Tech Leads Club - github.com/tech-leads-club
|
|
7
|
+
version: '1.0.0'
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# ADR Creator
|
|
11
|
+
|
|
12
|
+
You are an expert in creating Architecture Decision Records (ADRs) — concise, durable documents that capture the context, decision, and consequences of significant architectural choices so future team members understand *why* things are the way they are.
|
|
13
|
+
|
|
14
|
+
## When to Use This Skill
|
|
15
|
+
|
|
16
|
+
Use this skill when:
|
|
17
|
+
|
|
18
|
+
- User asks to "write an ADR", "create an ADR", "add an architecture decision record"
|
|
19
|
+
- User wants to "document why we chose X", "record this decision", "capture this architectural choice"
|
|
20
|
+
- A significant technical decision has been made (or is being finalized) and needs to be recorded
|
|
21
|
+
- The team wants to preserve the reasoning behind a choice for future engineers
|
|
22
|
+
- User asks "why did we choose X" and the answer should be written down permanently
|
|
23
|
+
|
|
24
|
+
Do NOT use for:
|
|
25
|
+
|
|
26
|
+
- Decisions not yet made — use `create-rfc` to drive the decision process first
|
|
27
|
+
- Implementation planning after the decision — use `technical-design-doc-creator`
|
|
28
|
+
- Simple configuration choices or trivial code decisions
|
|
29
|
+
- Meeting notes or general documentation
|
|
30
|
+
|
|
31
|
+
## ADR vs RFC — Critical Distinction
|
|
32
|
+
|
|
33
|
+
| Aspect | ADR | RFC |
|
|
34
|
+
|--------|-----|-----|
|
|
35
|
+
| **Timing** | Decision already made (or being finalized) | Before the decision (seeking input) |
|
|
36
|
+
| **Purpose** | Record for future team members | Proposal seeking approval |
|
|
37
|
+
| **Audience** | Engineers joining months or years later | Current stakeholders |
|
|
38
|
+
| **Length** | Short — 200–500 words | Long — thorough comparison |
|
|
39
|
+
| **Mutability** | Immutable — superseded, never edited | Iterative — evolves during review |
|
|
40
|
+
| **Tone** | Historical record | Deliberative proposal |
|
|
41
|
+
|
|
42
|
+
If the user says "I need to decide whether to do X" → use `create-rfc`.
|
|
43
|
+
If the user says "We decided to do X, let me document it" → use this skill.
|
|
44
|
+
|
|
45
|
+
## Language Adaptation
|
|
46
|
+
|
|
47
|
+
**CRITICAL**: Always generate the ADR in the **same language as the user's request**. Detect the language automatically.
|
|
48
|
+
|
|
49
|
+
- Keep technical terms in English when appropriate (e.g., "ADR", "API", "microservices")
|
|
50
|
+
- All section headers and content should be in the user's language
|
|
51
|
+
- Company/product names remain in original form
|
|
52
|
+
|
|
53
|
+
## ADR Format Selection
|
|
54
|
+
|
|
55
|
+
Three formats are widely used. Detect the right one from context, or ask:
|
|
56
|
+
|
|
57
|
+
| Format | Best For | Length |
|
|
58
|
+
|--------|----------|--------|
|
|
59
|
+
| **MADR** (Markdown ADR) | Teams that want structured options comparison | Medium |
|
|
60
|
+
| **Nygard** (original) | Minimal, fast recording; obvious decisions | Short |
|
|
61
|
+
| **Y-Statement** | Inline documentation, very compact contexts | One paragraph |
|
|
62
|
+
|
|
63
|
+
Default to **MADR** unless the user specifies otherwise or the decision is very simple.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Interactive Workflow
|
|
68
|
+
|
|
69
|
+
### Step 1: Gather Context (if not provided)
|
|
70
|
+
|
|
71
|
+
If the user provides minimal context, use **AskQuestion** to collect essential information:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"title": "ADR Information",
|
|
76
|
+
"questions": [
|
|
77
|
+
{
|
|
78
|
+
"id": "adr_decision",
|
|
79
|
+
"prompt": "What was the decision made? (e.g., 'Use PostgreSQL for primary storage')",
|
|
80
|
+
"options": [
|
|
81
|
+
{ "id": "free_text", "label": "I'll describe it in my next message" }
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "adr_format",
|
|
86
|
+
"prompt": "Which ADR format would you like to use?",
|
|
87
|
+
"options": [
|
|
88
|
+
{ "id": "madr", "label": "MADR — structured, with options comparison (recommended)" },
|
|
89
|
+
{ "id": "nygard", "label": "Nygard — minimal: Context / Decision / Consequences" },
|
|
90
|
+
{ "id": "y_statement", "label": "Y-Statement — single paragraph, very compact" }
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "adr_status",
|
|
95
|
+
"prompt": "What is the current status of this decision?",
|
|
96
|
+
"options": [
|
|
97
|
+
{ "id": "accepted", "label": "Accepted — decision is final" },
|
|
98
|
+
{ "id": "proposed", "label": "Proposed — decision is being finalized" },
|
|
99
|
+
{ "id": "deprecated", "label": "Deprecated — this approach is no longer recommended" },
|
|
100
|
+
{ "id": "superseded", "label": "Superseded — replaced by a newer decision" }
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "adr_supersedes",
|
|
105
|
+
"prompt": "Does this ADR supersede a previous decision?",
|
|
106
|
+
"options": [
|
|
107
|
+
{ "id": "yes", "label": "Yes — I'll provide the ADR number/title" },
|
|
108
|
+
{ "id": "no", "label": "No — this is a new decision" }
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Step 2: Validate Mandatory Fields
|
|
116
|
+
|
|
117
|
+
**MANDATORY fields — ask if missing**:
|
|
118
|
+
|
|
119
|
+
- **Decision title** (noun phrase, not a question — e.g., "Use Redis for session storage")
|
|
120
|
+
- **Date** of the decision (or today's date)
|
|
121
|
+
- **Status** (Accepted / Proposed / Deprecated / Superseded)
|
|
122
|
+
- **Context** — the forces, constraints, and situation that made this decision necessary
|
|
123
|
+
- **The decision itself** — what was chosen and why
|
|
124
|
+
- **Consequences** — what becomes easier, harder, or different as a result
|
|
125
|
+
|
|
126
|
+
**RECOMMENDED fields**:
|
|
127
|
+
- **Decision drivers** — the key criteria or constraints
|
|
128
|
+
- **Options considered** — what alternatives were evaluated
|
|
129
|
+
- **Pros/cons per option** — honest trade-off assessment
|
|
130
|
+
- **Decision outcome rationale** — why this option over the others
|
|
131
|
+
- **Links** — related ADRs, RFCs, tickets, or documentation
|
|
132
|
+
|
|
133
|
+
If any mandatory fields are missing, ask IN THE USER'S LANGUAGE before generating the document.
|
|
134
|
+
|
|
135
|
+
### Step 3: Assign ADR Number
|
|
136
|
+
|
|
137
|
+
Scan the existing ADR directory for the next sequential number:
|
|
138
|
+
|
|
139
|
+
1. Check if an ADR directory exists (`docs/adr/`, `docs/decisions/`, `.adr/`, or `adr/`)
|
|
140
|
+
2. Find the highest existing number
|
|
141
|
+
3. Assign the next number (e.g., if ADR-007 exists, this becomes ADR-008)
|
|
142
|
+
4. If no directory exists, start at ADR-001 and suggest creating the directory
|
|
143
|
+
|
|
144
|
+
### Step 4: Generate the ADR
|
|
145
|
+
|
|
146
|
+
Generate the ADR following the format selected in Step 1.
|
|
147
|
+
|
|
148
|
+
### Step 5: Offer File Placement
|
|
149
|
+
|
|
150
|
+
After generating, ask where to save it:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
ADR Created: "ADR-{NNN}: {Title}"
|
|
154
|
+
|
|
155
|
+
Suggested file path: docs/adr/{NNN}-{kebab-case-title}.md
|
|
156
|
+
|
|
157
|
+
Would you like me to:
|
|
158
|
+
1. Save it to docs/adr/ (recommended convention)
|
|
159
|
+
2. Save it to a different location
|
|
160
|
+
3. Just show the content (I'll place it manually)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Document Templates
|
|
166
|
+
|
|
167
|
+
### MADR Format (Default)
|
|
168
|
+
|
|
169
|
+
```markdown
|
|
170
|
+
# ADR-{NNN}: {Title}
|
|
171
|
+
|
|
172
|
+
- **Date**: YYYY-MM-DD
|
|
173
|
+
- **Status**: Accepted | Proposed | Deprecated | Superseded by [ADR-NNN]({link})
|
|
174
|
+
- **Deciders**: {who was involved in the decision}
|
|
175
|
+
- **Tags**: {optional: architecture, security, performance, database, etc.}
|
|
176
|
+
|
|
177
|
+
## Context and Problem Statement
|
|
178
|
+
|
|
179
|
+
{Describe the context and the problem or question that led to this decision.
|
|
180
|
+
2–4 sentences. What situation forced this choice?}
|
|
181
|
+
|
|
182
|
+
## Decision Drivers
|
|
183
|
+
|
|
184
|
+
- {Driver 1 — e.g., "Must support 10k concurrent users"}
|
|
185
|
+
- {Driver 2 — e.g., "Team has no Go experience"}
|
|
186
|
+
- {Driver 3 — e.g., "Must be deployable on-premise"}
|
|
187
|
+
|
|
188
|
+
## Considered Options
|
|
189
|
+
|
|
190
|
+
- {Option A}
|
|
191
|
+
- {Option B}
|
|
192
|
+
- {Option C — "Do nothing / status quo" when relevant}
|
|
193
|
+
|
|
194
|
+
## Decision Outcome
|
|
195
|
+
|
|
196
|
+
Chosen option: **"{Option A}"**, because {concise rationale tied to decision drivers}.
|
|
197
|
+
|
|
198
|
+
### Positive Consequences
|
|
199
|
+
|
|
200
|
+
- {Benefit 1}
|
|
201
|
+
- {Benefit 2}
|
|
202
|
+
|
|
203
|
+
### Negative Consequences
|
|
204
|
+
|
|
205
|
+
- {Trade-off 1 — be honest}
|
|
206
|
+
- {Trade-off 2}
|
|
207
|
+
|
|
208
|
+
## Pros and Cons of the Options
|
|
209
|
+
|
|
210
|
+
### {Option A} ✅ Chosen
|
|
211
|
+
|
|
212
|
+
- ✅ {Pro 1}
|
|
213
|
+
- ✅ {Pro 2}
|
|
214
|
+
- ❌ {Con 1}
|
|
215
|
+
|
|
216
|
+
### {Option B}
|
|
217
|
+
|
|
218
|
+
- ✅ {Pro 1}
|
|
219
|
+
- ❌ {Con 1}
|
|
220
|
+
- ❌ {Con 2}
|
|
221
|
+
|
|
222
|
+
### {Option C}
|
|
223
|
+
|
|
224
|
+
- ✅ {Pro 1}
|
|
225
|
+
- ❌ {Con 1}
|
|
226
|
+
|
|
227
|
+
## Links
|
|
228
|
+
|
|
229
|
+
- {Related ADR, RFC, ticket, or documentation}
|
|
230
|
+
- Supersedes: [ADR-{NNN}: {Title}]({link}) (if applicable)
|
|
231
|
+
- Superseded by: [ADR-{NNN}: {Title}]({link}) (if applicable)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### Nygard Format (Minimal)
|
|
237
|
+
|
|
238
|
+
```markdown
|
|
239
|
+
# ADR-{NNN}: {Title}
|
|
240
|
+
|
|
241
|
+
## Status
|
|
242
|
+
|
|
243
|
+
Accepted | Proposed | Deprecated | Superseded by ADR-{NNN}
|
|
244
|
+
|
|
245
|
+
## Context
|
|
246
|
+
|
|
247
|
+
{What is the situation that led to this decision?
|
|
248
|
+
What forces are at play — technical, business, organizational?
|
|
249
|
+
What constraints exist? 2–5 sentences.}
|
|
250
|
+
|
|
251
|
+
## Decision
|
|
252
|
+
|
|
253
|
+
{What did we decide to do?
|
|
254
|
+
State it directly, in active voice: "We will use X" or "We decided to adopt Y."
|
|
255
|
+
Include a brief rationale — why this option over the alternatives.}
|
|
256
|
+
|
|
257
|
+
## Consequences
|
|
258
|
+
|
|
259
|
+
{What becomes easier or better as a result?}
|
|
260
|
+
{What becomes harder or worse? Be honest about trade-offs.}
|
|
261
|
+
{What new concerns or constraints does this introduce?}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
### Y-Statement Format (Compact)
|
|
267
|
+
|
|
268
|
+
```markdown
|
|
269
|
+
# ADR-{NNN}: {Title}
|
|
270
|
+
|
|
271
|
+
**Date**: YYYY-MM-DD | **Status**: Accepted
|
|
272
|
+
|
|
273
|
+
In the context of **{situation/use case}**,
|
|
274
|
+
facing **{concern or constraint}**,
|
|
275
|
+
we decided **{the option chosen}**,
|
|
276
|
+
to achieve **{quality attribute or goal}**,
|
|
277
|
+
accepting **{the downside or trade-off}**.
|
|
278
|
+
|
|
279
|
+
**Deciders**: {names or roles}
|
|
280
|
+
**Links**: {related ADRs, tickets}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## ADR Quality Checklist
|
|
286
|
+
|
|
287
|
+
Before finalizing, verify:
|
|
288
|
+
|
|
289
|
+
- [ ] **Title** is a noun phrase describing the decision (not a question, not a vague label)
|
|
290
|
+
- [ ] **Date** is included (decisions without dates lose context quickly)
|
|
291
|
+
- [ ] **Status** is set correctly — Accepted, Proposed, Deprecated, or Superseded
|
|
292
|
+
- [ ] **Context** explains the *forces* that made this decision necessary, not just what was done
|
|
293
|
+
- [ ] **Decision** is stated directly and tied to the context
|
|
294
|
+
- [ ] **Consequences** include honest trade-offs — not just positives
|
|
295
|
+
- [ ] **Options** (MADR format) include at least 2 alternatives actually considered
|
|
296
|
+
- [ ] **Supersedes / superseded by** links are included when applicable
|
|
297
|
+
- [ ] **File** follows naming convention: `NNN-kebab-case-title.md`
|
|
298
|
+
- [ ] **Number** is sequential in the ADR directory
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## ADR File Naming Convention
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
docs/adr/
|
|
306
|
+
├── 001-use-postgresql-for-primary-storage.md
|
|
307
|
+
├── 002-adopt-event-driven-architecture.md
|
|
308
|
+
├── 003-replace-jenkins-with-github-actions.md ← supersedes ADR-001 if relevant
|
|
309
|
+
└── README.md ← optional index
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
- Zero-padded numbers: `001`, `002`, ... `099`, `100`
|
|
313
|
+
- Kebab-case title
|
|
314
|
+
- `.md` extension
|
|
315
|
+
- Common directories: `docs/adr/`, `docs/decisions/`, `adr/`, `.adr/`
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Common Anti-Patterns to Avoid
|
|
320
|
+
|
|
321
|
+
### Title as a Question
|
|
322
|
+
|
|
323
|
+
**BAD**: `# ADR-001: Should we use PostgreSQL?`
|
|
324
|
+
|
|
325
|
+
**GOOD**: `# ADR-001: Use PostgreSQL for Primary Storage`
|
|
326
|
+
|
|
327
|
+
Titles should record the decision, not the question. Future readers need to know *what was decided*, not what was considered.
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
### Vague Context
|
|
332
|
+
|
|
333
|
+
**BAD**:
|
|
334
|
+
```
|
|
335
|
+
We needed a database and chose PostgreSQL.
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**GOOD**:
|
|
339
|
+
```
|
|
340
|
+
Our application requires a relational database with strong ACID guarantees.
|
|
341
|
+
The team has deep PostgreSQL experience. MySQL was evaluated but lacks
|
|
342
|
+
native support for JSONB columns, which our schema design requires.
|
|
343
|
+
Our cloud provider (AWS) offers managed PostgreSQL via RDS at acceptable cost.
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Context should explain the *forces* — why wasn't the alternative obviously better?
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
### Consequences Without Trade-offs
|
|
351
|
+
|
|
352
|
+
**BAD**:
|
|
353
|
+
```
|
|
354
|
+
## Consequences
|
|
355
|
+
PostgreSQL is fast and reliable.
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
**GOOD**:
|
|
359
|
+
```
|
|
360
|
+
## Consequences
|
|
361
|
+
- Enables JSONB columns and advanced indexing for our query patterns
|
|
362
|
+
- Team expertise means fast onboarding and fewer operational surprises
|
|
363
|
+
- Adds operational burden compared to a managed NoSQL service
|
|
364
|
+
- Schema migrations require careful planning in a relational model
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
Honest trade-offs are what make ADRs valuable years later.
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
### Editing Instead of Superseding
|
|
372
|
+
|
|
373
|
+
**BAD**: Editing an old ADR to change the decision after the fact.
|
|
374
|
+
|
|
375
|
+
**GOOD**: Creating a new ADR with `Status: Superseded by ADR-{NNN}` on the old one and linking back.
|
|
376
|
+
|
|
377
|
+
ADRs are historical records. The old decision was correct *given what was known at the time*. Superseding preserves that context.
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
### Missing the "Why Not" Rationale
|
|
382
|
+
|
|
383
|
+
**BAD**:
|
|
384
|
+
```
|
|
385
|
+
## Decision
|
|
386
|
+
We will use Redis for session storage.
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**GOOD**:
|
|
390
|
+
```
|
|
391
|
+
## Decision
|
|
392
|
+
We will use Redis for session storage. We considered storing sessions in PostgreSQL
|
|
393
|
+
(already in our stack) but Redis's built-in TTL support and in-memory performance
|
|
394
|
+
make it significantly better suited for high-frequency session reads. The operational
|
|
395
|
+
cost of an additional service is justified by the simplified session expiry logic.
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
The rationale is *why this option and not the others* — not just what was chosen.
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## Important Notes
|
|
403
|
+
|
|
404
|
+
- **ADRs are immutable** — never edit the decision. Supersede with a new ADR.
|
|
405
|
+
- **Short is better** — 200–500 words is ideal. If it needs to be longer, move detail to a linked TDD or RFC.
|
|
406
|
+
- **Context ages** — always date the ADR; what seems obvious now won't be in 3 years.
|
|
407
|
+
- **Honest consequences** — a one-sided ADR loses credibility. Future engineers will hit the downsides regardless.
|
|
408
|
+
- **Link everything** — related ADRs, the RFC that drove the decision, tickets, PR references.
|
|
409
|
+
- **Language adaptation** — always write in the user's language.
|
|
410
|
+
- **Number sequentially** — check the directory before assigning a number.
|
|
411
|
+
|
|
412
|
+
## Example Prompts that Trigger This Skill
|
|
413
|
+
|
|
414
|
+
### English
|
|
415
|
+
- "Write an ADR for using PostgreSQL as our primary database"
|
|
416
|
+
- "Document our decision to adopt GraphQL"
|
|
417
|
+
- "Create an ADR for moving our frontend to Next.js"
|
|
418
|
+
- "I need to record why we chose Kafka over RabbitMQ"
|
|
419
|
+
- "Add an architecture decision record for our authentication approach"
|
|
420
|
+
|
|
421
|
+
### Portuguese
|
|
422
|
+
- "Escreva um ADR sobre a decisão de usar PostgreSQL"
|
|
423
|
+
- "Documente a decisão de adotar GraphQL no projeto"
|
|
424
|
+
- "Crie um ADR explicando por que escolhemos Kafka"
|
|
425
|
+
|
|
426
|
+
### Spanish
|
|
427
|
+
- "Escribe un ADR sobre la decisión de usar PostgreSQL"
|
|
428
|
+
- "Documenta la decisión de adoptar microservicios"
|
|
429
|
+
- "Crea un ADR explicando por qué elegimos Next.js"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Create ADR Examples
|
|
2
|
+
|
|
3
|
+
## Record a finalized database decision
|
|
4
|
+
|
|
5
|
+
User: "Write an ADR for using PostgreSQL as our primary database."
|
|
6
|
+
|
|
7
|
+
Good agent behavior:
|
|
8
|
+
|
|
9
|
+
- Detect the user's language and generate the ADR in it, keeping technical terms like "ADR" and "API" in English.
|
|
10
|
+
- Gather the mandatory fields: decision title, date, status, context, decision, and consequences.
|
|
11
|
+
- Scan the ADR directory for the next sequential number before assigning one.
|
|
12
|
+
- Default to the MADR format with a structured comparison of the options considered.
|
|
13
|
+
- Include honest trade-offs in the consequences, not just positives.
|
|
14
|
+
|
|
15
|
+
## Capture a decision that supersedes an old one
|
|
16
|
+
|
|
17
|
+
User: "We're replacing Jenkins with GitHub Actions. Document why."
|
|
18
|
+
|
|
19
|
+
Good agent behavior:
|
|
20
|
+
|
|
21
|
+
- Create a new ADR with status "Accepted" rather than editing the old one.
|
|
22
|
+
- Link it as superseding the Jenkins decision, and note that the old ADR should be marked "Superseded by ADR-{NNN}".
|
|
23
|
+
- Explain the forces behind the change and why the new choice wins given the current constraints.
|
|
24
|
+
- Follow the file naming convention with a zero-padded sequential number.
|
|
25
|
+
|
|
26
|
+
## The decision hasn't been made yet
|
|
27
|
+
|
|
28
|
+
User: "I'm trying to decide whether to adopt GraphQL."
|
|
29
|
+
|
|
30
|
+
Good agent behavior:
|
|
31
|
+
|
|
32
|
+
- Recognize this is an RFC situation, not an ADR: the decision is not yet made.
|
|
33
|
+
- Point the user to `create-rfc` to drive the decision process first.
|
|
34
|
+
- Explain that ADRs record decisions that are finalized, while RFCs are proposals seeking input.
|
|
35
|
+
- Offer to create the RFC instead of forcing an ADR before the decision exists.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docs-writer
|
|
3
|
+
description: Write, review, and edit documentation files with consistent structure, tone, and technical accuracy. Use when creating docs, reviewing markdown files, writing READMEs, updating `/docs` directories, or when user says "write documentation", "review this doc", "improve this README", "create a guide", or "edit markdown". Do NOT use for code comments, inline JSDoc, or API reference generation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `docs-writer` skill instructions
|
|
7
|
+
|
|
8
|
+
As an expert technical writer and editor, your goal is to produce and refine documentation that is accurate, clear, consistent, and easy for users to understand. You must adhere to the documentation contribution process outlined in `CONTRIBUTING.md`.
|
|
9
|
+
|
|
10
|
+
## Step 1: Understand the goal and create a plan
|
|
11
|
+
|
|
12
|
+
1. **Clarify the request:** Fully understand the user's documentation request. Identify the core feature, command, or concept that needs work.
|
|
13
|
+
2. **Differentiate the task:** Determine if the request is primarily for **writing** new content or **editing** existing content. If the request is ambiguous (e.g., "fix the docs"), ask the user for clarification.
|
|
14
|
+
3. **Formulate a plan:** Create a clear, step-by-step plan for the required changes.
|
|
15
|
+
|
|
16
|
+
## Step 2: Investigate and gather information
|
|
17
|
+
|
|
18
|
+
1. **Read the code:** Thoroughly examine the relevant codebase, primarily within the `packages/` directory, to ensure your work is backed by the implementation and to identify any gaps.
|
|
19
|
+
2. **Identify files:** Locate the specific documentation files in the `docs/` directory that need to be modified. Always read the latest version of a file before you begin work.
|
|
20
|
+
3. **Check for connections:** Consider related documentation. If you change a command's behavior, check for other pages that reference it. If you add a new page, check if `docs/sidebar.json` needs to be updated. Make sure all links are up to date.
|
|
21
|
+
|
|
22
|
+
## Step 3: Write or edit the documentation
|
|
23
|
+
|
|
24
|
+
1. **Follow the style guide:** Adhere to the rules in `references/style-guide.md`. Read this file to understand the project's documentation standards.
|
|
25
|
+
2. Ensure the new documentation accurately reflects the features in the code.
|
|
26
|
+
3. **Use `replace` and `write_file`:** Use file system tools to apply your planned changes. For small edits, `replace` is preferred. For new files or large rewrites, `write_file` is more appropriate.
|
|
27
|
+
|
|
28
|
+
### Sub-step: Editing existing documentation (as clarified in Step 1)
|
|
29
|
+
|
|
30
|
+
- **Gaps:** Identify areas where the documentation is incomplete or no longer reflects existing code.
|
|
31
|
+
- **Tone:** Ensure the tone is active and engaging, not passive.
|
|
32
|
+
- **Clarity:** Correct awkward wording, spelling, and grammar. Rephrase sentences to make them easier for users to understand.
|
|
33
|
+
- **Consistency:** Check for consistent terminology and style across all edited documents.
|
|
34
|
+
|
|
35
|
+
## Step 4: Verify and finalize
|
|
36
|
+
|
|
37
|
+
1. **Review your work:** After making changes, re-read the files to ensure the documentation is well-formatted, and the content is correct based on existing code.
|
|
38
|
+
2. **Link verification:** Verify the validity of all links in the new content. Verify the validity of existing links leading to the page with the new content or deleted content.
|
|
39
|
+
3. **Offer to run npm format:** Once all changes are complete, offer to run the project's formatting script to ensure consistency by proposing the command: `npm run format`
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Docs Writer Examples
|
|
2
|
+
|
|
3
|
+
## Write a README from scratch
|
|
4
|
+
|
|
5
|
+
User: "Create a README for the CLI package."
|
|
6
|
+
|
|
7
|
+
Good agent behavior:
|
|
8
|
+
|
|
9
|
+
- Read the relevant code to ensure the README is backed by the actual implementation.
|
|
10
|
+
- Follow the project's style guide for structure and tone.
|
|
11
|
+
- Cover install, usage, and configuration with accurate command examples.
|
|
12
|
+
- Verify every link in the new content points at a real target.
|
|
13
|
+
|
|
14
|
+
## Review and improve existing docs
|
|
15
|
+
|
|
16
|
+
User: "Improve this markdown file, it reads awkwardly."
|
|
17
|
+
|
|
18
|
+
Good agent behavior:
|
|
19
|
+
|
|
20
|
+
- Read the latest version of the file before starting.
|
|
21
|
+
- Fix unclear phrasing, grammar, and passive voice while preserving the technical meaning.
|
|
22
|
+
- Check for consistent terminology across the edited document and related pages.
|
|
23
|
+
- Verify that links leading to the page still resolve after the edits.
|
|
24
|
+
|
|
25
|
+
## Update docs for a behavior change
|
|
26
|
+
|
|
27
|
+
User: "We renamed `build` to `compile`. Update the docs."
|
|
28
|
+
|
|
29
|
+
Good agent behavior:
|
|
30
|
+
|
|
31
|
+
- Search for every page referencing the command, not just the obvious one.
|
|
32
|
+
- Update the command docs and any tutorial, reference, or sidebar entries that mention it.
|
|
33
|
+
- Keep terminology consistent across all edited pages.
|
|
34
|
+
- Offer to run the project's formatting script to keep things consistent.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Documentation style guide
|
|
2
|
+
|
|
3
|
+
## I. Core principles
|
|
4
|
+
|
|
5
|
+
1. **Clarity:** Write for easy understanding. Prioritize clear, direct, and simple language.
|
|
6
|
+
2. **Consistency:** Use consistent terminology, formatting, and style throughout the documentation.
|
|
7
|
+
3. **Accuracy:** Ensure all information is technically correct and up-to-date.
|
|
8
|
+
4. **Accessibility:** Design documentation to be usable by everyone. Focus on semantic structure, clear link text, and image alternatives.
|
|
9
|
+
5. **Global audience:** Write in standard US English. Avoid slang, idioms, and cultural references.
|
|
10
|
+
6. **Prescriptive:** Guide the reader by recommending specific actions and paths, especially for complex tasks.
|
|
11
|
+
|
|
12
|
+
## II. Voice and tone
|
|
13
|
+
|
|
14
|
+
- **Professional yet friendly:** Maintain a helpful, knowledgeable, and conversational tone without being frivolous.
|
|
15
|
+
- **Direct:** Get straight to the point. Keep paragraphs short and focused.
|
|
16
|
+
- **Second person:** Address the reader as "you."
|
|
17
|
+
- **Present tense:** Use the present tense to describe functionality (e.g., "The API returns a JSON object.").
|
|
18
|
+
- **Avoid:** Jargon, slang, marketing hype, and overly casual language.
|
|
19
|
+
|
|
20
|
+
## III. Language and grammar
|
|
21
|
+
|
|
22
|
+
- **Active voice:** Prefer active voice over passive voice.
|
|
23
|
+
- _Example:_ "The system sends a notification." (Not: "A notification is sent by the system.")
|
|
24
|
+
- **Contractions:** Use common contractions (e.g., "don't," "it's") to maintain a natural tone.
|
|
25
|
+
- **Simple vocabulary:** Use common words. Define technical terms when necessary.
|
|
26
|
+
- **Conciseness:** Keep sentences short and focused, but don't omit helpful information.
|
|
27
|
+
- **"Please":** Avoid using the word "please."
|
|
28
|
+
|
|
29
|
+
## IV. Procedures and steps
|
|
30
|
+
|
|
31
|
+
- Start each step with an imperative verb (e.g., "Connect to the database").
|
|
32
|
+
- Number steps sequentially.
|
|
33
|
+
- Introduce lists of steps with a complete sentence.
|
|
34
|
+
- Put conditions before instructions, not after.
|
|
35
|
+
- Provide clear context for where the action takes place (e.g., "In the administration console...").
|
|
36
|
+
- Indicate optional steps clearly (e.g., "Optional: ...").
|
|
37
|
+
|
|
38
|
+
## V. Formatting and punctuation
|
|
39
|
+
|
|
40
|
+
- **Text wrap:** Wrap all text at 80 characters, with exceptions for long links or tables.
|
|
41
|
+
- **Headings, titles, and bold text:** Use sentence case. Structure headings hierarchically.
|
|
42
|
+
- **Lists:** Use numbered lists for sequential steps and bulleted lists for all other lists. Keep list items parallel in structure.
|
|
43
|
+
- **Serial comma:** Use the serial comma (e.g., "one, two, and three").
|
|
44
|
+
- **Punctuation:** Use standard American punctuation. Place periods inside quotation marks.
|
|
45
|
+
- **Dates:** Use unambiguous date formatting (e.g., "January 22, 2026").
|
|
46
|
+
|
|
47
|
+
## VI. UI, code, and links
|
|
48
|
+
|
|
49
|
+
- **UI elements:** Put UI elements in **bold**. Focus on the task when discussing interaction.
|
|
50
|
+
- **Code:** Use `code font` for filenames, code snippets, commands, and API elements. Use code blocks for multi-line samples.
|
|
51
|
+
- **Links:** Use descriptive link text that indicates what the link leads to. Avoid "click here."
|
|
52
|
+
|
|
53
|
+
## VII. Word choice and terminology
|
|
54
|
+
|
|
55
|
+
- **Consistent naming:** Use product and feature names consistently.
|
|
56
|
+
- **Specific verbs:** Use precise verbs.
|
|
57
|
+
- **Avoid:**
|
|
58
|
+
- Latin abbreviations (e.g., use "for example" instead of "e.g.").
|
|
59
|
+
- Placeholder names like "foo" and "bar" in examples; use meaningful names instead.
|
|
60
|
+
- Anthropomorphism (e.g., "The server thinks...").
|
|
61
|
+
- "Should": Be clear about requirements ("must") vs. recommendations ("we recommend").
|
|
62
|
+
|
|
63
|
+
## VIII. Files and media
|
|
64
|
+
|
|
65
|
+
- **Filenames:** Use lowercase letters, separate words with hyphens (-), and use standard ASCII characters.
|
|
66
|
+
- **Images:** Provide descriptive alt text for all images. Provide high-resolution or vector images when practical.
|
|
67
|
+
|
|
68
|
+
## IX. Accessibility quick check
|
|
69
|
+
|
|
70
|
+
- Provide descriptive alt text for images.
|
|
71
|
+
- Ensure link text makes sense out of context.
|
|
72
|
+
- Use semantic HTML elements correctly (headings, lists, tables).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-design
|
|
3
|
+
description: Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
|
|
4
|
+
license: Complete terms in https://github.com/anthropics/skills/blob/main/skills/frontend-design/LICENSE.txt
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Frontend Design
|
|
8
|
+
|
|
9
|
+
Approach this as the design lead at a small studio known for giving every client a visual identity that could not be mistaken for anyone else's. This client has already rejected proposals that felt templated, and is paying for a distinctive point of view: make deliberate, opinionated choices about palette, typography, and layout that are specific to this brief, and take one real aesthetic risk you can justify.
|
|
10
|
+
|
|
11
|
+
## Ground it in the subject
|
|
12
|
+
|
|
13
|
+
If the brief does not pin down what the product or subject is, pin it yourself before designing: name one concrete subject, its audience, and the page's single job, and state your choice. If there's any information in your memory about the human's preferences, context about what they're building, or designs you've made before – use that as a hint. The subject's own world, its materials, instruments, artifacts, and vernacular, is where distinctive choices come from. Build with the brief's real content and subject matter throughout.
|
|
14
|
+
|
|
15
|
+
## Design principles
|
|
16
|
+
|
|
17
|
+
For web designs, the hero is a thesis. Open with the most characteristic thing in the subject's world, in whatever form makes sense for it: a headline, an image, an animation, a live demo, an interactive moment. Be deliberate with your choice: a big number with a small label, supporting stats, and a gradient accent is the template answer, only use if that's truly the best option.
|
|
18
|
+
|
|
19
|
+
Typography carries the personality of the page. Pair the display and body faces deliberately, not the same families you would reach for on any other project, and set a clear type scale with intentional weights, widths, and spacing. Make the type treatment itself a memorable part of the design, not a neutral delivery vehicle for the content.
|
|
20
|
+
|
|
21
|
+
Structure is information. Structural devices, numbering, eyebrows, dividers, labels, should encode something true about the content, not decorate it. Many generic designs use numbered markers (01 / 02 / 03), but that's only appropriate if the content actually is a sequence - like a real process or a typed timeline where order carries information the reader needs. Question if choices like numbered markers actually make sense before incorporating them.
|
|
22
|
+
|
|
23
|
+
Leverage motion deliberately. Think about where and if animation can serve the subject: a page-load sequence, a scroll-triggered reveal, hover micro-interactions, ambient atmosphere. An orchestrated moment usually lands harder than scattered effects; choose what the direction calls for. However, sometimes less is more, and extra animation contributes to the feeling that the design is AI-generated.
|
|
24
|
+
|
|
25
|
+
Match complexity to the vision. Maximalist directions need elaborate execution; minimal directions need precision in spacing, type, and detail. Elegance is executing the chosen vision well.
|
|
26
|
+
|
|
27
|
+
Consider written content carefully. Often a design brief may not contain real content, and it's up to you to come up with copy. Copy can make a design feel as templated as the design itself. See the below section on writing for more guidance.
|
|
28
|
+
|
|
29
|
+
## Process: brainstorm, explore, plan, critique, build, critique again
|
|
30
|
+
|
|
31
|
+
For calibration: AI-generated design right now clusters around three looks: (1) a warm cream background (near #F4F1EA) with a high-contrast serif display and a terracotta accent; (2) a near-black background with a single bright acid-green or vermilion accent; (3) a broadsheet-style layout with hairline rules, zero border-radius, and dense newspaper-like columns. All three are legitimate for some briefs, but they are defaults rather than choices, and they appear regardless of subject. Where the brief pins down a visual direction, follow it exactly — the brief's own words always win, including when it asks for one of these looks. Where it leaves an axis free, don't spend that freedom on one of these defaults. Just like a human designer who's hired, there's often a careful balance between doing what you're good at and taking each project as a chance to experiment and learn.
|
|
32
|
+
|
|
33
|
+
Work in two passes. First, brainstorm a short design plan based on the human's design brief: create a compact token system with color, type, layout, and signature. Color: describe the palette as 4–6 named hex values. Type: the typefaces for 2+ roles (a characterful display face that's used with restraint, a complementary body face, and a utility face for captions or data if needed). Layout: a layout concept, using one-sentence prose descriptions and ASCII wireframes to ideate and compare. Signature: the single unique element this page will be remembered by that embodies the brief in an appropriate way.
|
|
34
|
+
|
|
35
|
+
Then review that plan against the brief before building: if any part of it reads like the generic default you would produce for any similar page (work through a similar prompt to see if you arrive somewhere similar) rather than a choice made for this specific brief — revise that part, say what you changed and why. Only after you've confirmed the relative uniqueness of your design plan should you start to write the code, following the revised plan exactly and deriving every color and type decision from it.
|
|
36
|
+
|
|
37
|
+
When writing the code, be careful of structuring your CSS selector specificities. It's easy to generate CSS classes that cancel each other out (especially with a type-based selector like .section and a element-based selector like .cta). This can happen often with paddings/margins between sections.
|
|
38
|
+
|
|
39
|
+
Try to do a lot of this planning and iteration in your thinking, and only show ideas to the user when you have higher confidence it'll delight them.
|
|
40
|
+
|
|
41
|
+
## Restraint and self-critique
|
|
42
|
+
|
|
43
|
+
Spend your boldness in one place. Let the signature element be the one memorable thing, keep everything around it quiet and disciplined, and cut any decoration that does not serve the brief. Not taking a risk can be a risk itself! Build to a quality floor without announcing it: responsive down to mobile, visible keyboard focus, reduced motion respected. Critique your own work as you build, taking screenshots if your environment supports it – a picture is worth 1000 tokens. Consider Chanel's advice: before leaving the house, take a look in the mirror and remove one accessory. Human creators have memory and always try to do something new, so if you have a space to quickly jot down notes about what you've tried, it can help you in future passes.
|
|
44
|
+
|
|
45
|
+
## More on writing in design
|
|
46
|
+
|
|
47
|
+
Words appear in a design for one reason: to make it easier to understand, and therefore easier to use. They are design material, not decoration. Bring the same intentionality to copy that you would bring to spacing and color. Before writing anything, ask what the design needs to say, and how it can best be said to help the person navigate the experience.
|
|
48
|
+
|
|
49
|
+
Write from the end user's side of the screen. Name things by what people control and recognize, never by how the system is built. A person manages notifications, not webhook config. Describe what something does in plain terms rather than selling it. Being specific is always better than being clever.
|
|
50
|
+
|
|
51
|
+
Use active voice as default. A control should say exactly what happens when it's used: "Save changes," not "Submit." An action keeps the same name through the whole flow, so the button that says "Publish" produces a toast that says "Published." The vocabulary of an interface is the signposting for someone navigating the product. Cohesion and consistency are how people learn their way around.
|
|
52
|
+
|
|
53
|
+
Treat failure and emptiness as moments for direction, not mood. Explain what went wrong and how to fix it, in the interface's voice rather than a person's. Errors don't apologize, and they are never vague about what happened. An empty screen is an invitation to act.
|
|
54
|
+
|
|
55
|
+
Keep the register conversational and tuned: plain verbs, sentence case, no filler, with tone matched to the brand and the audience. Let each element do exactly one job. A label labels, an example demonstrates, and nothing quietly does double duty.
|