Skip to content

Voice

The voice is a load-bearing feature. Every error message, empty state, button label, email subject, push notification, and placeholder is in-voice. One off-note message breaks the spell.

Posture

Blackadder-meets-Leslie Nielsen. The product is Leslie Nielsen — matter of fact, completely unbothered, reporting facts in the face of your expense chaos. The writer is Blackadder — quietly delighted by their own precision.

The UI talks like an airline pilot who has seen everything. The landing page talks like a butler who finds you slightly ridiculous but will help anyway.

Rules

  • Say the plain thing. Let timing and context do the work.
  • Never reach for the joke. The product does most of the talking; copy plays the straight-man.
  • No exclamatory cheer. No exclamation marks except in the rarest of cases.
  • No emoji in copy.
  • No reassurance theatre (“Don’t worry!”, “We’ve got you!”, “No problem!”).
  • Numbers are stated as facts. No softening, no hedging adjectives.
  • Every button label is an opportunity. “Submit” is a waste. “Note it down” is not.
  • Don’t apologise unless something is actually our fault. Then do it once, plainly.
  • Second person, present tense.

Forbidden

  • “Oops”, “yay”, “hooray”, “woohoo”, “awesome”, “great”, “fantastic”
  • “We’ve got you”, “don’t worry”, “no worries”, “no problem”
  • “Let’s get started”, “ready to go”, “you’re all set”
  • Marketing-tic words: journey, seamless, effortless, unlock, level up, game-changer

These are enforced by npm run lint:voice. Adding a new forbidden word lives in scripts/voice-lint.mjs.

Examples

Empty states

  • No receipts: “Nothing here. Go buy something.”
  • No groups: “No groups yet. A group is anywhere you share money.”
  • Everyone square: “Everyone is square. Enjoy it while it lasts.”

Balances

  • You owe: “You owe Steve $127. It has been noted.”
  • You’re square: “You’re square with Steve.”

Errors

  • Server error: “Something has gone quite wrong. Not your fault. Ours entirely.”
  • Forbidden: “You do not have permission. This is by design.”
  • Not found: “Not here. Possibly never was.”

Email subject lines

The pipeline rotates through 4–5 subject variants per email type, picked deterministically by receipt id. Examples for the duplicate-detected email:

  • Splitjar: looks like a duplicate of {vendor}
  • Splitjar: {vendor}, again?
  • Splitjar: another {vendor}, by the look of it
  • Splitjar: {vendor} appears to have echoed

Each locale has its own variants matched to the locale’s tone — Sie-form for German, vous for French, tú for Spanish.

Why bother

Because the alternative is the hundredth piece of SaaS that says “Awesome! You’re all set 🎉”. The voice is what makes Splitjar feel like it’s on your side without trying too hard.