Micro-Copy Intelligence
Why Microcopy Matters
Microcopy is the most underestimated layer of product design. A single word on a button can change conversion by 30%. A poorly written error message causes support tickets. A delightful empty state turns a dead-end into activation. A confusing permission request tanks opt-in rates.
Most products fail at microcopy not because the words are "wrong" but because they are written by developers in a rush, never reviewed by a writer, and never tested with users. The result: vague buttons ("Submit"), hostile errors ("Invalid input"), lifeless empty states ("No data"), and permission requests that give users no reason to say yes.
This skill gives Sumi a production-grade microcopy library — 1000+ templates across every UI component, every state, every tone, and every major industry sector. Every template is copy-paste ready, with tone variants, character counts, accessibility notes, and i18n considerations.
Core Principle: Clear > Clever
The single most important rule in UX writing: clarity beats cleverness every time. Users are not reading your interface for entertainment. They are trying to accomplish a task. Every word should reduce cognitive load, not add to it.
| Principle |
Description |
Example |
| Clear > Clever |
Plain language over puns or jargon |
"Save changes" not "Commit your brilliance" |
| Specific > Generic |
Tell them exactly what happens |
"Delete 3 photos" not "Delete items" |
| Human > Robotic |
Write like a helpful person, not a machine |
"We couldn't find that page" not "Error 404: Resource not located" |
| Short > Long |
Every extra word is cognitive cost |
"Saved" not "Your changes have been successfully saved" |
| Active > Passive |
Direct the user with active voice |
"Enter your email" not "Email should be entered" |
| Consistent > Creative |
Same action = same word everywhere |
Always "Remove" or always "Delete", never both |
| Helpful > Blaming |
Guide, don't accuse |
"That password is too short" not "You entered an invalid password" |
Voice and Tone Framework
Voice is your product's personality — it stays constant. Tone adapts to context.
Voice Spectrum (Pick Your Position)
Formal ←————————————————→ Casual
| |
Banking, Legal, Social, Gaming,
Enterprise Consumer
Serious ←————————————————→ Playful
| |
Healthcare, Finance Entertainment,
Security Kids, Social
Respectful ←—————————————→ Irreverent
| |
Government, Medical Startup, Youth
Enterprise Consumer
Matter-of-fact ←—————————→ Enthusiastic
| |
Utilities, Tools E-commerce,
Productivity Fitness, Social
Tone Adaptation by Context
The same product shifts tone based on what the user is experiencing:
| Context |
Tone Shift |
Why |
| Errors |
Empathetic, calm, helpful |
User is frustrated — don't add to it |
| Success |
Warm, affirming, brief |
User accomplished something — celebrate proportionally |
| Empty states |
Encouraging, instructional |
User sees nothing — guide them to value |
| Destructive actions |
Cautious, specific, clear |
High stakes — no ambiguity allowed |
| Onboarding |
Welcoming, motivating |
First impressions — build confidence |
| Loading/waiting |
Light, reassuring |
User is stuck — ease anxiety |
| Permission requests |
Transparent, benefit-led |
User must trust you — explain why |
| Pricing/payment |
Trustworthy, precise |
Money is involved — no vagueness |
| Legal/compliance |
Plain, clear, accessible |
Required info — make it readable |
Content Hierarchy in UI
Every UI moment has three layers of information. Not all three are always needed.
| Layer |
Purpose |
Example (File Upload) |
| Primary |
What to do |
"Upload your photo" |
| Secondary |
Why or context |
"This will be your profile picture" |
| Tertiary |
How or constraints |
"JPG or PNG, max 5 MB" |
Rules:
- Primary copy is always visible
- Secondary copy appears when context is unclear
- Tertiary copy appears on hover, in helper text, or when errors occur
- Mobile: reduce to primary + tertiary (space is precious)
The Microcopy Formula
For any UI element, apply this structure:
[Action Verb] + [Object] + [Benefit/Context]
Examples:
- "Save changes" = action + object
- "Upload photo to complete your profile" = action + object + benefit
- "Delete this project permanently" = action + object + context
- "Invite teammates to collaborate" = action + object + benefit
When to add benefit/context:
- The action is unfamiliar (onboarding)
- The action is irreversible (destructive)
- The action requires trust (permissions, payments)
- The action has a non-obvious outcome
Readability Scoring for UI
Target readability for UI text:
| Component |
Flesch-Kincaid Grade |
Max Words |
Max Characters |
| Button label |
Grade 3-5 |
1-4 |
25 |
| Tooltip |
Grade 5-7 |
5-15 |
80 |
| Error headline |
Grade 4-6 |
3-8 |
50 |
| Error body |
Grade 5-7 |
10-25 |
150 |
| Empty state headline |
Grade 4-6 |
3-8 |
50 |
| Empty state body |
Grade 5-8 |
10-30 |
180 |
| Toast message |
Grade 4-6 |
3-10 |
60 |
| Notification title |
Grade 4-6 |
3-10 |
65 |
| Notification body |
Grade 5-7 |
10-25 |
150 |
| Onboarding headline |
Grade 3-5 |
3-8 |
50 |
| Onboarding body |
Grade 5-7 |
15-40 |
250 |
| Helper text |
Grade 5-7 |
5-15 |
100 |
| Confirmation dialog title |
Grade 4-6 |
3-8 |
50 |
| Confirmation dialog body |
Grade 5-7 |
10-30 |
180 |
| Permission request body |
Grade 5-7 |
15-35 |
200 |
| Loading message |
Grade 3-5 |
2-8 |
50 |
Testing readability: Paste your copy into Hemingway Editor or use the Flesch-Kincaid formula. If a 12-year-old cannot understand it instantly, rewrite it.
Inclusive Language Checklist
Before shipping any microcopy:
i18n Considerations for Microcopy
Microcopy that works in English may break in translation. Plan ahead:
Text Expansion
| Language |
Expansion vs. English |
| German |
+30-35% |
| French |
+15-20% |
| Spanish |
+20-25% |
| Italian |
+15-20% |
| Portuguese |
+20-30% |
| Russian |
+15-20% |
| Japanese |
-10-20% (character count, but wider glyphs) |
| Chinese |
-20-30% (character count) |
| Arabic |
+20-25% (plus RTL layout) |
| Korean |
-10-15% |
Rules:
- Buttons: Allow 40% extra width or use auto-sizing
- Tooltips: Max 60% of container width in English to allow expansion
- Never hard-code string widths
- Test with German and Arabic (longest expansion + RTL)
Cultural Sensitivity
- Humor: Puns and wordplay rarely translate. Stick to clear language.
- Formality: German, Japanese, Korean require formal register by default. "Du" vs "Sie" in German matters enormously.
- Color of language: "Red" means danger in the West, luck in China. Do not rely on color words alone.
- Dates and numbers: "1/2/2026" is January 2 (US) or February 1 (most of the world). Use explicit formats.
- Names: Not everyone has a first + last name structure. "Full name" is safer than "First name / Last name".
- Icons with text: Thumbs-up is offensive in parts of the Middle East. Always pair icons with text labels.
String Externalization
- Every user-facing string must be in a localization file, never hard-coded
- Use ICU MessageFormat for plurals:
{count, plural, one {# item} other {# items}}
- Avoid string concatenation:
"Welcome, " + name + "!" breaks in languages with different word order
- Use full sentences as translation units, not fragments
Sector Tone Guides
Fintech / Banking
- Voice: Trustworthy, precise, confident
- Tone keywords: Secure, clear, straightforward, reliable
- Do: "Your transfer of $500 to Alex is complete" / "Verify your identity to protect your account"
- Don't: "Woohoo, money sent!" / "We need to make sure you're really you lol"
- Button style: "Transfer funds", "Review statement", "Verify identity"
- Error style: "We couldn't complete this transfer. Your account has not been charged. [Try again]"
Healthcare / Wellness
- Voice: Empathetic, clear, reassuring
- Tone keywords: Caring, supportive, plain, calm
- Do: "Your appointment with Dr. Chen is confirmed for March 15 at 2:00 PM" / "Your results are ready. Tap to view."
- Don't: "Awesome, you're booked!" / "RESULTS ARE IN!!!"
- Button style: "Schedule appointment", "View results", "Message your care team"
- Error style: "We couldn't schedule your appointment. Dr. Chen is available at these other times: [alternatives]"
SaaS / Productivity
- Voice: Efficient, empowering, knowledgeable
- Tone keywords: Smart, capable, streamlined, no-nonsense
- Do: "Project created. Invite your team to get started." / "3 tasks due today"
- Don't: "YAY, new project!" / "You've got stuff to do"
- Button style: "Create project", "Invite team", "Start timer"
- Error style: "This project name is already taken. Try a different name. [Rename]"
Social / Community
- Voice: Warm, expressive, conversational
- Tone keywords: Friendly, personal, inclusive, fun
- Do: "Alex liked your photo" / "Share what's on your mind"
- Don't: "User 4829 interacted with your content" / "Compose a status update"
- Button style: "Share", "Like", "Comment", "Send a message"
- Error style: "We couldn't post that right now. Your draft is saved. [Try again]"
E-commerce / Marketplace
- Voice: Helpful, enthusiastic, trustworthy
- Tone keywords: Exciting, confident, reassuring, action-oriented
- Do: "Free shipping on orders over $50" / "Only 3 left in stock"
- Don't: "Shipping fees may apply based on various factors" / "Limited inventory warning"
- Button style: "Add to cart", "Buy now", "Apply code", "Complete purchase"
- Error style: "This item just sold out. We'll notify you when it's back. [Get notified]"
Education / EdTech
- Voice: Encouraging, patient, clear
- Tone keywords: Supportive, motivating, structured, approachable
- Do: "Great work! You completed 3 of 5 lessons." / "Pick up where you left off"
- Don't: "CRUSHING IT" / "Resume incomplete module"
- Button style: "Start lesson", "Continue learning", "Take quiz", "Review answers"
- Error style: "That answer didn't match. Review the hint and try again. [Show hint]"
Developer Tools
- Voice: Direct, precise, technical (but not jargon-heavy)
- Tone keywords: Efficient, accurate, no-fluff, respectful of expertise
- Do: "Build succeeded in 2.3s" / "API key created. Copy it now — it won't be shown again."
- Don't: "Yay, your build worked!" / "Here's your secret key thingy"
- Button style: "Deploy", "Create API key", "View logs", "Run tests"
- Error style: "Build failed: missing dependency
lodash@4.17. Run npm install lodash to fix. [View full log]"
Gaming / Entertainment
- Voice: Energetic, immersive, personality-forward
- Tone keywords: Exciting, playful, dramatic, rewarding
- Do: "New high score! You beat your record by 200 points." / "Ready for the next challenge?"
- Don't: "Score updated in database" / "Proceed to next level"
- Button style: "Play now", "Challenge a friend", "Claim reward", "Continue quest"
- Error style: "Connection lost. Your progress is saved. [Reconnect]"
Real Estate / Property
- Voice: Professional, informative, aspirational
- Tone keywords: Trustworthy, detailed, approachable, knowledgeable
- Do: "3 new listings match your search" / "Schedule a tour of 123 Oak Street"
- Don't: "OMG new houses!" / "Initiate property viewing request"
- Button style: "Schedule tour", "Save listing", "Contact agent", "Get pre-approved"
- Error style: "This listing is no longer available. Here are similar homes nearby. [View similar]"
Travel / Hospitality
- Voice: Inspiring, helpful, warm
- Tone keywords: Adventurous, reassuring, personal, anticipatory
- Do: "Your trip to Tokyo is confirmed. 14 days to go!" / "Explore things to do near your hotel"
- Don't: "Booking reference confirmed" / "Ancillary activity discovery module"
- Button style: "Book now", "Explore destinations", "Check availability", "Add to trip"
- Error style: "These dates just got booked. Try nearby dates — we found 5 options. [View alternatives]"
Reference Architecture
| File |
Contents |
Use When |
references/button-label-templates.md |
200+ button label templates organized by action type: primary, destructive, navigation, toggle, social, commerce, file, communication. Each with tone variants, character counts, when-to-use guidance, anti-patterns, and i18n notes. |
Writing button labels. Choosing between "Save" vs "Save changes" vs "Update". Standardizing CTAs across a product. |
references/error-success-messages.md |
200+ error and success message templates: validation, system, permission, business logic errors. Success confirmations for every common action. Each with headline + body + recovery action + ARIA announcement. |
Writing error messages. Creating success confirmations. Building a toast/notification system. Ensuring accessible error handling. |
references/empty-state-copy.md |
150+ empty state copy templates: first-use, no-results, cleared, error, permission states. By component: inbox, dashboard, list, table, search, notifications, activity, calendar, kanban, files, chat. Each with headline, body, CTA, illustration suggestion, tone variants. |
Designing empty states. Writing first-use experiences. Creating no-results messages. Handling permission-gated blank screens. |
references/onboarding-permission-copy.md |
150+ onboarding and permission copy templates: welcome screens, profile setup, feature tours, permission requests (notifications, location, camera, etc.), pre-permission priming, progressive disclosure, activation prompts. Each with headline, body, primary/secondary CTA, visual suggestion. |
Designing onboarding flows. Writing permission request screens. Creating feature tours. Building activation sequences. |
references/notification-tooltip-copy.md |
200+ notification, tooltip, and contextual help templates: push notifications, in-app notifications, toasts, tooltips, helper text, confirmation dialogs, loading messages, changelog entries. Each with text template, character limit, tone, timing. |
Writing push notifications. Creating tooltip copy. Building confirmation dialogs. Writing loading states. Composing changelog entries. |
How to Use This Skill
Quick Lookup
"I need a button label for [action]" — Go to button-label-templates.md, find the action type, pick the tone variant that matches your product voice.
Full Screen Copy
"I'm designing a [screen type] and need all the copy" — Combine templates from multiple reference files: buttons from button-label-templates.md, errors from error-success-messages.md, empty states from empty-state-copy.md, tooltips from notification-tooltip-copy.md.
Tone Calibration
"My product is a [sector] app with a [formal/casual] voice" — Use the Sector Tone Guides above to set your voice, then filter all templates through that tone.
Copy Audit
"Review my existing copy for quality" — Check against the principles (Clear > Clever), readability scores, inclusive language checklist, and anti-patterns in each reference file.
i18n Preparation
"We're localizing to [language]" — Check text expansion ratios, review cultural sensitivity notes, verify string externalization patterns.
Quality Checklist for Any Microcopy
Before shipping any piece of UI text, verify:
Microcopy Decision Tree
User encounters UI element
|
+-- Is it an action? (button, link, CTA)
| -> button-label-templates.md
|
+-- Is something wrong? (error, failure, warning)
| -> error-success-messages.md (error section)
|
+-- Did something succeed? (confirmation, completion)
| -> error-success-messages.md (success section)
|
+-- Is it empty? (no content, no results, first use)
| -> empty-state-copy.md
|
+-- Is it onboarding? (first launch, feature tour, setup)
| -> onboarding-permission-copy.md
|
+-- Is it asking permission? (notifications, camera, location)
| -> onboarding-permission-copy.md (permissions section)
|
+-- Is it contextual help? (tooltip, helper text, hint)
| -> notification-tooltip-copy.md
|
+-- Is it a notification? (push, in-app, toast)
| -> notification-tooltip-copy.md
|
+-- Is it a confirmation? (delete, cancel, destructive)
| -> notification-tooltip-copy.md (confirmation section)
Anti-Pattern Encyclopedia (Top 25)
| # |
Anti-Pattern |
Example |
Fix |
| 1 |
Vague button |
"Submit" |
"Create account" / "Send message" |
| 2 |
"Click here" |
"Click here to learn more" |
"Learn more about pricing" |
| 3 |
Blaming the user |
"You entered an invalid email" |
"That doesn't look like an email address" |
| 4 |
ALL CAPS buttons |
"DELETE ACCOUNT" |
"Delete account" (sentence case) |
| 5 |
Technical jargon |
"Error 500: Internal Server Error" |
"Something went wrong. We're looking into it." |
| 6 |
Double negatives |
"Don't forget to not leave blank" |
"This field is required" |
| 7 |
Inconsistent terms |
"Save" here, "Update" there, "Submit" elsewhere |
Pick one term per action type |
| 8 |
Wall of text in modal |
200-word confirmation dialog |
2 sentences max in dialog body |
| 9 |
No recovery action |
"Payment failed." (full stop, nothing else) |
"Payment failed. Check your card details and try again. [Update payment]" |
| 10 |
Forced enthusiasm |
"AMAZING! You signed up!!!" |
"Welcome. Your account is ready." |
| 11 |
Guilt-tripping |
"No thanks, I don't want to save money" |
"No thanks" / "Skip" / "Maybe later" |
| 12 |
Ambiguous "OK" |
Dialog with only "OK" and "Cancel" |
"Delete photo" and "Keep photo" |
| 13 |
Placeholder as label |
Input with only "Email" as placeholder |
Persistent label above + placeholder example |
| 14 |
Disappearing feedback |
Toast that vanishes in 1 second |
Minimum 4 seconds + dismiss button |
| 15 |
Generic empty state |
"No items" |
"No projects yet. Create your first project to get started. [Create project]" |
| 16 |
Permission without context |
System dialog with no pre-screen |
Pre-permission screen explaining benefit first |
| 17 |
Error with no specifics |
"Invalid" (entire message) |
"Password must be at least 8 characters" |
| 18 |
Cute over clear |
"Oopsie daisy! Something went wrong uwu" |
"Something went wrong. Try refreshing the page." |
| 19 |
Hidden destructive action |
Delete styled as primary action |
Red text, confirmation dialog, clear consequences |
| 20 |
Loading with no context |
Spinner with no message forever |
"Loading your dashboard..." with progress indicator |
| 21 |
Overloaded button |
"Save, publish, and notify team" |
Three separate actions or a split button |
| 22 |
Negative framing |
"You have 0 connections" |
"Start connecting with people you know" |
| 23 |
Passive voice error |
"An error was encountered" |
"We hit a snag" or "Something went wrong" |
| 24 |
Unexplained restriction |
"This action is not allowed" |
"Only workspace admins can delete projects. Ask your admin for access." |
| 25 |
Untranslatable idiom |
"Piece of cake!" as success message |
"Done!" or "All set!" |
Writing Microcopy: Step-by-Step Process
- Identify the moment. What is the user doing right now? What just happened? What emotional state are they likely in?
- Determine the goal. What do you need the user to understand or do next?
- Pick the tone. Use the tone adaptation table — match the context, not your default voice.
- Draft with the formula. [Action] + [Object] + [Benefit/Context] as needed.
- Cut ruthlessly. Remove every word that is not doing work. Read it aloud — if you stumble, simplify.
- Check the checklist. Inclusive? Translatable? Accessible? Consistent? Specific?
- Test with real users. Show it out of context — can they tell what it means? Show it in context — do they do the right thing?
Accessibility Requirements for Microcopy
- ARIA live regions: Error messages and success confirmations must be announced to screen readers via
aria-live="polite" (success) or aria-live="assertive" (errors).
- Error association: Every error message must be programmatically associated with its input via
aria-describedby.
- Button labels: If a button uses only an icon, provide
aria-label with the full text label.
- Tooltip accessibility: Tooltips must be reachable via keyboard (focus, not just hover) and announced by screen readers.
- Loading announcements: Announce loading start and completion to screen readers.
- Confirmation dialogs: Focus must move to the dialog when it opens and return to the trigger when it closes.
- Status messages: Use
role="status" for non-critical updates and role="alert" for urgent messages.
- No time pressure: If a toast auto-dismisses, the information must be available elsewhere (notification center, status area).
1---2name: micro-copy-intelligence3description: 1000+ microcopy and UX-writing templates by component, tone and sector: button labels, every error message and failure state, empty states, tooltips, confirmations, permission requests and notifications. Use when writing any interface string — robotic copy is the loudest slop tell.4---56# Micro-Copy Intelligence78## Why Microcopy Matters910Microcopy is the most underestimated layer of product design. A single word on a button can change conversion by 30%. A poorly written error message causes support tickets. A delightful empty state turns a dead-end into activation. A confusing permission request tanks opt-in rates.1112Most products fail at microcopy not because the words are "wrong" but because they are written by developers in a rush, never reviewed by a writer, and never tested with users. The result: vague buttons ("Submit"), hostile errors ("Invalid input"), lifeless empty states ("No data"), and permission requests that give users no reason to say yes.1314This skill gives Sumi a production-grade microcopy library — 1000+ templates across every UI component, every state, every tone, and every major industry sector. Every template is copy-paste ready, with tone variants, character counts, accessibility notes, and i18n considerations.1516## Core Principle: Clear > Clever1718The single most important rule in UX writing: **clarity beats cleverness every time**. Users are not reading your interface for entertainment. They are trying to accomplish a task. Every word should reduce cognitive load, not add to it.1920| Principle | Description | Example |21|-----------|-------------|---------|22| Clear > Clever | Plain language over puns or jargon | "Save changes" not "Commit your brilliance" |23| Specific > Generic | Tell them exactly what happens | "Delete 3 photos" not "Delete items" |24| Human > Robotic | Write like a helpful person, not a machine | "We couldn't find that page" not "Error 404: Resource not located" |25| Short > Long | Every extra word is cognitive cost | "Saved" not "Your changes have been successfully saved" |26| Active > Passive | Direct the user with active voice | "Enter your email" not "Email should be entered" |27| Consistent > Creative | Same action = same word everywhere | Always "Remove" or always "Delete", never both |28| Helpful > Blaming | Guide, don't accuse | "That password is too short" not "You entered an invalid password" |2930## Voice and Tone Framework3132**Voice** is your product's personality — it stays constant. **Tone** adapts to context.3334### Voice Spectrum (Pick Your Position)3536```37Formal ←————————————————→ Casual38 | |39 Banking, Legal, Social, Gaming,40 Enterprise Consumer4142Serious ←————————————————→ Playful43 | |44 Healthcare, Finance Entertainment,45 Security Kids, Social4647Respectful ←—————————————→ Irreverent48 | |49 Government, Medical Startup, Youth50 Enterprise Consumer5152Matter-of-fact ←—————————→ Enthusiastic53 | |54 Utilities, Tools E-commerce,55 Productivity Fitness, Social56```5758### Tone Adaptation by Context5960The same product shifts tone based on what the user is experiencing:6162| Context | Tone Shift | Why |63|---------|------------|-----|64| **Errors** | Empathetic, calm, helpful | User is frustrated — don't add to it |65| **Success** | Warm, affirming, brief | User accomplished something — celebrate proportionally |66| **Empty states** | Encouraging, instructional | User sees nothing — guide them to value |67| **Destructive actions** | Cautious, specific, clear | High stakes — no ambiguity allowed |68| **Onboarding** | Welcoming, motivating | First impressions — build confidence |69| **Loading/waiting** | Light, reassuring | User is stuck — ease anxiety |70| **Permission requests** | Transparent, benefit-led | User must trust you — explain why |71| **Pricing/payment** | Trustworthy, precise | Money is involved — no vagueness |72| **Legal/compliance** | Plain, clear, accessible | Required info — make it readable |7374## Content Hierarchy in UI7576Every UI moment has three layers of information. Not all three are always needed.7778| Layer | Purpose | Example (File Upload) |79|-------|---------|----------------------|80| **Primary** | What to do | "Upload your photo" |81| **Secondary** | Why or context | "This will be your profile picture" |82| **Tertiary** | How or constraints | "JPG or PNG, max 5 MB" |8384**Rules:**85- Primary copy is always visible86- Secondary copy appears when context is unclear87- Tertiary copy appears on hover, in helper text, or when errors occur88- Mobile: reduce to primary + tertiary (space is precious)8990## The Microcopy Formula9192For any UI element, apply this structure:9394```95[Action Verb] + [Object] + [Benefit/Context]96```9798**Examples:**99- "Save changes" = action + object100- "Upload photo to complete your profile" = action + object + benefit101- "Delete this project permanently" = action + object + context102- "Invite teammates to collaborate" = action + object + benefit103104**When to add benefit/context:**105- The action is unfamiliar (onboarding)106- The action is irreversible (destructive)107- The action requires trust (permissions, payments)108- The action has a non-obvious outcome109110## Readability Scoring for UI111112Target readability for UI text:113114| Component | Flesch-Kincaid Grade | Max Words | Max Characters |115|-----------|---------------------|-----------|----------------|116| Button label | Grade 3-5 | 1-4 | 25 |117| Tooltip | Grade 5-7 | 5-15 | 80 |118| Error headline | Grade 4-6 | 3-8 | 50 |119| Error body | Grade 5-7 | 10-25 | 150 |120| Empty state headline | Grade 4-6 | 3-8 | 50 |121| Empty state body | Grade 5-8 | 10-30 | 180 |122| Toast message | Grade 4-6 | 3-10 | 60 |123| Notification title | Grade 4-6 | 3-10 | 65 |124| Notification body | Grade 5-7 | 10-25 | 150 |125| Onboarding headline | Grade 3-5 | 3-8 | 50 |126| Onboarding body | Grade 5-7 | 15-40 | 250 |127| Helper text | Grade 5-7 | 5-15 | 100 |128| Confirmation dialog title | Grade 4-6 | 3-8 | 50 |129| Confirmation dialog body | Grade 5-7 | 10-30 | 180 |130| Permission request body | Grade 5-7 | 15-35 | 200 |131| Loading message | Grade 3-5 | 2-8 | 50 |132133**Testing readability:** Paste your copy into Hemingway Editor or use the Flesch-Kincaid formula. If a 12-year-old cannot understand it instantly, rewrite it.134135## Inclusive Language Checklist136137Before shipping any microcopy:138139- [ ] **Gender-neutral:** "They" not "he/she". "Spouse" not "husband/wife". "Parent" not "mother/father" (unless context-specific).140- [ ] **Ability-neutral:** "Select" not "Click". "View" not "See". "Enter" not "Type". Avoid "simple", "easy", "just" (what is easy for you may not be for them).141- [ ] **Age-neutral:** Avoid generational slang. "Download" not "Yeet this to your device".142- [ ] **Culture-neutral:** Avoid idioms that do not translate ("break a leg", "piece of cake"). No sports metaphors as primary copy.143- [ ] **Jargon-free:** "Sign in" not "Authenticate". "Save" not "Persist". "Error" not "Exception".144- [ ] **No assumptions:** Do not assume family structure, location, device, connection speed, or technical literacy.145- [ ] **Respectful defaults:** "Preferred name" not "Nickname". "Phone number (optional)" not "Mobile number (required)".146- [ ] **Error messages blame the system, not the user:** "We couldn't process that" not "You made an error".147148## i18n Considerations for Microcopy149150Microcopy that works in English may break in translation. Plan ahead:151152### Text Expansion153154| Language | Expansion vs. English |155|----------|----------------------|156| German | +30-35% |157| French | +15-20% |158| Spanish | +20-25% |159| Italian | +15-20% |160| Portuguese | +20-30% |161| Russian | +15-20% |162| Japanese | -10-20% (character count, but wider glyphs) |163| Chinese | -20-30% (character count) |164| Arabic | +20-25% (plus RTL layout) |165| Korean | -10-15% |166167**Rules:**168- Buttons: Allow 40% extra width or use auto-sizing169- Tooltips: Max 60% of container width in English to allow expansion170- Never hard-code string widths171- Test with German and Arabic (longest expansion + RTL)172173### Cultural Sensitivity174175- **Humor:** Puns and wordplay rarely translate. Stick to clear language.176- **Formality:** German, Japanese, Korean require formal register by default. "Du" vs "Sie" in German matters enormously.177- **Color of language:** "Red" means danger in the West, luck in China. Do not rely on color words alone.178- **Dates and numbers:** "1/2/2026" is January 2 (US) or February 1 (most of the world). Use explicit formats.179- **Names:** Not everyone has a first + last name structure. "Full name" is safer than "First name / Last name".180- **Icons with text:** Thumbs-up is offensive in parts of the Middle East. Always pair icons with text labels.181182### String Externalization183184- Every user-facing string must be in a localization file, never hard-coded185- Use ICU MessageFormat for plurals: `{count, plural, one {# item} other {# items}}`186- Avoid string concatenation: `"Welcome, " + name + "!"` breaks in languages with different word order187- Use full sentences as translation units, not fragments188189## Sector Tone Guides190191### Fintech / Banking192- **Voice:** Trustworthy, precise, confident193- **Tone keywords:** Secure, clear, straightforward, reliable194- **Do:** "Your transfer of $500 to Alex is complete" / "Verify your identity to protect your account"195- **Don't:** "Woohoo, money sent!" / "We need to make sure you're really you lol"196- **Button style:** "Transfer funds", "Review statement", "Verify identity"197- **Error style:** "We couldn't complete this transfer. Your account has not been charged. [Try again]"198199### Healthcare / Wellness200- **Voice:** Empathetic, clear, reassuring201- **Tone keywords:** Caring, supportive, plain, calm202- **Do:** "Your appointment with Dr. Chen is confirmed for March 15 at 2:00 PM" / "Your results are ready. Tap to view."203- **Don't:** "Awesome, you're booked!" / "RESULTS ARE IN!!!"204- **Button style:** "Schedule appointment", "View results", "Message your care team"205- **Error style:** "We couldn't schedule your appointment. Dr. Chen is available at these other times: [alternatives]"206207### SaaS / Productivity208- **Voice:** Efficient, empowering, knowledgeable209- **Tone keywords:** Smart, capable, streamlined, no-nonsense210- **Do:** "Project created. Invite your team to get started." / "3 tasks due today"211- **Don't:** "YAY, new project!" / "You've got stuff to do"212- **Button style:** "Create project", "Invite team", "Start timer"213- **Error style:** "This project name is already taken. Try a different name. [Rename]"214215### Social / Community216- **Voice:** Warm, expressive, conversational217- **Tone keywords:** Friendly, personal, inclusive, fun218- **Do:** "Alex liked your photo" / "Share what's on your mind"219- **Don't:** "User 4829 interacted with your content" / "Compose a status update"220- **Button style:** "Share", "Like", "Comment", "Send a message"221- **Error style:** "We couldn't post that right now. Your draft is saved. [Try again]"222223### E-commerce / Marketplace224- **Voice:** Helpful, enthusiastic, trustworthy225- **Tone keywords:** Exciting, confident, reassuring, action-oriented226- **Do:** "Free shipping on orders over $50" / "Only 3 left in stock"227- **Don't:** "Shipping fees may apply based on various factors" / "Limited inventory warning"228- **Button style:** "Add to cart", "Buy now", "Apply code", "Complete purchase"229- **Error style:** "This item just sold out. We'll notify you when it's back. [Get notified]"230231### Education / EdTech232- **Voice:** Encouraging, patient, clear233- **Tone keywords:** Supportive, motivating, structured, approachable234- **Do:** "Great work! You completed 3 of 5 lessons." / "Pick up where you left off"235- **Don't:** "CRUSHING IT" / "Resume incomplete module"236- **Button style:** "Start lesson", "Continue learning", "Take quiz", "Review answers"237- **Error style:** "That answer didn't match. Review the hint and try again. [Show hint]"238239### Developer Tools240- **Voice:** Direct, precise, technical (but not jargon-heavy)241- **Tone keywords:** Efficient, accurate, no-fluff, respectful of expertise242- **Do:** "Build succeeded in 2.3s" / "API key created. Copy it now — it won't be shown again."243- **Don't:** "Yay, your build worked!" / "Here's your secret key thingy"244- **Button style:** "Deploy", "Create API key", "View logs", "Run tests"245- **Error style:** "Build failed: missing dependency `lodash@4.17`. Run `npm install lodash` to fix. [View full log]"246247### Gaming / Entertainment248- **Voice:** Energetic, immersive, personality-forward249- **Tone keywords:** Exciting, playful, dramatic, rewarding250- **Do:** "New high score! You beat your record by 200 points." / "Ready for the next challenge?"251- **Don't:** "Score updated in database" / "Proceed to next level"252- **Button style:** "Play now", "Challenge a friend", "Claim reward", "Continue quest"253- **Error style:** "Connection lost. Your progress is saved. [Reconnect]"254255### Real Estate / Property256- **Voice:** Professional, informative, aspirational257- **Tone keywords:** Trustworthy, detailed, approachable, knowledgeable258- **Do:** "3 new listings match your search" / "Schedule a tour of 123 Oak Street"259- **Don't:** "OMG new houses!" / "Initiate property viewing request"260- **Button style:** "Schedule tour", "Save listing", "Contact agent", "Get pre-approved"261- **Error style:** "This listing is no longer available. Here are similar homes nearby. [View similar]"262263### Travel / Hospitality264- **Voice:** Inspiring, helpful, warm265- **Tone keywords:** Adventurous, reassuring, personal, anticipatory266- **Do:** "Your trip to Tokyo is confirmed. 14 days to go!" / "Explore things to do near your hotel"267- **Don't:** "Booking reference confirmed" / "Ancillary activity discovery module"268- **Button style:** "Book now", "Explore destinations", "Check availability", "Add to trip"269- **Error style:** "These dates just got booked. Try nearby dates — we found 5 options. [View alternatives]"270271## Reference Architecture272273| File | Contents | Use When |274|------|----------|----------|275| `references/button-label-templates.md` | 200+ button label templates organized by action type: primary, destructive, navigation, toggle, social, commerce, file, communication. Each with tone variants, character counts, when-to-use guidance, anti-patterns, and i18n notes. | Writing button labels. Choosing between "Save" vs "Save changes" vs "Update". Standardizing CTAs across a product. |276| `references/error-success-messages.md` | 200+ error and success message templates: validation, system, permission, business logic errors. Success confirmations for every common action. Each with headline + body + recovery action + ARIA announcement. | Writing error messages. Creating success confirmations. Building a toast/notification system. Ensuring accessible error handling. |277| `references/empty-state-copy.md` | 150+ empty state copy templates: first-use, no-results, cleared, error, permission states. By component: inbox, dashboard, list, table, search, notifications, activity, calendar, kanban, files, chat. Each with headline, body, CTA, illustration suggestion, tone variants. | Designing empty states. Writing first-use experiences. Creating no-results messages. Handling permission-gated blank screens. |278| `references/onboarding-permission-copy.md` | 150+ onboarding and permission copy templates: welcome screens, profile setup, feature tours, permission requests (notifications, location, camera, etc.), pre-permission priming, progressive disclosure, activation prompts. Each with headline, body, primary/secondary CTA, visual suggestion. | Designing onboarding flows. Writing permission request screens. Creating feature tours. Building activation sequences. |279| `references/notification-tooltip-copy.md` | 200+ notification, tooltip, and contextual help templates: push notifications, in-app notifications, toasts, tooltips, helper text, confirmation dialogs, loading messages, changelog entries. Each with text template, character limit, tone, timing. | Writing push notifications. Creating tooltip copy. Building confirmation dialogs. Writing loading states. Composing changelog entries. |280281## How to Use This Skill282283### Quick Lookup284"I need a button label for [action]" — Go to `button-label-templates.md`, find the action type, pick the tone variant that matches your product voice.285286### Full Screen Copy287"I'm designing a [screen type] and need all the copy" — Combine templates from multiple reference files: buttons from `button-label-templates.md`, errors from `error-success-messages.md`, empty states from `empty-state-copy.md`, tooltips from `notification-tooltip-copy.md`.288289### Tone Calibration290"My product is a [sector] app with a [formal/casual] voice" — Use the Sector Tone Guides above to set your voice, then filter all templates through that tone.291292### Copy Audit293"Review my existing copy for quality" — Check against the principles (Clear > Clever), readability scores, inclusive language checklist, and anti-patterns in each reference file.294295### i18n Preparation296"We're localizing to [language]" — Check text expansion ratios, review cultural sensitivity notes, verify string externalization patterns.297298## Quality Checklist for Any Microcopy299300Before shipping any piece of UI text, verify:301302- [ ] Is it clear on first read? (No re-reading needed)303- [ ] Is it specific? (User knows exactly what will happen)304- [ ] Is it actionable? (User knows what to do next)305- [ ] Is it consistent? (Same terms used across the product)306- [ ] Is it concise? (No unnecessary words)307- [ ] Is it inclusive? (No gendered, ableist, or culturally specific language)308- [ ] Is it translatable? (No idioms, puns, concatenated strings)309- [ ] Is it accessible? (Works with screen readers, announced properly)310- [ ] Does it match the product voice? (Tone is appropriate for context)311- [ ] Is it tested? (Real users understood it without explanation)312313## Microcopy Decision Tree314315```316User encounters UI element317 |318 +-- Is it an action? (button, link, CTA)319 | -> button-label-templates.md320 |321 +-- Is something wrong? (error, failure, warning)322 | -> error-success-messages.md (error section)323 |324 +-- Did something succeed? (confirmation, completion)325 | -> error-success-messages.md (success section)326 |327 +-- Is it empty? (no content, no results, first use)328 | -> empty-state-copy.md329 |330 +-- Is it onboarding? (first launch, feature tour, setup)331 | -> onboarding-permission-copy.md332 |333 +-- Is it asking permission? (notifications, camera, location)334 | -> onboarding-permission-copy.md (permissions section)335 |336 +-- Is it contextual help? (tooltip, helper text, hint)337 | -> notification-tooltip-copy.md338 |339 +-- Is it a notification? (push, in-app, toast)340 | -> notification-tooltip-copy.md341 |342 +-- Is it a confirmation? (delete, cancel, destructive)343 | -> notification-tooltip-copy.md (confirmation section)344```345346## Anti-Pattern Encyclopedia (Top 25)347348| # | Anti-Pattern | Example | Fix |349|---|-------------|---------|-----|350| 1 | Vague button | "Submit" | "Create account" / "Send message" |351| 2 | "Click here" | "Click here to learn more" | "Learn more about pricing" |352| 3 | Blaming the user | "You entered an invalid email" | "That doesn't look like an email address" |353| 4 | ALL CAPS buttons | "DELETE ACCOUNT" | "Delete account" (sentence case) |354| 5 | Technical jargon | "Error 500: Internal Server Error" | "Something went wrong. We're looking into it." |355| 6 | Double negatives | "Don't forget to not leave blank" | "This field is required" |356| 7 | Inconsistent terms | "Save" here, "Update" there, "Submit" elsewhere | Pick one term per action type |357| 8 | Wall of text in modal | 200-word confirmation dialog | 2 sentences max in dialog body |358| 9 | No recovery action | "Payment failed." (full stop, nothing else) | "Payment failed. Check your card details and try again. [Update payment]" |359| 10 | Forced enthusiasm | "AMAZING! You signed up!!!" | "Welcome. Your account is ready." |360| 11 | Guilt-tripping | "No thanks, I don't want to save money" | "No thanks" / "Skip" / "Maybe later" |361| 12 | Ambiguous "OK" | Dialog with only "OK" and "Cancel" | "Delete photo" and "Keep photo" |362| 13 | Placeholder as label | Input with only "Email" as placeholder | Persistent label above + placeholder example |363| 14 | Disappearing feedback | Toast that vanishes in 1 second | Minimum 4 seconds + dismiss button |364| 15 | Generic empty state | "No items" | "No projects yet. Create your first project to get started. [Create project]" |365| 16 | Permission without context | System dialog with no pre-screen | Pre-permission screen explaining benefit first |366| 17 | Error with no specifics | "Invalid" (entire message) | "Password must be at least 8 characters" |367| 18 | Cute over clear | "Oopsie daisy! Something went wrong uwu" | "Something went wrong. Try refreshing the page." |368| 19 | Hidden destructive action | Delete styled as primary action | Red text, confirmation dialog, clear consequences |369| 20 | Loading with no context | Spinner with no message forever | "Loading your dashboard..." with progress indicator |370| 21 | Overloaded button | "Save, publish, and notify team" | Three separate actions or a split button |371| 22 | Negative framing | "You have 0 connections" | "Start connecting with people you know" |372| 23 | Passive voice error | "An error was encountered" | "We hit a snag" or "Something went wrong" |373| 24 | Unexplained restriction | "This action is not allowed" | "Only workspace admins can delete projects. Ask your admin for access." |374| 25 | Untranslatable idiom | "Piece of cake!" as success message | "Done!" or "All set!" |375376## Writing Microcopy: Step-by-Step Process3773781. **Identify the moment.** What is the user doing right now? What just happened? What emotional state are they likely in?3792. **Determine the goal.** What do you need the user to understand or do next?3803. **Pick the tone.** Use the tone adaptation table — match the context, not your default voice.3814. **Draft with the formula.** [Action] + [Object] + [Benefit/Context] as needed.3825. **Cut ruthlessly.** Remove every word that is not doing work. Read it aloud — if you stumble, simplify.3836. **Check the checklist.** Inclusive? Translatable? Accessible? Consistent? Specific?3847. **Test with real users.** Show it out of context — can they tell what it means? Show it in context — do they do the right thing?385386## Accessibility Requirements for Microcopy387388- **ARIA live regions:** Error messages and success confirmations must be announced to screen readers via `aria-live="polite"` (success) or `aria-live="assertive"` (errors).389- **Error association:** Every error message must be programmatically associated with its input via `aria-describedby`.390- **Button labels:** If a button uses only an icon, provide `aria-label` with the full text label.391- **Tooltip accessibility:** Tooltips must be reachable via keyboard (focus, not just hover) and announced by screen readers.392- **Loading announcements:** Announce loading start and completion to screen readers.393- **Confirmation dialogs:** Focus must move to the dialog when it opens and return to the trigger when it closes.394- **Status messages:** Use `role="status"` for non-critical updates and `role="alert"` for urgent messages.395- **No time pressure:** If a toast auto-dismisses, the information must be available elsewhere (notification center, status area).