Empty, loading, and error strings rewritten for a practitioner audience

foolish-bandit swept 25 frontend files to replace generic placeholder strings - "No chats yet", "An error occurred", "Processing..." - with action-oriented copy that names what the user should do next. +93/-79, no backend touched.

chat-uibranding

The scope is broad. Empty states across sidebars, project and workflow listings, the tabular-review surface, document cards, the chat panel, and the project drop zone all get revised copy. Error boundaries got a structural fix alongside the copy: the top-level error.tsx and global-error.tsx now wire Next's reset callback into a "Try Again" primary CTA with "Return Home" as a secondary option. The 404 page was softened to match.

A few specific changes show the register shift. The tabular reviews empty state drops its generic heading and gains "No reviews yet" plus a plain description of what the feature does - "Gary fills a table with parties, dates, key terms, risks, and anything else you ask for." Loading strings on uploads and auth flows pick up first-person framing: "Reading the document...", "Uploading your document...", "Taking you to Gary...".

Developer-facing strings were deliberately left technical. console.error calls, thrown internal errors, and hook misuse messages are unchanged. The API-key settings page, the missing-key modal, and the model toggle keep their existing provider labels. Feature navigation names ("Tabular Review", "Workflows") were also left alone.

The PR opened and merged within five minutes on 2026-05-07. Lint count dropped by one. tsc --noEmit was clean. The local build failure was a known sandbox network issue, deferred to the Cloudflare Workers build.

So what Worth a look if your fork serves users who aren't developers - the copy changes are a reasonable baseline for lawyer-facing empty states. The error boundary wiring (Next `reset` into a "Try Again" CTA) is a small structural improvement independent of audience.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

1 commit from foolish-bandit/gary, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
da89931b Make empty/loading/error copy lawyer-friendly Claude 2026-05-07 ↗ GitHub
commit body
Sweeps the frontend for generic empty, loading, and error strings
and replaces them with action-oriented, lawyer-friendly copy that
explains what to do next. Adds a Try Again CTA to the global error
boundary so users aren't stuck on a dead page.

Highlights:
- Empty states (sidebar, file directory, modals, list pages, project
  detail) now name the next step (upload, create, ask, search by
  client/title) instead of just stating the absence.
- "Processing..." on a freshly uploaded doc → "Reading the document..."
  Upload buttons → "Uploading your document..."
- error.tsx and global-error.tsx now expose Next's reset() handler
  via a Try Again button; copy says Gary hit a problem and offers a
  return-home link.
- not-found.tsx CTA renamed Go home → Return Home.
- Login/signup error messages and progress labels rewritten
  ("Could not sign in. Check your email and password and try again.").
- Account/models alerts ("Failed to save X.") rewritten ("Could not
  save your X. Try again.").
- Tabular review streaming error: "An error occurred. Please try
  again." → "Something went wrong. Try asking again."

No backend changes, no behavior changes, no removed functionality.
Console/log/internal error details are unchanged.

https://claude.ai/code/session_019pRkhcGDRKQWHjzAnV5yCL

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-273.md from inside the repo you want the changes in.

⬇ Download capture-thread-273.md