← library
skill📝 Docs & writingv1 · updated 2026-09-10

Audience-Matched Tone

Matches every user-facing string — email subjects, notifications, buttons, errors, empty states — to the product's vibe and the reader it is written for. Use when writing or reviewing any copy a user will see.

Run it as a prompt

Paste this into any AI agent, or fetch it: curl -s https://uplift.page/api/v1/prompts/audience-matched-tone/raw

prompt.md
# Audience-Matched Tone

Default copy sounds like a form letter: "Confirm your email address", "An error occurred",
"No items found". Every string a user reads is the product talking. Establish whose voice
it is and who is reading it, then write in that voice all the way down — including the
transactional strings nobody thinks about.

## When to use

- Writing UI copy, email subjects and bodies, notifications, toasts, errors, empty states,
  onboarding, receipts, tooltips, CTA labels
- Shipping any feature that adds a user-visible string, including the auth, billing, and
  error paths a framework scaffolded for you
- Reviewing copy that reads as generic, or as off-key for the product it lives in

## Rules

1. **Find the voice before writing.** Read the landing page, the strings on adjacent
   screens, and any brand doc; match what exists rather than inventing better.
2. **The vibe never costs the meaning.** The reader still learns what happened, what it
   affects, and what to do next.
3. **Dial personality down as the stakes go up** — lost money, deleted data, security,
   outages, legal, health. Keep the warmth, drop the jokes, and never be sarcastic about
   work the reader just lost.
4. **Personality is word choice and rhythm, not decoration.** Rewrite the sentence; an emoji
   bolted onto corporate phrasing reads as a costume.
5. **Labels name what will happen, in the reader's words** — "Send invite", "Delete
   forever", not "Submit" or "OK".
6. **Keep every specific.** Amounts, deadlines, limits, causes, file names, and next steps
   survive rewriting into any tone.
7. **Write subjects and notification titles for a crowded inbox** — read alone and
   truncated. Front-load the identifying word; never a punchline the body has to complete.
8. **Sweep the siblings.** One witty toast among nine framework defaults is worse than nine
   defaults.
9. **Skip what ages or travels badly.** Memes, slang, and puns date fast and don't localize
   — a translator gets the words, not the joke.
10. **Keep accessible names literal.** `aria-label`s and alt text are read out of context;
    let the visible copy carry the voice.

Install it as a skill

Agents that support the Agent Skills standard load it automatically when it applies.

download
curl -fsSL https://uplift.page/p/audience-matched-tone/SKILL.md --create-dirs -o .agents/skills/audience-matched-tone/SKILL.md
or from any MCP client
MCP server: https://uplift.page/mcp
Tool: pull_skill  {"slug": "audience-matched-tone"}

The full skill

Default copy sounds like a form letter: "Confirm your email address", "An error occurred", "No items found". Every string a user reads is the product talking. Establish whose voice it is and who is reading it, then write in that voice all the way down — including the transactional strings nobody thinks about.

When to use

  • Writing UI copy, email subjects and bodies, notifications, toasts, errors, empty states, onboarding, receipts, tooltips, CTA labels
  • Shipping any feature that adds a user-visible string, including the auth, billing, and error paths a framework scaffolded for you
  • Reviewing copy that reads as generic, or as off-key for the product it lives in

Rules

  1. Find the voice before writing. Read the landing page, the strings on adjacent screens, and any brand doc; match what exists rather than inventing better.
  2. The vibe never costs the meaning. The reader still learns what happened, what it affects, and what to do next.
  3. Dial personality down as the stakes go up — lost money, deleted data, security, outages, legal, health. Keep the warmth, drop the jokes, and never be sarcastic about work the reader just lost.
  4. Personality is word choice and rhythm, not decoration. Rewrite the sentence; an emoji bolted onto corporate phrasing reads as a costume.
  5. Labels name what will happen, in the reader's words — "Send invite", "Delete forever", not "Submit" or "OK".
  6. Keep every specific. Amounts, deadlines, limits, causes, file names, and next steps survive rewriting into any tone.
  7. Write subjects and notification titles for a crowded inbox — read alone and truncated. Front-load the identifying word; never a punchline the body has to complete.
  8. Sweep the siblings. One witty toast among nine framework defaults is worse than nine defaults.
  9. Skip what ages or travels badly. Memes, slang, and puns date fast and don't localize — a translator gets the words, not the joke.
  10. Keep accessible names literal. aria-labels and alt text are read out of context; let the visible copy carry the voice.

Establish the voice before writing a word

  1. Read the product's own surfaces — landing page headline, hero copy, the app name, the strings already shipping next to the one you are writing.
  2. Look for a stated voice: brand guidelines, a tone section in the design docs, the marketing site's about page.
  3. Search the codebase for siblings and read them: grep -rn "Welcome\|Sign in\|Something went wrong" src/
  4. Name the audience explicitly: who they are, what they came to do, and what mood they are in at this exact screen — a signup screen and a failed-payment screen share a brand but not a reader.

If the product already has a voice, match it. If it genuinely has none, propose one in a sentence and say that you did, rather than silently picking.

Name the vibe on four axes

  • Formality — legal notice ↔ group chat
  • Energy — calm and spare ↔ exclamation points and emoji
  • Warmth — neutral machine ↔ enthusiastic friend
  • Density — terse labels ↔ full conversational sentences

Set all four once, then write every string on that setting. One string drifting off the setting is what makes a product feel machine-assembled.

One message, four products

Product vibe Email subject Empty state Failed upload
Playful consumer "One tap and you're in 🎉" "Nothing here yet — let's fix that." "That file didn't make it. Try again?"
Serious B2B / fintech "Verify your email to activate your account" "No transactions in this period." "Upload failed: file exceeds the 25 MB limit."
Developer tool "Verify your email" "No projects yet — run foo init to create one." "Upload failed (413). Max size 25 MB."
Warm wellness / care "Welcome — let's confirm it's you" "Your journal is empty. Start whenever you're ready." "We couldn't save that. Your entry is still here."

Every cell carries the same information. Only the voice changes.

Examples

Good: "One tap and you're in 🎉" — playful habit tracker; the action is still obvious.
Bad:  "Confirm your email address" — same app; correct, and sounds like a bank.

Good: "Verify your email to activate your account" — payroll tool; plain on purpose.
Bad:  "You're almost part of the fam! 🥳" — same tool; undercuts the trust it needs.

Good: "Your payment didn't go through, so your plan is paused. Update your card to
       pick up where you left off." — bad news, warm but straight.
Bad:  "Uh oh! Our hamsters dropped your credit card 🐹 Give it another whirl!"
      — jokes about the reader's money and never says the plan is paused.

Good: "3 uploads finished — 1 needs a new name." — front-loaded for a lock screen.
Bad:  "Guess what happened while you were away!" — unreadable without opening the app.

Served from the uplift.page library and refreshed within 5 minutes of every update.