Writing
Copy rules for labels, buttons, errors and empty states, with words to avoid.
Case and structure
- Sentence case everywhere: headings, buttons, tabs, menus, column headers, tags. “Make intro”, “Intro forwarded”. Names keep their capitals: Leah Okonkwo, Bridge OS.
- American English: organization, color, canceled, analyze.
- No period on headings, labels, buttons, tabs, tooltips, tags or toast titles. Descriptions, helper text and anything with two sentences take one.
- Lowercase after a colon, unless a name or a full sentence follows.
- Talk to the person (“your network”), never about “the user”. Names of people and companies appear exactly as they wrote them.
Numbers
| Kind | Write | Not | Rule |
|---|---|---|---|
| Counts | 3 intros, 1,284 contacts | three intros, 1284 | Numerals, with a comma from 1,000. |
| Large counts | 12K, 12.5K, 1.3M | 12.0K, 12.5k, 1.0k | From 10,000: a capital K or M, at most one decimal, never “.0”. Below that, in full. |
| Money | $950, $9,500, $270K, $1.2M | $270k, 270K USD | Whole dollars, the same steps as counts; the symbol first; a minus before it: -$412. |
| Percentages | 83%, 2.5% | 83 %, 83.0% | No space, at most one decimal. |
| Ranges | Jul 20 to Jul 27, 5 to 10 people | Jul 20–27, 5-10 | Write “to”. |
| A count that couldn’t load | The error state | 0 | Never show 0 for a number that failed. |
Numbers that change or get compared use tabular-nums and line up on the right in a column. Format them with formatCount, formatMoney and formatPercent from @brdgapp/ui/lib/format, never by hand.
One number, three ways
Type a number.
- Count
- 12.5K
- Money
- $12.5K
- Percent
- 80%
Dates and times
| When | Write | Example |
|---|---|---|
| Today | Today | Today |
| Yesterday | Yesterday | Yesterday |
| 2 to 6 days ago | The number and “days ago”, in words | 4 days ago |
| 7 days or more, this year | The short month, then the day | Jul 20 |
| Another year | Add a comma and the year | Jul 20, 2025 |
| A time | 12-hour, a space, AM or PM | 9:40 AM |
| Date and time together | The date, “at”, the time | Jul 20, 2026 at 2:05 PM |
- Times are in the viewer’s own time zone. A relative date shows the exact date and time on hover or focus.
- Never write a date as numbers only (7/20), and never “3mo ago” or “2w”.
- Format them with
formatDateandformatTimefrom@brdgapp/ui/lib/format.
Dates on the sample network’s today
Today is Sep 16, 2026 in every example.
- Now
- Today
- 1 day before
- Yesterday
- 4 days before
- 4 days ago
- 6 days before
- 6 days ago
- 7 days before
- Sep 9
- 58 days before
- Jul 20
- 420 days before
- Jul 23, 2025
- A time
- 9:40 AM
Fields
| Part | Job | Example |
|---|---|---|
| Label | Names the value in two or three words, always visible. No colon. | |
| Placeholder | An example of the format, never the label or an instruction. | Add a type of person or sector |
| Help text | One line, before the mistake: what the value is for. | Get asked how an intro went after you make one. |
| Error | What to enter, phrased as the fix, next to the field. Never blame, never “invalid”. | Enter an email address, like leah@saltmarsh.example |
Empty states, confirmations and messages
| Where | Write | Example |
|---|---|---|
| Empty state | What will be here, then how to fill it | No intros yet. Intros you make or receive show up here. |
| Nothing matched | Quote what they searched for; offer the way back | No people match “Okonkow”. Clear search |
| Error | What failed, then what to do: two short sentences | Couldn’t load your intros. Try again. |
| Confirmation | Title asks about the named thing; body says what changes; button repeats the action | Stop sharing with Leah Okonkwo? · Stop sharing |
| Success message | Past tense, the thing’s name, under 10 words, no “successfully” | Intro sent to Leah Okonkwo |
| Waiting | Short and specific, one ellipsis | Syncing your calendar… |
Punctuation and abbreviations
| Mark | Rule | Example |
|---|---|---|
| Exclamation mark | Never on screens. An email to people may use one in its greeting. | Intro sent |
| Em dash | Never on screens. Use a period, a colon or a comma. | Couldn’t load this. Your other insights still loaded. |
| Middle dot | Only between two short details, never inside a sentence. | Made by you · 4 days ago |
| Serial comma | Not used. Add one only if the list would misread. | Contacts, organizations and intros |
| Ellipsis | One character (…), only on waiting messages and menu items that open a dialog. | Syncing your calendar… |
| Quotation marks | Curly. Quote what someone typed or said. | No people match “Okonkow” |
| Ampersand | Write “and”; keep & only in a name. | Settings and privacy |
| Acronyms | Everyday ones as they are (API, CSV, URL); Bridge’s own explained once with an ⓘ (ICP). Plurals with no apostrophe: APIs. | ICP ⓘ |
| Latin | No e.g., i.e. or etc. Write “such as”, “that is”, or finish the list. | Investors such as Saltmarsh Partners |
Bridge’s words
One word for one thing, in every Bridge app.
| Write | Meaning | Not |
|---|---|---|
| intro | Bridge introducing two people. In titles too: the Intros card, Your intros. | introduction, connection request, referral |
| make an intro | Start an intro between two people | create an introduction, send a referral |
| member | Someone with a Bridge account | user, customer |
| contact | Anyone in your network, member or not | lead, person record |
| your network | The people you know, through your contacts | your graph, your database |
| connector | Someone who can introduce you: “Priya Natarajan can introduce you” | broker, n1 |
| mutual connections | People you and someone else both know | shared contacts |
| 1st, 2nd | How directly you know someone (degree) | first-degree, tier 1 |
| ICP | The kinds of people a member wants to meet, always with an ⓘ that says so | target list, wishlist |
| network sharing | Letting another member see your network (the app is Network Sharing) | data sharing, sync |
| introlink | A link anyone can use to ask you for an intro (the app is Introlinks) | IntroLink, intro URL |
| organization | A company or firm in your network | org, account, organization |
Words to avoid
| Avoid | Why |
|---|---|
| simply, just, easy | Dismissive if it isn’t easy for this person |
| please | Not needed on a screen; save it for real requests |
| successfully | The success message already says it |
| oops, uh oh, emoji | Undermines trust when something broke |
| click here, learn more | Says nothing out of context; name the destination |
| invalid | Say the specific problem and the fix |
| Are you sure? | Say what will change instead |
| Submit, OK, Yes | Say what the button does |
Before you ship copy
- Can someone get the point in three seconds?
- Is the next step obvious?
- Is it specific: a name, a number, a date?
- Is every word the same as elsewhere in Bridge (Bridge’s words)?
- Sentence case, American spelling, no exclamation marks or em dashes?
- Read it aloud: would you say it to a colleague?
Rules
Sentence case
Buttons, titles, headings, tabs, labels and statuses use sentence case: only the first word and names get a capital. "Make intro", "Intro forwarded", "Stop sharing".
One way to write dates
"Today", "Yesterday", "4 days ago" under 7 days; then "Jul 20", and "Jul 20, 2025" in another year. Times are 12-hour (9:40 AM), in the viewer's own time zone. Use formatDate and formatTime from @brdgapp/ui/lib/format.
Say what happens
Buttons start with a verb and name the object: "Stop sharing", not "OK" or "Submit". A confirm dialog asks a question about the specific thing and its button repeats the verb. Errors say what happened and what to do next.