Standards for crafting clear, concise, and user-focused interface copy
Every piece of interface text should follow these five principles to create a consistent, helpful experience.
Users understand on first read
If a user needs to re-read text to understand it, the design has failed. Use plain language and familiar words.
Authentication failed due to invalid credentials
Password doesn't match
Technical jargon vs plain language
Every word earns its place
Efficient doesn't mean limited—it means no wasted words. Cut filler and redundancy.
Click on the Send button to proceed
Send
Verbose vs direct
Same terms everywhere
Use identical terminology throughout. Mixing "Sign in" and "Log in" creates confusion.
Sign in / Log in / Login
Sign in (everywhere)
Inconsistent vs unified
Their goals, not system processes
Write from the user's perspective. Focus on outcomes and benefits, not technical mechanics.
Data sync completed
Your changes are saved
System-focused vs user-focused
Never blame the user
Acknowledge the user's situation. Take responsibility for system errors. Use positive framing.
You entered an invalid email
Check your email format
Accusatory vs supportive
Voice is consistent; tone adapts to context.
Our consistent personality
Adapts to the situation
Use sentence case for all UI text.
Create new projectCreate New ProjectCREATE NEW PROJECTExceptions: Proper nouns, acronyms (API, URL), brand names
Periods
Use in complete sentences. Omit in labels, buttons, headings, list items.
Question marks
Only for actual questions: "Delete project?"
Exclamation points
Use sparingly, only for genuine excitement.
Prefer active voice for clarity and directness.
Your changes were saved
Changes saved
Passive vs active
Passive OK when actor is unknown or you're emphasizing the object.
Use present tense for actions, past tense for completed actions.
Your file will be saved
Saving...
Future vs present
After completion: "Saved" not "Save complete"
Buttons should tell users exactly what happens when clicked. Use verb + object format.
Keep labels short (1-3 words). Use nouns, not instructions.
Mark required fields with asterisk (*) and aria-required
Provide context before users need it. Don't repeat the label.
At least 8 characters with letters and numbers
We'll never share your email
Error messages should explain what went wrong and how to fix it. Structure: [What happened] + [How to fix it]
Invalid input
Email should be like: you@example.com
Vague vs specific
Error code 500
Something went wrong. Try again in a moment.
Technical vs human
You forgot to fill in required fields
Some fields need attention
Blaming vs helpful
Confirmation dialogs prevent accidental destructive actions. Use specific button labels, not Yes/No.
Are you sure?
Do you want to delete this?
Delete "Project Alpha"?
This will permanently remove the project and all its data.
Empty states appear when there's no content. Explain why it's empty and provide a clear next action.
Projects help you organize your work.
Try different keywords or check filters.
No new notifications.
Keep extremely brief. Use past tense. Auto-dismiss after 3-5 seconds.
Use present participle (-ing). Be specific for longer waits.
Skip loading text for actions under 1 second.
| Action Type | Pattern | Examples |
|---|---|---|
| Primary action | Verb + object | Save changes, Send message, Create project |
| Navigation | Destination | Go to settings, View report, Open dashboard |
| Destructive | Verb + object | Delete account, Remove item, Discard changes |
| Cancel/Dismiss | Single word | Cancel, Close, Skip, Dismiss |
| Element | Text |
|---|---|
| Required indicator | * (asterisk) |
| Loading | "Loading..." |
| Saving | "Saving..." |
| Success toast | "Saved" |
| Error toast | "Couldn't save. Try again." |
| Empty search | "No results" |
| Confirm delete | "Delete [item name]?" |
Technical jargon
"Authentication failed: Invalid credentials"
Vague errors
"An error occurred"
Long-winded
"In order to successfully complete..."
Blaming users
"You entered an invalid value"
ALL CAPS
"WARNING: THIS CANNOT BE UNDONE"
Inappropriate humor
"Oopsie! Something broke."
The system is built for localization with next-intl. All user-facing copy goes through translation keys, so write with future translation in mind — even if you're only shipping in English today.
"You have " + count + " items in your cart"
"{count} items in your cart" (use interpolation)
String concatenation breaks when word order changes across languages
It's raining cats and dogs
Heavy rain expected
Idioms rarely translate — use literal language
Click the button on the right
Select Continue to proceed
Layout positions differ in RTL languages
{name}+Translation files live in packages/i18n/messages/. See the Getting Started → Localization section for technical setup.