foolish-bandit rewrites Gary's error messages for lawyers

A sweep through the interface replaces developer-default copy with action-oriented text that tells a user what to do next.

chat-uibranding

Most legal-AI products inherit their error and empty-state copy from whatever the underlying framework spits out: blank panels that say nothing, "Processing..." with no context, an error page that's a dead end. foolish-bandit went through Gary's interface and rewrote dozens of these moments. Empty sidebars and file directories now prompt the user to upload, create, ask, or search by client and title. "Processing..." becomes "Reading the document...". Crashes no longer strand the user - a "Try Again" button now appears with a plainly worded note that Gary hit a problem, plus a link home.

None of this changes what the product does. It changes how it feels to use when something goes wrong or when a screen is empty - which, for non-technical users, is most of the friction.

So what Anyone shipping a legal-AI product to non-engineers should look at this sweep - the patterns are brand-neutral and most could be lifted wholesale.

View this fork on GitHub →

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

Commits in this thread

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

SHA Subject Author Date
b1a54c40 Merge pull request #7 from foolish-bandit/claude/lawyer-friendly-copy Zack Brenner 2026-05-07 ↗ GitHub
Make empty/loading/error copy lawyer-friendly
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-160.md from inside the repo you want the changes in.

⬇ Download capture-thread-160.md