Error & Status Page Copy

living document
Last updated: 2026-04-25 3:46 AM (1mo ago)

These are the pages a user sees when something goes wrong. Every one follows the voice-guide error-message formula: What happened. What to do next.

Voice-guide-compliant (Option X customer-facing scope): - No em dashes - No AI-tell blacklist words or phrases - Grade 9 reading level or below - Active voice, specific actions - No "Oops!" or "Uh oh!" padding - No "Are you sure?" hedging - No exclamation points as enthusiasm


404 — Page Not Found

Use when: A URL points to a route that doesn't exist, or the resource is gone.

Signed out (public 404):

Signed in (in-app 404):

Signed in, workspace-scoped 404 (user follows a link to /w/<id>/polls/<poll-id> that no longer exists):

Micro-decision note: The workspace-scoped variant names the missing resource specifically ("poll" vs generic "page") because the URL context gives us that information, and specificity beats generic every time. If Jaymes ships a version where we don't yet know the resource type at route time, fall back to the signed-in in-app 404 above.


500 / 502 / 503 — Server Errors

Use when: A request failed because of our infrastructure.

Optional context line under the CTAs, when we have an incident ID to display:

Incident ID: <id>. Reference this if you email [support@quorum.app](mailto:support@quorum.app).

Variant: 502 Bad Gateway / 503 Service Unavailable specifically (if Jaymes wants to distinguish):

Micro-decision note: The default 500 copy is calm-and-useful, not panicked. "Something broke on our end" claims responsibility without spiraling. "We're looking at it" signals action without promising a timeline we can't keep. "Try again in a minute" gives the user something concrete to do.


Maintenance — Planned Downtime

Use when: We've taken the product offline intentionally for a deploy, migration, or upgrade.

Variant with no estimated-time window (emergency maintenance):

Context line (optional, for longer windows):

If you were mid-session, your work is saved. Pick up where you left off once we're back.

Micro-decision note: Never promise a specific return time unless you're 100% confident. "Shortly" is defensible. "Back in 10 minutes" is a promise that will bite if the migration runs long. When you have a concrete window, use it.


Offline — PWA / No Internet

Use when: The user's device has lost connectivity and the PWA shell is serving the offline page.

Micro-decision note: Don't lecture the user about their connection. "You're offline" is neutral and true. The action is reconnection; their behavior, not ours.


Access Denied — 403 Forbidden

Use when: The user is authenticated but lacks permission to access the resource.

Variant: role-limited 403 (user is in the workspace but lacks the role for this action, e.g., a member trying to delete the workspace):


Auth Required — 401 Unauthorized

Use when: The user's session expired or they hit a signed-in-only route while signed out.

Micro-decision note: The session-ended framing is more honest than "You must be signed in." It acknowledges the user was signed in and got logged out, which matches reality in most 401 cases (session expiry).


Browser Not Supported

Use when: The user's browser is below our minimum supported version.

Micro-decision note: Don't name the user's current browser in the message. We'll be wrong sometimes, and even when we're right it reads as blaming the user for using what they already have.


Rate Limited — 429 Too Many Requests

Use when: The user (or their workspace) hit a rate limit.

Variant: workspace-level rate limit (an automation or API integration is hammering the product):


Implementation notes


Change log

Version Date Change Author
1.0 2026-04-23 First draft. Eight page types covered: 404 (3 variants), 500-class, maintenance (2 variants), offline, 403 (2 variants), 401, unsupported browser, 429 (2 variants). All strings voice-guide-compliant (Option X customer-facing). Quentin