Skip to main content

EMAIL_VOICE_GUIDE.md β€” h.work

The one-page voice & word-list reference for every transactional email h.work sends. Authored for #1254 (copy rewrite); the copy in api/src/email/email.service.ts is written to this guide.

Reads alongside TRANSACTIONAL_EMAIL_IA.md (audience IA + per-email specs), branding.md, and the CLAUDE.md terminology table.

Last updated: 2026-06-24.


1. The voice in one line​

Warm, precise, never robotic, never cute. Every email sounds like a thoughtful person at a premium service wrote it β€” not a form letter, not a growth-hack, not an engineer in a hurry.

The bar this replaces: "You've been invited to join h.work on h.work. Click below to accept the invitation and set up your account." β€” bland, off-brand, structurally broken. The bar we hold to: copy a real person would be glad to receive.

2. Five principles​

  1. Lead with the person, not the system. Say what changed for them ("Your workspace is live") before what the platform did ("The system has activated your account").
  2. One idea per sentence; one job per email. Each email has a single purpose and a single primary action. Cut every sentence that doesn't move the reader toward it.
  3. Precise beats effusive. Warmth comes from clarity and respect for the reader's time, not from adjectives or punctuation. We never manufacture excitement with exclamation marks.
  4. Plain English, full sentences. No jargon, no internal shorthand, no concatenated fragments. Write sentences that survive translation β€” localization-ready means no string-stitching (Β§6).
  5. Tell them what happens next. Never end on a dead end. State the next step, the timeline, or where to get help.

3. Do / Don't​

Don'tDo
"You've been invited to join h.work on h.work.""You're invited to join Acme Financial on h.work."
"Click below to accept the invitation and set up your account.""Accept your invitation below β€” it takes about a minute."
"Your trial is ENDING SOON!!!""Your h.work trial ends in 3 days."
"Your most recent payment failed." (no path forward)"Your latest payment didn't go through β€” here's how to fix it."
"Hi there," / "Hi," / "Hello!" (mixed across emails)One greeting per audience (Β§5), used consistently.
"completed joining" / "We couldn't process your payment" (system-first)"verify your email" / "Your latest payment didn't go through" (reader-first)
Emoji in a heading ("You're matched πŸŽ‰")Carry the warmth in the words: "You've been matched."

4. Subject lines​

  • Under 60 characters. Front-load the meaning so it survives truncation on mobile.
  • Sentence case. No Title Case, no ALL-CAPS (acronyms like OTP / KYC excepted).
  • No exclamation marks. No emoji.
  • Name the real thing. Never the platform in the org slot ("…on h.work on h.work"). When there is no client org (staff invites), name the team, not a placeholder.
  • Audience-appropriate: Client subjects explain; Expert subjects state status; AM/Ops subjects read as internal signal; System subjects are literal ("Your h.work verification code").

5. Greetings & signoffs (per audience)​

Inherited from IA Β§2.1 / Β§6.5. Use exactly these so the catalog stops drifting between "Hi," / "Hi there," / "Hello".

AudienceGreetingSignoff
CLIENTHi {first name}, when known, else Hi there,β€” the h.work team
EXPERTHi {name},β€” the h.work Expert Network team
AM / Ops (internal)none β€” open on the signalnone, or h.work Ops
SYSTEM (OTP, reset)none β€” open on the actionnone

6. Localization-ready writing​

  • No concatenated strings. Build full sentences in the template; never assemble copy from clauses joined at runtime. Branch whole sentences instead (e.g. the domain-aware and trial-countdown variants each carry their own complete sentence).
  • No trailing-arrow glyphs in labels. Button labels are verbs ("Accept invitation"), not "Accept β†’".
  • Keep variables to nouns (names, orgs, dates, codes). Don't interpolate verbs or sentence fragments that reorder under translation.

7. Word list​

Aligns with the CLAUDE.md terminology table. Wrong terminology in user-facing copy is a review block.

UseNotWhere
Specialistagent, bot, assistantThe AI persona a client works with
Expertspecialist (for a human), reviewer-botThe Humanity Protocol human reviewer
memberuser, seatClient-facing copy for people in a client org
applicantcandidateExpert recruiting-funnel copy
client / your team / your workspacetenant, account, workspace-the-nounWhat the client org is, in client copy
Account Manageraccount repThe HP person managing the client
h.work (lowercase, with the dot)Hwork, H.Work, HWorkAlways
the h.work Expert Networkthe network, the talent poolExpert-audience name for the program
verify your emailcomplete joiningOTP / verification context (it's reused for login + reset)
invitation / invite (noun)invitiation, invβ€”
check-insync, call (when it's the recurring one)Weekly client check-in

8. Tone by moment​

  • Welcoming (invite, welcome, kickoff): warm and low-friction; say what h.work is in one line for people who've never heard of it; make the first action feel small.
  • Status (qualified, assignment, completion): clear and genuine; state the change, then what's next. No hype, no emoji β€” the good news carries itself.
  • Recovery (trial ending, payment failed, reminders): calm and specific; name the likely-benign cause, give one clear action, offer help. Never alarmist, never guilt-trip.
  • Security (OTP, password reset): neutral and minimal; one sentence of context, the code, the expiry, and how to tell if it wasn't them.
  • Internal (AM completion, KYC failure): operational and scannable; data first, no reassurance copy.

For the per-email intent, skeleton, and CTA, see TRANSACTIONAL_EMAIL_IA.md Β§4.