Family Design System · Foundations / Voice & Tone
← Showcase Icons Layout Auth v0.3.0-rc.6

Voice & Tone

Three brands sharing a design system, three different voices. Voice is the consistent character of each brand — it doesn't change. Tone is how voice adapts to the user's situation: a celebration sounds different from a margin-call warning. This page documents both, with a microcopy library you can copy verbatim.

Brand voices

The personality each brand maintains across every surface.
Perpetuals warm · professional
"Trade with confidence."
ToneReassuring, expert EnergySteady, grounded FormalityMedium-high HumorRare, dry Address"You" / "your account" ContractionsYes (can't, you'll)
"Your trade was placed at $67,240. We'll notify you if the position moves significantly."
"Boom! 🚀 Your trade is LIVE!! Time to make some 💰"
"We can't process this transaction right now. Please try again in a moment."
"Oops! Something went sideways. Our bad!"
Barriers factual · direct
"Information first. Decoration never."
ToneBloomberg-direct EnergyCalm, signal-only FormalityHigh HumorNone Address"User" / "the account" ContractionsNo (cannot, will not)
"Order filled at 67,240.00 USD. Position size: 0.5 BTC."
"Awesome! Your BTC is yours now 🎉"
"Service interruption — 3:42 PM ET. Trading suspended pending resolution."
"Uh oh, looks like we hit a snag!"
UpsideOnly encouraging · plainspoken
"Trade like nobody's watching. Win like everyone is."
ToneFriendly, energetic EnergyLively but grounded FormalityLow-medium HumorLight, occasional Address"You" / "your streak" ContractionsYes (always)
"You're on fire — 7-trade streak. Keep it going."
"Synergy unlocked! Maximize your alpha! 💎🙌"
"That trade didn't work out. Your virtual balance is intact — try again."
"YIKES, you got rekt 😬"

Situational tone

Voice stays. Tone adapts. Match the user's emotional state, not the content type.
Situation
Perpetuals
Barriers
UpsideOnly
Celebration
Win, milestone, achievement
"Position closed at +5.62%. Nice work."
"Position closed. Realized PnL: +$37.28 (+5.62%)."
"+$37.28 — that's another one in the books."
Routine action
Standard confirmations
"Order placed."
"Order accepted. ID: ORD-2026-04-30-…"
"Got it."
Soft warning
Recoverable, user-correctable
"This will use 80% of your available margin. Continue?"
"Margin utilization 80%. Confirm."
"Heads up — this'll lock most of your margin."
Hard warning
Money on the line, irreversible
"This action cannot be undone. The position will close at market price."
"Irreversible. Position closes at market."
"This closes the position immediately. There's no undo."
Error (we own it)
Server, infrastructure
"Something went wrong on our end. We're already looking into it."
"Service error. Reference: ERR-2026-04-30-A8K3."
"That didn't work — and it's on us. Try again in a moment."
Error (user input)
Wrong format, missing field
"Please enter a valid email address."
"Email format invalid."
"That email doesn't look right — mind double-checking?"
Loss
Closed at red, money lost
"Position closed at −3.81%. Your virtual balance has been updated."
"Position closed. Realized PnL: −$17.84 (−3.81%)."
"That trade didn't go your way. Your virtual balance is still strong — onto the next one."
Empty / first-time
No data yet
"Place your first trade to see positions here."
"No open positions."
"Nothing here yet. Place your first trade to get started."

Word ladder — what to say instead

Common UI phrases that drift toward jargon, vague, or condescending. Use the right column.
Submitting...Placing order…
An error occurredWe can't reach our servers right now
Please waitConfirming with your bank — about 5 seconds
SubmitPlace trade · Save · Continue · Pay $250.00
Are you sure?Cancel limit order? · Close position?
Confirmation required[the actual question, e.g. "Cancel order?"]
Yes / NoCancel order / Keep order
Successfully completedOrder filled · Withdrawal sent · $250 added
Invalid inputEmail format isn't right
LoginSign in (verb)
SignupSign up (verb), Account (noun)
UserYou / your account / the trader
CannotCan't (Perpetuals/UpsideOnly) — keep "Cannot" for Barriers
Click here[verb the action] — "Read the terms" not "Click here for terms"
Information[the actual info, no header needed]
Empty listNo open positions · No trades yet

Microcopy library

