Content & copy
UI strings, labels, headings, errors, empty states, and onboarding text.
Built on an anti-fluff logic (action-first, no buried answers; drop filler, keep substance), applied to product copy, not agent chat. The external skills this draws on are catalogued in sources.md.
Purpose
Catch copy that buries the action: preamble-heavy, vague, overly polite, or marketing-generic. Fix it so users know what to do in one scan.
What weak product copy gets wrong
- Answer buried, context before action; user scrolls to find the button.
- Vague time and effort, "quick," "simple," "just a few steps" mean nothing.
- Preamble and closers, welcomes, recaps, and "let us know" padding.
- Uniform politeness, "Please," "Kindly," "We'd love to" on every label.
- Filler and hedging, "really," "simply," "might," "could potentially."
- Generic SaaS voice, seamless, empower, leverage, journey, delve, robust.
Rules
1. Lead with the action
Headlines, CTAs, and empty states start with what the user can do, not context.
| Bad | Good |
|---|---|
| Welcome to your dashboard! Here you can manage all your projects. | Create project |
| We're excited to help you get started on your journey. | Add your first item |
| This page allows you to configure your notification preferences. | Notification settings |
Primary button = verb + object. Not "Get started" when "Import CSV" is the real action.
2. One job per string
Each label, line, or toast does one thing. No "and then" in a single sentence.
| Bad | Good |
|---|---|
| Enter your email address so we can send you a verification link and keep you updated. | Email + helper: "We'll send a sign-in link." |
Split headline / helper / CTA instead of one paragraph.
3. Number multi-step flows
Wizards, onboarding, and setup: numbered steps, one bounded action each.
1. Connect bank account
2. Verify identity
3. Set payout schedule
Not: "First you'll connect your account, then we'll verify you, and finally you can set up payouts."
4. End with one next step
Success screens, empty states, and confirmations name one follow-up, not three options and a recap.
| Bad | Good |
|---|---|
| You're all set! Feel free to explore the app or check out our docs. | Next: Invite a teammate |
5. No preamble, recap, or closer
Forbidden in UI copy:
- Openers: "Welcome to…", "We're thrilled…", "Let's get started…"
- Recaps: "You've successfully completed… which means you can now…"
- Closers: "Happy to help", "Let us know if you need anything", "Hope this helps"
Errors and confirmations state fact + fix. Then stop.
6. Matter-of-fact errors
No performative sympathy. State cause and fix.
| Bad | Good |
|---|---|
| Oops! Something went wrong. | Payment failed: Card declined. Try another card. |
| Uh oh, we couldn't save your changes. | Not saved: No connection. Check network and retry. |
Keep exact error codes and field names when the product exposes them.
7. Specific beats vague
Replace fuzzy promises with concrete units when time, count, or scope matters.
| Bad | Good |
|---|---|
| This only takes a moment. | About 2 minutes |
| Upload your files quickly and easily. | Upload up to 10 files (PDF, 25 MB each) |
If you don't know the number, omit the claim, don't fake specificity.
8. Cap visible lists at five
Feature lists, plan comparisons, bullet benefits: max five visible items. Split Do now vs Later or Included vs Add-on.
Rank by user priority, not marketing completeness.
9. Drop filler; keep meaning
Apply aggressive compression to microcopy, not broken grammar on critical paths.
Drop: just, really, simply, actually, basically, kindly, please (when not legally required), "we're here to help."
Never drop: not, never, no, only, except, negation changes behavior.
Keep exact: product names, API terms, units, numbers, legal required text.
| Bad | Good |
|---|---|
| Please simply enter your email address below. | |
| We couldn't possibly process your request at this time. | Can't process request. Try again in a few minutes. |
10. No generic marketing voice
Avoid unless the brand explicitly uses them:
- seamless, robust, cutting-edge, innovative, empower, leverage, unlock, journey
- "In today's fast-paced world…"
- "Designed with you in mind"
- Triple synonym stacks ("fast, reliable, and secure")
Write like the product team talks internally, then tighten once.
Mechanics
Sleak's anti-fluff rules above are the sharpened line; these are the conventional copy mechanics Sleak keeps:
- Sentence case, not Title Case, for UI text (headings, labels, buttons). Easier to read and friendlier.
- Numerals for numbers ("7 days", not "seven days"), they're scannable and shorter.
- Limit UPPERCASE. All-caps is harder to read in longer strings (letterforms lose their shape). Reserve it for short labels or eyebrows, and add a little letter-spacing when you do.
- Descriptive link/action text. The text must make sense read out of context (screen readers announce it alone, and eyes scan links). "View pricing", never "Read more" / "Click here". This is also an accessibility.md rule.
- Drop full stops on short, standalone lines (labels, single-sentence helper text, list items). Keep them in multi-sentence body copy.
- Parallel elements, parallel length. Keep copy roughly the same length across items that sit together (nav links, card titles, feature bullets) so the layout stays even.
- Break long content with descriptive sub-headings and bullets; front-load each with the key word (inverted pyramid, most important first).
Voice: distinctive beats bland
Concise and clear is the floor, not the ceiling. In marketing and personality-bearing copy, bland is the real failure, trying to appeal to everyone yields nothing memorable. A distinctive voice won't land for everyone, and that's the trade: the people who get it should love it. Keep it within brand, never at the expense of clarity on functional/critical paths.
Common mistakes
| Symptom | Example | Fix |
|---|---|---|
| Welcome wall | "Welcome to Acme! Your all-in-one solution for…" | Page title + primary CTA only |
| Fake enthusiasm | "We're so excited to have you here!" | Remove; show the first task |
| Vague CTA | Get started · Learn more · Continue | Verb + object: Import contacts, Open settings |
| Label + essay | Long placeholder tooltips | Label + one-line helper max |
| Symmetric feature trio | Three identical cards with icon + buzzword + sentence | Vary layout or cut to what matters |
| Lorem-adjacent | Generic benefit copy with no product facts | Name real limits, steps, or outcomes |
| Apologetic errors | Oops / Something went wrong | What failed + what to do |
| Permission theater | "Would you like to…?" for required flows | Direct: Allow notifications + Skip |
Fixes (quick pass)
- Delete the first sentence if it only introduces the page.
- Delete the last sentence if it only offers help or recaps success.
- Replace every "Get started" with the actual first action.
- Replace error titles with
[Thing] failedor[Field] invalid. - Cut any word that doesn't change user behavior.
- Read only the headline + primary button, if intent isn't clear, rewrite.
Do / Don't
| Do | Don't |
|---|---|
| Verb-first buttons | "Submit" when "Pay $49" is clearer |
| Headline = task or object | Headline = welcome or mission statement |
| Helper text ≤ one line | Paragraph under every field |
| Numbered setup steps | Prose walkthrough in a modal |
| Concrete limits and times | "Quick," "easy," " hassle-free" |
| Errors: fact + fix | Errors: apology + mystery |
| Match existing brand voice | Default SaaS landing-page tone |
| Preserve legal and a11y requirements | Compress away required warnings |
When to break the rules
- Marketing landing pages, longer copy OK if scannable (headers, short blocks). Still no fake warmth or filler closers.
- Legal / compliance, required disclaimers stay verbatim; tighten surrounding copy only.
- Brand voice is intentionally warm, warmth in word choice, not preamble walls or empty enthusiasm.
- Accessibility, don't sacrifice clarity for brevity; helper text and
aria-labelmay need more words than visible UI.
Pre-send check
Before shipping copy, verify:
- First visible line = action, object, or status, not welcome.
- Primary CTA names the real next step.
- No opener/closer that could be deleted with zero information loss.
- Errors state cause + fix without "Oops."
- Lists ≤ 5 items or explicitly split.
- No hedge/filler words unless they carry real uncertainty.
If the user reads only the title and primary button, they know what this screen is for.
Notes
- i18n: Short English doesn't always shorten other languages; rules apply to structure (action first), not word count.
- Agent vs UI: These rules target strings in the interface. Agent response style is out of scope unless the product IS a chat UI, then apply the same rules to bot messages.