UX writing skill.
A free UX writing skill for your AI coding agent: headings, buttons, error messages, empty states and sample content, written plainly in Claude Code, Codex or Cursor so they do not sound generated.
Most AI-written interfaces share a voice: unlock, elevate, seamless, three adjectives in a row and an em dash in every sentence. This skill replaces that with plain, specific words that help someone understand or act, from the headline and buttons down to errors, empty states and the sample content that fills a new screen.
- Skill
wensity-ui-copy- Plan
- Free, no account needed
- Loads when
- Writing or revising any user-facing text in a UI
- Works in
- Claude Code, Codex, Cursor, GitHub Copilot, Windsurf, Gemini CLI, OpenCode
- Format
- Agent Skills (SKILL.md), plain files in your project
- Pack
- One of the Wensity design skills for AI coding agents
Install
Run this in your project. It finds the agents you use and puts the skill where each one looks for it.
pnpm dlx skills add wensity/skills --skill wensity-ui-copy
npx skills add wensity/skills --skill wensity-ui-copy
yarn dlx skills add wensity/skills --skill wensity-ui-copy
bunx skills add wensity/skills --skill wensity-ui-copy
Open source under MIT, with the other free skills. A star helps other developers find them.
Or add it by hand: save the file as SKILL.md in a folder named wensity-ui-copy.
Where each agent looks for it
- Claude Code
- .claude/skills/wensity-ui-copy/SKILL.md
- Codex, Cursor, Copilot, Windsurf, Gemini CLI, OpenCode
- .agents/skills/wensity-ui-copy/SKILL.md
When it loads
You never call a skill by name. Your agent reads the short description at the top of every installed skill and loads this one when the work calls for it. Requests like these bring it in:
- The copy on this landing page sounds like an AI wrote it. Rewrite it.
- Write better error messages for the sign-up form.
- Fill this new dashboard with realistic sample data.
What it covers
- Voice
- Plain, short and calm, in the user's words and in sentence case everywhere.
- Words that sound generated
- The words and sentence shapes that give AI copy away, with what to write instead.
- Headings, buttons and links
- Headings that state the point, buttons that start with a verb and name the result, and link text that makes sense on its own.
- Forms and errors
- Labels above fields, placeholders that show a format, and errors that say what went wrong and how to fix it.
- Empty, loading and success
- Empty states that say what to do next, messages for slow work, toasts in the past tense and Undo in place of a confirm dialog.
- Numbers and sample content
- Consistent dates and units, and realistic names and data instead of lorem ipsum.
Check your own copy
Paste a headline, a button or a whole page. As you type, the checker marks the words and shapes the skill steers your agent away from, and each mark comes with the kind of fact that should replace it.
Without the skill: Typical generated hero copy: every line could sell any product.
Key rules
- A heading says the point
- It states what the reader learns, not the topic of the section.
- Buttons start with a verb
- Create invoice, not Submit. The label matches what happens next.
- Destructive actions name the thing
- Delete 3 files says exactly what will be gone.
- Undo over confirm
- Reversible actions just happen and offer Undo. Only permanent ones ask first.
- Never invent proof
- No made-up customer logos, star ratings or user counts in sample content.
- Calm by default
- No exclamation marks unless something genuinely worth celebrating happened.
Submit a form that fails
The address is taken and the email is missing its ending. Press the button, then fix the form with only what the message tells you.
Without the skill
Without the skill: “Something went wrong” on every failure, so the visitor has to guess which field to change.
With the skill
With the skill: The banner says what failed, each field says how to fix it, and a taken address offers free ones.
Rewrites, side by side
Twenty strings a model writes by default, next to what it writes with the skill loaded. Each fix adds a fact the reader can act on: a name, a number, a limit or the next step.
| When | Without the skill | With the skill |
|---|---|---|
| Signed out while editing | Without the skill: Unauthorized | With the skill: You were signed out after 30 minutes away. Sign in again and your draft will still be here. |
| A name that is taken | Without the skill: Name already exists | With the skill: A project called “Spring launch” already exists. Pick another name or open that project. |
| Hit a rate limit | Without the skill: Too many requests | With the skill: You can send 50 invites an hour. You can send more at 3:00 PM. |
| Dates in the wrong order | Without the skill: Invalid date range | With the skill: The end date is before the start date. Pick an end date after Mar 4. |
| A file type it can't read | Without the skill: Unsupported format | With the skill: This photo is a HEIC file. Export it as JPG or PNG and upload it again. |
The full skill
This is the whole skill, exactly as your agent reads it. Change anything you like once it is in your project: it is a plain file.
Words are part of the design. Vague or inflated copy makes a polished interface feel generic; plain, specific copy makes a plain interface feel trustworthy. The test for every string: does it help someone understand or act?
1. Voice
- Plain words. Write the way a helpful person would say it out loud. "Save changes", not "Persist modifications". "You're out of credits", not "Credit balance depleted".
- The user's words, not the system's. "Notifications", not "Webhook dispatch config". Name things by what people do with them.
- Short. Cut every word that does not change the meaning. Then cut again.
- Sentence case everywhere: headings, buttons, menu items, tabs, labels. "Create new project", not "Create New Project".
- Active voice, addressed to the user. "You don't have access to this project", not "Access to this project is not permitted". When the system failed, say so plainly: "We couldn't save your file", not "The file could not be saved".
- Calm. No exclamation marks except for genuine celebrations, no apologies in errors, no jokes in error states.
2. Words that make copy sound generated
Avoid these. They say nothing a reader can check:
- Verbs: unlock, unleash, elevate, empower, supercharge, revolutionize, transform, streamline, leverage, harness, reimagine, skyrocket.
- Adjectives: seamless, effortless, cutting-edge, next-generation, world-class, robust, powerful, intuitive, innovative, all-in-one.
- Phrases: "In today's fast-paced world", "Take your X to the next level", "Whether you're a X or a Y", "Say goodbye to", "Look no further".
- Shapes: three adjectives in a row ("Fast. Secure. Simple."), middle-dot
lists (
Design · Build · Ship), and em dashes anywhere in the product's text, including the page<title>, meta description and alt text. Use a colon, a comma or two sentences: "Ledgerline: invoices in any currency".
Replace each with a concrete fact: what it does, how fast, for whom, with what result. "Cuts a 40-minute report to 2 minutes" beats "Supercharge your workflow".
3. Headings
- A heading says the point, not the topic. "Invoices get paid 9 days faster" beats "Features". "Your workspace is empty" beats "Workspace".
- No eyebrows. Do not put a small uppercase label above a heading ("FEATURES", "PRICING", "HOW IT WORKS"). Write a heading that stands alone.
- Page titles name the page so people know where they are: "Billing", "Team members".
4. Buttons and links
- Start with a verb and name the result: "Create invoice", "Send invite", "Export CSV". Not "Submit", "OK", "Yes", "Click here", "Learn more" alone.
- Match the button to what happens next. If the button says "Publish", the toast says "Published", and the page shows the published state.
- Primary and secondary must be clearly different actions: "Delete project" and "Cancel", not "Yes" and "No".
- One to three words is ideal. A CTA can go to five if it adds a concrete benefit ("Start free, no card").
- Link text makes sense alone (screen readers list links out of context): "Read the API guide", not "here".
- Destructive actions name the thing: "Delete 3 files", "Remove Sam from team".
5. Forms
- Labels above fields, always visible. Placeholder text is not a label; it disappears when typing starts.
- Placeholders show format, not instructions:
name@company.com,MM / YY. Leave them out when the label is enough. - Helper text under the field for rules people need before typing: "At least 12 characters".
- Mark optional fields, not required ones, when most fields are required: "Company (optional)".
- Validate on blur or submit, not on every keystroke. Show the error next to the field it belongs to.
6. Errors
Every error answers two questions: what happened, and what to do now.
| Weak | Better |
|---|---|
| Invalid input | Enter a date after today |
| Something went wrong | We couldn't reach the server. Check your connection and try again. |
| Error 403 | You don't have access to this project. Ask an owner to invite you. |
| Upload failed | This file is 24 MB. The limit is 10 MB. |
| Payment declined | Your card was declined. Try another card or contact your bank. |
- Never blame the user ("You entered an invalid email"). Describe the fix ("Enter an email like name@company.com").
- Keep codes and stack traces out of the message. Put a reference ID at the end if support needs one.
- Keep what the user typed. Never clear a form because one field failed.
7. Empty states
An empty state is the first thing a new user sees. Treat it as onboarding:
- Say what will appear here: "Invoices you send will show up here."
- Give the one action that fills it: a primary button, "Create invoice".
- Optional: a link to import, a template, or a short guide.
For "no results" empties, say what was searched and how to widen it: "No results for 'invioce'. Check the spelling or clear filters."
8. Loading, success and toasts
- Loading: say what is happening when it takes more than a second: "Generating report…". Use the ellipsis character.
- Success toasts: past tense of the action, plus the object: "Invite sent to sam@acme.com", "Project deleted. Undo".
- Offer Undo instead of a confirmation dialog for reversible actions. Ask for confirmation only when the action cannot be undone.
- Confirmation dialogs: the title asks the real question ("Delete 'Q3 report'?"), the body states the consequence ("This removes it for everyone. You can't undo this."), the buttons name the action ("Delete report" / "Cancel").
9. Numbers, dates and units
- Use numerals: "3 files", not "three files".
- Format with the user's locale:
Intl.NumberFormatandIntl.DateTimeFormat(ortoLocaleString) instead of hand-built strings. - Relative time for recent events ("2 min ago"), absolute dates for older ones ("Mar 4"), and the full timestamp in a tooltip.
- Pluralize correctly: "1 file", "2 files", "0 files". Use
Intl.PluralRulesor a helper, never "file(s)". - Keep numbers and units together with a non-breaking space (
10 MBin HTML,"10\u00A0MB"in JavaScript) so they never wrap apart.
10. Realistic placeholder content
When building a design without real content, write content that looks real:
- Specific names and data: "Maya Chen, Product designer at Northwind", "$12,480.00", "Invoice INV-2041". Not "John Doe", "$XX", "Lorem ipsum".
- Realistic lengths, including some long ones, so the layout is tested: a 40-character name, a 3-line description next to a 1-line one.
- Never invent proof. No made-up customer logos, star ratings, user
counts or testimonials presented as real. Use marked placeholders
(
[Customer quote],[Logo]) or ask the user for the real ones. - Match the product's world. A dev tool's sample data is repos and deploys; a clinic app's is appointments and patients.
11. Accessibility in copy
- Every icon-only button gets an accessible name:
aria-label="Close dialog". - Alt text describes what an image shows when it carries information
("Bar chart: revenue up 24% since January"). Decorative images get
alt="". - Do not rely on color words alone ("click the green button").
- Expand abbreviations the first time unless the audience uses them daily.
12. Check before you finish
- No filler words from section 2, no three-adjective taglines, no em dashes in interface strings.
- Every heading states a point; no eyebrows.
- Every button starts with a verb and names its result.
- Every error says what happened and what to do.
- Every empty state explains itself and offers the next action.
- Sentence case throughout.
- Sample content is specific, varied in length, and contains no invented proof.
- Icon-only controls and meaningful images have accessible text.
Works well with
Typography
FreeFonts, a role-based type scale, line height, tracking, measure, line breaks, numbers and font loading.
Landing page
ProMessage first, page structure, hero, real proof, features, pricing, FAQ, motion and performance.
Accessibility and UI states
ProEvery interaction and data state, plus keyboard, touch, zoom, forced colors and screen readers.