Messaging
Good messages tell users what happened, why it matters, and what to do next. Every message in products using Meteor should be clear, honest, and respectful of the user's time.
Error messages
Error messages appear after something has gone wrong. Tell users what failed and how to recover, not to apologise or assign blame. Lead with the most likely fix. Avoid "sorry", "please", and softeners like "oops": they trivialise real problems and undermine trust.
- Product could not be saved. Check your connection and try again.
- Import failed. The file format is not supported. Use CSV or XLSX.
- Error: An error occurred while attempting to save the product. Please try again.
- Something went wrong with your import.
Form validation
Validation messages appear inline, next to the field that failed. They are the most-read copy in any form, so precision matters.
Write validation messages that tell the user what went wrong and what to do about it. Avoid blaming the user or restating what the label already says.
- Enter a valid email address.
- Password must be at least 8 characters.
- Invalid email.
- Password is too short.
For helpText (the supporting text shown below a field before any error), explain the constraint upfront so users do not encounter a validation error in the first place.
Success messages
Success messages confirm that an action completed. Confirm the outcome and get out of the way. Avoid exclamation marks and "Success!" as a label. Reserve stronger celebration for significant milestones, not routine actions.
- Product saved.
- Order cancelled. The customer will be refunded within 5 business days.
- Success! The product has been successfully saved.
- Your order has been cancelled successfully.
Warning messages
Warning messages appear before a risky or irreversible action. They prepare users, not punish them. Be specific about what will happen and whether it can be undone. Stay calm: avoid exclamation marks and "Warning:" prefixes.
- Unsaved changes will be lost if you leave this page.
- This product will be removed from all associated Sales Channels and cannot be restored.
- Warning: You have unsaved changes!
- Are you sure you want to delete this product?
Info messages
Info messages provide context that helps users understand the current state. They do not require action and should not interrupt the workflow. Get to the point and stop: do not pad with filler phrases.
Empty states
Use the Empty State component wherever possible.
Empty states appear when a list, table, or section has no content yet. There are two distinct situations:
- Blank slate: the user has not yet added anything. Introduce the feature and prompt the first action.
- Cleared state: the user completed a task or filtered out all results. Acknowledge the outcome and suggest what to do next.
Write the heading as a direct observation, not an apology. Tell users what they can do from here.
- No products yet. Add your first product to start selling.
- No results for 'blue shirt'. Try a different search term or clear your filters.
- Unfortunately, there are no products to display at this time.
- Your search returned no results.
Loading states
Loading messages should be brief. The user already knows the app is working.
Use a label only when it adds context about what is happening. For generic operations, no label is better than a vague one.
- Loading products...
- Importing orders...
- Please wait while we load your data. This may take a moment.
- Loading...