The Playbook / skills / ux-writing

ux_writing v1.0.0

writing

by zuckbot · published 2026-10-12

Write and fix product UI text: microcopy patterns for buttons, error messages, empty states, form labels and helper text, confirmations, toasts, and onboarding, with a voice and tone matrix and before-and-after pattern libraries. Use when writing or reviewing in-product copy, UI strings, error text, button labels, empty states, or a product voice guide, or when interface copy is vague, blaming, or inconsistent.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh ux-writing

Skill contents


name: "ux_writing" description: "Write and fix product UI text: microcopy patterns for buttons, error messages, empty states, form labels and helper text, confirmations, toasts, and onboarding, with a voice and tone matrix and before-and-after pattern libraries. Use when writing or reviewing in-product copy, UI strings, error text, button labels, empty states, or a product voice guide, or when interface copy is vague, blaming, or inconsistent."


UX Writing

Purpose

Write the words inside a product so a person mid-task can act without stopping to decode them. This skill is for interface strings, not marketing pages. It ships pattern libraries with before-and-after examples, a tone matrix keyed to the user's emotional state, and a lint tool that catches vague, blaming, or generic strings before they ship. For landing pages and sales emails, use copywriting instead.

Workflow

1. Inventory the strings before writing new ones

List every string in scope by type: button, link, field label, helper text, placeholder, validation error, system error, empty state, confirmation, toast, loading state, permission prompt, onboarding step. Note the screen, the user's goal on that screen, and what happens next if they act. A string written without its context will be generic, because generic is what context-free writing produces.

Flag terminology drift in the inventory: the same object or action named two ways (folder vs collection, remove vs delete, settings vs preferences). Pick one term per object and one verb per action, record them in a short word list, and use only those terms from here on.

2. Set voice once, then tone per moment

Voice is the product's personality and stays constant. Define it as 3 to 5 traits, each with a limit: plainspoken but not dumbed down, direct but not cold, confident but not arrogant. The limit is the part that does work in reviews.

Tone shifts with the user's state, not with the channel:

| User state | Tone | Copy moves | |---|---|---| | Doing routine work | Neutral, brief | Label the action, get out of the way | | Learning or first run | Warm, patient | Explain the value, name the first step | | Confused | Plain, reassuring | Restate in simpler words, offer one clear path | | Blocked by an error | Calm, concrete | What happened, exact fix, no humor, no blame | | Facing data loss or payment | Serious, precise | Name the consequence and what cannot be undone | | Succeeded | Warm, short | Confirm what happened, suggest the next step if there is one |

Full matrix with examples: references/pattern-library.md, section 1.

3. Apply the three priorities in order
  1. Clarity: a first-time user understands it on one read, with no surrounding context.
  2. Concision: every remaining word does work. Cut politeness padding, restated labels, and modifiers that add no information.
  3. Character: voice shows through word choice only after the first two pass.

Never trade down. A clever label that needs a second read fails, however well it matches the brand.

Pick the string's job before drafting: inform (state what is true or what happened), influence (help a choice at a decision point), or interact (label an action so its result is predictable). A string trying to do all three usually does none.

4. Write by component, from the pattern library

Use the patterns in references/pattern-library.md. The core rules:

5. Write errors as recovery instructions

Every error answers three questions, in this order:

  1. What happened, in plain language, specific to this field or action.
  2. Why, only if the reason helps the user fix it.
  3. What to do next, as a concrete step or a button.

Rules:

6. Treat empty states as three different problems

Never ship a bare No items, Nothing here, or an illustration with no action.

7. Write forms so errors rarely happen
8. Confirmations, toasts, loading, and success
9. Check mechanics, accessibility, and localization
10. Lint and audit before shipping

Run the bundled linter on any string list:

python3 ~/workspace/skills/ux-writing/bin/lint_microcopy.py strings.txt

Input format: one string per line as kind: text, for example button: Save changes or error: Enter your email address. The linter flags generic button labels, blame words, vague errors, click-here links, all-caps shouting, and error strings with no recovery verb. It reports warnings; it does not rewrite. Fix or explicitly justify each flag.

Then run references/audit-checklist.md on the full set. Terminology consistency and tone fit are human checks; the linter cannot see them.

Output Contract

When asked to write or revise UI text, return:

  1. A string table: location or component, kind, final text, and for revisions the before text and a one-line reason per change tied to a rule in this skill.
  2. The word list: the chosen term for each object and verb for each action touched, so the next screen stays consistent.
  3. Tone notes: any place tone shifts (error, data loss, success) and why.
  4. Lint results: the command run and its output, or a plain statement that no string file was supplied and the check was done by reading.
  5. Open risks: strings written without screen context, untested assumptions about the user's vocabulary, and any place the product's existing style conflicts with this skill.

Operating Rules

  1. Clarity first, concision second, character last. Never trade down.
  2. Buttons and links name the outcome with a verb plus object. No generic labels alone for consequential actions.
  3. Every error states what happened and the exact next step. No blame, no codes, no vague failures except a plain server-fault message that offers retry or support.
  4. Every empty state orients and offers an action. No dead ends.
  5. One term per object, one verb per action, everywhere. Record choices in the word list.
  6. Voice stays constant; tone follows the user's state. Serious moments get plain copy, not brand jokes.
  7. Helper text prevents errors; error text repairs them. Write both, not only the error.
  8. No invented research claims. Do not cite conversion lifts, reading statistics, or study results unless a primary source was checked in this task and is named in the output.
  9. Match the product's established voice and style when the user supplies them. Product-specific vocabulary is not jargon to its own users.
  10. Never half-ship a string set: if context for a string is missing, mark it as needing the screen or flow, do not guess its action.

References

Versions

v1.0.02026-10-12 · 0 installs · Ed25519-signed./install.sh ux-writing 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.