Voice and content
Every user-facing string follows one voice. Engineers writing for engineers — direct, technical, honest, economical.
Voice attributes
Constant across every product and surface.
| Attribute | How it shows up |
|---|---|
| Direct | First sentence is the point. No preamble. |
| Technical | Assume a competent user. Use precise terms. |
| Honest | Truth without euphemism — “Failed to save”, not “Oops!” |
| Economical | Cut until you can’t cut more — “Deleted”, not “Successfully deleted!” |
| Active | “We couldn’t load”, not “It couldn’t be loaded”. |
Writing principles
The rules that turn the voice into concrete strings.
Brief, not truncated — cut “please”, “simply”, “just”, “easily”, “very”, “really”.
Specific, not generic — “Task #142 deleted”, not “Item deleted”.
Active voice, present tense.
Imperative for actions (“Save”); declarative for state (“Saved”).
Sentence case — not Title Case, except proper nouns.
Oxford comma — “team, clients, and partners”.
No anthropomorphization — no “I”, “I’m sorry”, “Let me…”.
No fake enthusiasm — no confetti, no “Awesome!”.
Canonical vocabulary
One word per concept, held consistent across the library and every consumer.
| Concept | Use | Don’t use |
|---|---|---|
| Permanently remove | Delete | Destroy, Erase, Wipe, Kill |
| Reversible remove from view | Archive | Hide, Bin, Trash |
| Remove from membership | Remove | Kick, Boot, Eject |
| Persist draft | Save | Store, Keep |
| Persist final | Publish | Release, Go live, Broadcast |
| Send form data | Submit | Send, Post |
| Apply pending changes | Apply | Confirm, Activate |
| Close without saving | Discard | Throw away, Forget |
| Navigate back | Back | Previous, Return |
| Abandon flow | Cancel | Abort, Nevermind, Skip |
| Close modal | Close | Dismiss, Hide |
| Copy a resource | Duplicate | Copy, Clone |
| Sign-in action | Sign in | Login, Log in |
| Sign-up action | Sign up | Register |
Component copy patterns
How the voice resolves into button labels, errors, empty states, and toasts.
Button labels
verb + object
Do Create project
Do Save changes
Do Delete account
Don’t OK
Don’t Done
Don’t Click here
Don’t Learn more
Error messages
what’s wrong + how to fix
Do Email must contain an @ symbol.
Do Email already in use. Sign in or use a different email.
Don’t Invalid input.
Don’t Error: see below.
Empty states
“No {things} yet” + value proposition + next step
Do No projects yet
Do Create your first project to track tasks and collaborate.
Don’t Nothing to show here
Don’t Click the button below to get started!
Toast messages
past-tense factual — {noun} {verb}.
Do Project created.
Do Email sent.
Don’t Success!
Don’t Your project has been successfully created.
Confirmation titles
question form with a specific noun — {Verb} {noun}?
Do Delete workspace?
Do Discard changes?
Don’t Are you sure?
Don’t Confirm action
Loading (>3s only)
present participle + specific object
Do Generating PDF…
Do Uploading 2 of 8 files…
Don’t Loading…
Don’t Please wait…
@idinstudio/ui/copy. Consumers override them through LanguageProvider with ICU message format — counts, dates, and numbers always go through Intl, never hardcoded.