Writing and copy
Voice, the words we use and avoid, locked strings, and patterns for errors, empty states, and handoffs.
#Voice
Write as a sharp ops lead would: calm, direct, specific. Write from the owner’s side of the screen.
#Say
#Don’t say
dashboard, Weekwright Pro, Shopify, and Stripe must never appear in UI strings. The app fails its tests if they do. Internal code and comments may name vendors. Buttons, headings, nav, emails, and empty states may not.
The weekly view is a store page and the report is a weekly report. The one place “dashboard” belongs is an answer that refuses the category: the product is a weekly pack, not another dashboard to check.
#Locked strings
These are fixed. Use them exactly. If a string you need is not here, add it here first and then to the product.
| String | Job |
|---|---|
| Continue to secure checkout | Leave Weekwright briefly to pay |
| Connect your store | Leave briefly to approve store access |
| Manage billing | Plan, payment method, invoices |
| This week’s action | The fixed label on the recommended action. Not “Do this Monday” |
| Waiting for first report · Connected · Ready · Failed | The four status lines |
| Weekwright or Founding | The plan label. Never Pro |
| Profile · Billing · Store connection · Support | Settings sections, in this order |
The full list is in copy/ui-strings.md.
#Patterns
#Handoff lines
- You’ll leave Weekwright briefly to approve access, then come back.
- You’ll leave briefly to pay, then come back.
- Payment details are entered on a secure checkout page. We never ask for your card on Weekwright.
Code
<ul class="checklist" style="margin:0">
<li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> You’ll leave Weekwright briefly to approve access, then come back.</li>
<li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> You’ll leave briefly to pay, then come back.</li>
<li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> Payment details are entered on a secure checkout page. We never ask for your card on Weekwright.</li>
</ul>
No SPA, API, or OAuth jargon on screen.
#Errors
Three parts, in order: what went wrong, what to do, and, only if it helps, where to get help. No apology, no blame, no error codes on screen.
Do
That email and password don’t match. Check them and try again.
We couldn’t reach your store. Reconnect it in Settings.
Don’t
Oops! Something went wrong. Sorry about that.
Error 401: invalid OAuth token.
#Empty and waiting
One status line, honest about timing. No sample numbers, no placeholder charts.
Do
Queued · first pack Monday
Don’t
Your insights are being supercharged!
#Buttons and links
- Verb plus noun: Connect your store, Open store →. No “Submit” or “OK”.
- Cancel is Cancel. Do not invent alternatives.
- Sentence case everywhere. No Title Case Buttons, no ALL CAPS except the small
.labelstyle, which is set in CSS.
#Numbers, money, and dates
| Type | Format | Example |
|---|---|---|
| Money | Currency symbol, thousands separator, no decimals when whole | $18,420 · $59.50 |
| Change | Arrow, one decimal, percent | ↑ 12.4% · ↓ 3.1% |
| Change in running text | Sign and real minus | +12.4% · −3.1% |
| Week range | Short month, en dash | Sep 14–20 · Sep 28–Oct 4 |
| Short date | Short month, day | Sep 28 |
| Counts | Thousands separator | 9,840 |
If a total would mix currencies, show each separately and say so where totals appear.
#Sample copy
| Moment | Words |
|---|---|
| Signature | Weekwright. One pack. Same sections. Every week. |
| They ask for a custom layout | No. The pack is the product. Same sections, every week. Numbers first. One action. |
| They ask if it is AI | It’s a weekly pack. Same sections, on time. Not another dashboard to check. |
| Before the first pack | Waiting for first report. One status line. No sample numbers. |