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
Section titled “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.
- 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
Section titled “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
Section titled “Examples”Empty states
Section titled “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
Section titled “Balances”- You owe: “You owe Steve $127. It has been noted.”
- You’re square: “You’re square with Steve.”
Errors
Section titled “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
Section titled “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
Section titled “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.