Content
Clear, calm, specific. How prfct products speak — in buttons, errors, empty states and everything in between.
Words are interface. A precise label removes the need for a tooltip; a good error message removes the need for a support ticket. prfct's voice is clear, calm and specific.
Voice
Mechanics
- Sentence case for everything: titles, buttons, menu items, tabs. Only proper nouns are capitalized.
- The name is always prfct, in lowercase — even at the start of a sentence. The website is prfct.dev.
- Numbers as numerals: 3 files, not three files. Use thousands separators and the viewer's locale.
- No periods on labels, buttons, headings or single-sentence helper text. Use them in multi-sentence text.
- Contractions are fine: can't, you'll. They sound human.
- Second person: address people as you; refer to the product as we sparingly.
- Dates and times are relative when recent (2 minutes ago) and absolute when older (Sep 18, 2026), with the full value in a tooltip.
Actions
Button and menu labels start with a verb and name the object: Create project, Invite teammate, Export CSV. The same action has the same label everywhere.
Errors
A good error message says what happened, why (if it helps), and what to do next — in that order, without blame.
- Validate on blur, not on keystroke. Don't show an error while someone is still typing.
- Put the message next to the problem with
FieldError, and summarize at the top of long forms. - Never lose input. An error must not clear the form.
Empty states
An empty state is an invitation, not an absence. Explain what will appear here and offer the first action: No projects yet — Create your first project to start deploying.
Confirmation
Ask for confirmation only when an action is destructive and irreversible. Name the object and the consequence: Delete “Acme website”? This removes 14 deployments and can't be undone. Prefer undo over confirmation when you can offer it.