Skip to content

Voice and tone

Pulled from real copy already shipping in the app. This is how Jaunt already talks, written down so it stays that way.

  1. Factual, never apologetic. Zero uses of “Sorry” anywhere in the app. A failure states what happened (“Failed to add place”) and, where useful, what to do next. It doesn’t say sorry for it.
  2. The count always comes before the noun. “2 of 5 voted”, “Nudged 3 people”. Never “out of”, never the number tacked on the end.
  3. Short verbs for doing, short sentences for explaining. Buttons are one or two words (“Add”, “Save”, “Get started”). Guidance and errors are short, plain sentences, never a button-length fragment trying to explain something.
  4. Warm, not cute. Contractions throughout (“doesn’t”, “couldn’t”, “you’re”), British spelling (“favourite”, “postcode”). One playful exception below. Everything else stays plain and literal on purpose.
  5. Headings are short and sentence case. One to three words, almost always. The five main nav labels (Where, When, Who, How, Docs & Tix) are the only Title Case-flavoured exceptions.

Docs & Tix, not Documents & Tickets.

Present tense at rest. A verb ending in “-ing” plus an ellipsis while working.

Almost always a specific verb, not a generic “OK” or “Confirm”. “Submit” appears exactly once, on the phone verification screen.

State Labels
Resting Add · Save · Update · Delete · Get started · Go back · Try again
Working Saving… · Adding… · Joining… · Declining… · Verifying…
  • Failed to nudge
  • Failed to add place
  • That code looks wrong — try again.
  • We couldn’t find an account with that number — try signing up instead.

Not every error is a toast. A dead invite link gets its own screen: a heading and a body line stacked, with no em dash joining them.

This Jaunt doesn’t exist It may have been deleted, or the link is wrong.

  • Everyone’s voted
  • Nudged 3 people
  • Invite link copied
  • Message sent — we’ll be in touch

Never a plurals library. Always spelled out by hand, every time a count is shown:

`Nudged ${n} ${n === 1 ? 'person' : 'people'}`

Short toasts and error banners use the same shape: a plain statement, an em dash, then a short instruction. “Upload failed — please try again.”

Kept for banners and toasts. Not used in headings or button labels.

Nothing in the app builds its own “Are you sure?” box. Every action that can’t be undone, or that leaves the app, uses the phone’s own confirm box, each with its own exact wording:

Action Message
Removing something Remove {name}?
Opening a link This will open an external link in a new tab. Continue?
Ending voting End voting now? Members will no longer be able to vote or make changes.
Reopening voting Go back to the voting phase? Members will be able to vote again for Where and When.
Removing a travel leg Remove this leg of the journey?
Logging out Log out of Jaunt on this device?
Deleting your account Delete your account? You’ll be signed out everywhere and won’t be able to log back in with this number.
Leaving a jaunt Leave this jaunt? You’ll lose access to it, and any votes you cast will be removed.
Leaving as the owner Leave this jaunt? You’re the owner, so it’ll be handed to the longest-standing member. You’ll lose access and any votes you cast will be removed.
Deleting a jaunt Delete “{name}”? This removes the jaunt and everything in it — for everyone. It can’t be undone.

The pattern: a question naming exactly what happens, then what it means for everyone else. Source: src/web/utils/confirm.ts.

  • “Jaunt” capitalisation. Used as both the product name (capital J, “This Jaunt doesn’t exist”) and a generic noun for any trip (lowercase, “start a new jaunt”), inconsistently. Worth a house rule either way rather than leaving it to chance.
  • “Docs & Tix”. Is it a one-off exception, or the start of a lighter voice for nav labels? Worth deciding on purpose either way, rather than by accident.

Spotted in passing: a placeholder reads “Whats on your mind?”, missing its apostrophe (how.tsx). It looks like a typo, not a style choice. Worth a quick copy fix separately.