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
Use when: A URL points to a route that doesn't exist, or the resource is gone.
Signed out (public 404):
Page not found.The link may have moved. Or it was never here.Back to sign-in → /sign-inGo to quorum.app → https://quorum.appSigned in (in-app 404):
Page not found.The link may have moved. Or the item was deleted.Back to your workspace → /w/<last-workspace-id>Go to all workspaces → /workspacesSigned in, workspace-scoped 404 (user follows a link to /w/<id>/polls/<poll-id> that no longer exists):
That poll isn't here.It may have been deleted, or the link is wrong.Back to polls → /w/<id>/pollsSearch this workspace → opens searchMicro-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.
Use when: A request failed because of our infrastructure.
Something broke on our end.We're looking at it. Try again in a minute.Reload the page (JavaScript window.location.reload())Check status → https://status.quorum.app (when the status page exists)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):
We're not reachable right now.Back in a moment. If this keeps happening, check status for details.Reload the pageCheck statusMicro-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.
Use when: We've taken the product offline intentionally for a deploy, migration, or upgrade.
Quorum Plus is under maintenance.We'll be back shortly. Estimated time: <duration>.Check status → status pageFollow updates on X → a social channel we actually monitor during maintenance windowsVariant with no estimated-time window (emergency maintenance):
Quorum Plus is under maintenance.Back soon. Check the status page for live updates.Check statusContext 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.
Use when: The user's device has lost connectivity and the PWA shell is serving the offline page.
You're offline.Reconnect to pick up where you left off.Try again (attempts to reload; if online, routes to intended destination)Drafts you made while connected are saved. (only when this is actually true)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.
Use when: The user is authenticated but lacks permission to access the resource.
You don't have access to this.Ask the workspace owner to invite you, or switch to a workspace you're a member of.Back to your workspaces → /workspacesCopy link to request access → copies the URL to clipboard, shows toast Link copied. Send it to the workspace owner.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):
Only workspace owners can do that.Ask <owner-name> to take this action, or ask them to change your role.Back → prior pageView roles → links to a roles help doc (when Paige's help content exists)Use when: The user's session expired or they hit a signed-in-only route while signed out.
Sign in to continue.Your session ended. Sign in and we'll send you right back.Sign in → /sign-in?next=<current-path>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).
Use when: The user's browser is below our minimum supported version.
This browser isn't supported.Quorum Plus needs a recent version of Chrome, Safari, Firefox, or Edge to work properly.Check which browsers are supported → help page listing versionsDownload Chrome | Download Firefox (if we want to funnel them to a specific upgrade)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.
Use when: The user (or their workspace) hit a rate limit.
Slow down for a minute.You're moving faster than our limits allow. Try again in a few seconds.Try againVariant: workspace-level rate limit (an automation or API integration is hammering the product):
This workspace hit its rate limit.A lot of requests came in quickly. Check your integrations, or wait a minute and try again.Check integrations → /w/<id>/settings/integrationsTry again<id>, <name>, <duration> are for template substitution, not for translation.<duration> slot accepts "15 minutes," "until 3:00 PM Eastern," "30 to 45 minutes." Don't let the duration string exceed ~30 characters so the subhead stays on one line at mobile width.status.quorum.app URL is aspirational — it exists in the copy but the actual status page isn't built yet. Jaymes/Damien to build the status page before wiring these CTAs.| 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 |