Copy-paste ready. If a UI string isn't here, follow the brand voice rules above.
Slot Perpetuals Barriers UpsideOnly
auth.signin.title Welcome back Sign in Welcome back
auth.signin.cta Sign in Sign in Sign in
auth.signup.title Create your account Open an account Join UpsideOnly
auth.signup.cta Create account Create account Get started
auth.forgot.cta Send reset link Send reset link Send me a link
auth.2fa.subtitle We sent a 6-digit code to ····7421 Enter your authenticator code We texted a 6-digit code to (***) ***-7421
order.submit.cta Place order Place order Place trade
order.cancel.title Cancel limit order? Cancel limit order? Cancel limit order?
order.cancel.body Your pending order will be cancelled. You can place a new order at any time. Pending order will be cancelled. Reserved margin returned. Reserved margin returns to your virtual balance immediately.
order.cancel.cta Cancel order Cancel order Cancel order
position.close.title Close position? Close position? Close position?
position.close.cta Close at market Close at market Close at market
deposit.success.title Payment complete Deposit confirmed Payment complete
deposit.success.body $250.00 has been added to your account. $250.00 deposit · ID: DEP-2026-… $250 added — that's $25,000 of virtual balance to play with.
withdrawal.success.title Withdrawal submitted Withdrawal queued Withdrawal submitted
withdrawal.success.body $5,000.00 should arrive in your Chase account in 3–5 business days. $5,000.00 · ETA 3–5 business days · Bank ····4821 $5,000 on the way — should land in your Chase account in 3–5 business days.
error.500.title Something went wrong on our end Service error Something went wrong on our end
error.500.body We're already looking into it. Try again in a moment. Reference: ERR-… · Status: status.barriers.com We're already on it. Try again in a moment.
error.404.title We can't find that page Page not found We can't find that page
error.network.title Connection problem Network unreachable You're offline
error.network.cta Retry Retry Retry
empty.positions.title No open positions No open positions No open positions yet
empty.positions.cta Place a trade New trade Place your first trade
empty.notifications.title No new notifications Inbox empty You're all caught up
session.timeout.title Your session is about to expire Session timeout Still there?
session.timeout.cta Stay signed in Extend session Stay signed in
celebration.streak.title 5-trade streak Streak: 5 winning trades 5-trade streak!
celebration.tier.title You've moved up to Gold Tier promoted: Gold (2.4×) Welcome to Gold
kyc.required.title Verify your identity Identity verification required Quick verification — 90 seconds
kyc.success.title Identity verified Verification complete You're verified
kyc.review.title Your verification is under review Manual review pending We need a little more time

Numbers, dates, currency

Formatting rules for all three brands. Inconsistency reads as "broken."
TypeFormatExampleNotes
USD $X,XXX.XX $67,240.00 Always show 2 decimals, even for round amounts. Comma thousands separator.
BTC / ETH X.XXXXXXXX BTC 0.50000000 BTC Up to 8 decimals. Trim trailing zeros only when display is tight (mobile).
Big numbers Compact $48k · $1.2M · $84B Use compact form when >$10k. Lower-case k, capital M/B.
PnL / change Signed + colored +$37.28 · −$17.84 Always signed (+/−). Always color-coded. Use minus glyph (−), not hyphen (-).
Percentage Signed +5.62% Two decimals. No space before %.
Date Mon dd, yyyy · h:mm AM/PM ET Apr 23, 4:02 PM ET Drop year if same as current year. Always include timezone for trade timestamps.
Relative time Plain English Just now · 2 minutes ago · Yesterday at 3:14 PM · Apr 12 Use relative under 24 hours, calendar after.
Duration Compact 2.3 hrs · 42 min · 14h 22m Round to 1 decimal for hrs, integer for min.
Account masking 4-dot prefix Chase ····4821 · ···· ··· 7421 Use middle dot (·), not asterisk (*). 4 dots, then last 4 digits.
Reference codes PREFIX-YYYY-MM-DD-XXXX WD-2026-04-24-8X9K Always uppercase. Mono font in UI.

Universal rules (all 3 brands)

Things that apply everywhere, regardless of brand voice.

Verbs over nouns on buttons

Buttons commit users to action. Use the verb that matches the action. "Place trade", not "Trade". "Send reset link", not "Reset".

Specific over generic

"Cancel limit order?", not "Are you sure?". The user already knows we're asking — say what we're asking about.

Sentence case for everything

Buttons, headings, labels — all sentence case. Title Case is reserved for proper nouns (UpsideOnly, BTC/USD). The only exception is the type system's small-caps section labels (FOUNDATIONS, COMPONENTS) which are explicitly stylized.

No exclamation marks (with one exception)

Default: no exclamation marks. They feel insincere or marketing-y in a trading app. One exception: UpsideOnly celebration moments — "10-trade streak!" — where the exclamation is the point. Cap at one per message.

No emojis in product UI

Emojis are inconsistent across platforms, undermine trust in financial software, and break for screen readers. Use icons (see Iconography) for visual signaling. Exception: marketing copy, social posts, internal Slack — fine.

Don't blame the user

"That email format isn't right" beats "You entered an invalid email." Even when it IS the user's input, frame it as a system observation, not a user mistake.

Numbers are accurate down to the displayed precision

If the UI shows $67,240.00, the underlying number must be precise to the cent. If the actual number is fuzzy (estimates, projections), use ranges or qualifiers ("about $67k", "estimated $67,240"). Don't fake precision.

Loading copy: be specific about what's happening

"Confirming with your bank — usually 3–5 seconds", not "Loading...". Tell users what's actually being done and roughly how long.

Reference codes are an escape hatch, not the headline

Show Ref: ERR-2026-… at the bottom of error states for users who need to contact support. Never lead with the code.

Localization-ready

Don't concatenate strings. Use full sentences as i18n keys. Don't assume word order. Don't put HTML inside translatable strings (use placeholders). All copy here uses key-based identifiers (order.cancel.title) so translations stay clean.