RelayCTX Creative guidelinesGUIDE.states-and-language.md
RelayCTX Creative · Document

GUIDE — States & language

1,133 words · 5 min View raw Source History

GUIDE — States & language

Status: law — v1, 2026-08-03 Applies to: every surface, including the agent harness Parent: GUIDE.interface-principles.md Vocabulary canon: ../_vocab/_VOCAB.md

On a phone, copy is the interface. There isn't room for an illustration to carry the meaning — the words do it.


The rule for every state

No dead ends. Every state says what's true and what to do next.

A state that only reports a condition has done half its job. "No results" is a report. "No relays match these filters — clear filters" is a state.


Empty states

Three different empties, three different messages. Collapsing them is the most common failure.

KindMeansSays
Never had anyThe collection is new to this userWhat this is for + the first action
Filtered to nothingContent exists, filters exclude itWhat's hidden + clear filters
All doneThere were items, they're handledAcknowledge it — don't imply something is missing

The has-content guard is mandatory. A user with 50 streams must never be shown "Create your first stream". If the intro copy can render over a non-empty collection, that's a defect, not a copy nit.

Format, in order: one line of what's true · one line of why it matters or what goes here · one action. Two sentences and a button. Longer explanation goes behind a link.


Error states

Say what to do, not what failed.

Instead ofWrite
"Error 403: Forbidden""You don't have access to this relay. Ask the owner to share it."
"Failed to fetch""Couldn't reach Relay. Check your connection and try again." — with a Try again button
"Invalid input""That Code doesn't look right. Codes are letters and numbers, like DF2RPFW8RY." — never name a character count; the mint length changes (6 → 10 under wide_mint) and both lengths stay live
"Something went wrong"Almost anything more specific

Rules:


Permission, gate & scope states

These are their own category, and the most likely to leave someone stuck.

StateMust say
Approval pendingWhat was requested, of whom, and that they'll be notified
Not connectedWhy access is blocked and the exact next step to request it
Plan-limitedWhat the limit is, where they are against it, and what changes if they upgrade
Feature-gatedThat it isn't available to them — hide-don't-disable is the standing rule; a deep link redirects rather than showing a dead control
Org scope mismatchWhich org they're in, which the object belongs to, and how to switch

Fail closed, but never silently. Showing less is right; showing less with no explanation is a dead end.


Expiry & staleness

Relay's objects have lifecycles, and every terminal state explains itself:

Time is honest everywhere — relative and ticking, exact on press. Never make someone do arithmetic on a timestamp.


Loading


Voice

Plain, direct, unhurried. We are talking to someone competent who is busy.

DoDon't
"Couldn't reach Relay.""Oops! Something went wrong 😅"
"Your Code is ready.""Success! Your Code has been successfully generated!"
"Nothing here yet.""It's quiet in here…"
"Ask the owner to share it.""Please contact your administrator to request the necessary permissions."

Vocabulary — locked

UseNever
CodePIN, passcode, key
relay (user-facing)transfer (that's the API layer)
StreamPulse — anywhere a user can see
Series, Sessionthread, chain, conversation
receive / claimdownload, import
handoffexport, backup

Claim and handoff are opposite directions and must never be described as one another. Canon lives in _vocab/_VOCAB.md; the KB mirrors it.


Length at 390px

Write for the column:

ElementBudget
Title2 lines
Button1–2 words
Empty / error state2 sentences + action
Tooltip / helper1 line
Toast1 line, no action buried in it

If it doesn't fit, cut meaning-free words first — "currently", "please", "in order to".


Checklist


Framework note

Everything except the vocabulary table is generic — the three-empties model, the error formula, and the gate-state table are framework-candidate for Launchpad. The vocabulary is Relay's alone.