De-jargon user-facing model/API-key copy
From the PR description
Summary
Frontend-only copy cleanup. Removes the remaining user-facing developer/model/provider language so the app reads like GaryOSS - a private legal AI workspace - rather than a configurable developer tool. No identifiers, file names, MIME types, localStorage keys, env vars, or backend contracts were renamed; those carry behavior and were intentionally left alone per the brief.
A. User-facing copy changed
| File | Before | After |
|---|---|---|
account/layout.tsx |
tab "Models & API Keys" | tab "AI configuration" |
account/models/page.tsx |
H2 "Model Preferences" | H2 "Default assistant" |
account/models/page.tsx |
label "Tabular review model" | label "Assistant for tabular reviews" |
account/models/page.tsx |
H2 "API Keys" | H2 "AI service keys" |
account/models/page.tsx |
"You must provide your own API keys for the app to work or add your API keys into the .env file..." | "GaryOSS connects to an outside AI service to answer questions. Add a service key below to enable answers, or add the keys to a .env file if you are running your own instance." |
account/models/page.tsx |
"Title generation automatically routes to the cheapest model of whichever provider you've configured..." | "Chat titles use the cheapest assistant from whichever service you have configured." |
account/models/page.tsx |
"Anthropic (Claude) API Key" / "Google (Gemini) API Key" | "Anthropic (Claude) key" / "Google (Gemini) key" |
account/models/page.tsx |
tooltip Add a {vendor} API key to use this model |
Add a {vendor} key in AI configuration to use this assistant |
account/models/page.tsx |
placeholder "Select a model" | "Select an assistant" |
ApiKeyMissingModal.tsx |
title "API key required" | "GaryOSS isn't configured yet" |
ApiKeyMissingModal.tsx |
body "You haven't added a {provider} API key yet. Add one in your account settings to use this model." | "GaryOSS isn't connected to {service} yet. Open AI configuration to add a key." |
ApiKeyMissingModal.tsx |
button "Go to account settings" | "Open AI configuration" |
ModelToggle.tsx |
title "API key missing for selected model" / "Choose model" | "No key set for this assistant" / "Choose assistant" |
ModelToggle.tsx |
aria-label "API key missing" | "No key set" |
ModelToggle.tsx |
fallback label "Model" | "Assistant" |
GaryOSS branding (README, root layout <title>, error/global-error titles, schema header) was already consistent before this PR - nothing else to update there.
B. Internal references intentionally left alone (and why)
These are identifiers, file names, MIME types, types, and persistent storage keys. Renaming them would either break the app or silently lose user data.
| Surface | Reason kept |
|---|---|
MikeIcon JSX symbol + mike-icon.tsx filename |
Imported by 9 files; renaming touches the whole tree without changing what the user sees. |
mikeApi.ts filename + Mike API client JSDoc header |
Imported as mikeApi everywhere; not user-visible. |
MikeMessage, MikeChat, MikeProject, MikeDocument, MikeFolder, MikeWorkflow, MikeCitationAnnotation types |
Used in ~325 places across frontend and backend. Pure type names, never rendered. |
application/mike-doc, application/mike-folder drag-and-drop MIME types |
Cross-component contract between drag sources and drop targets. Renaming requires changing every source and target atomically - risky housekeeping that's invisible to users. |
mike.selectedModel localStorage key |
Persists user's chosen assistant across sessions. Renaming silently resets every existing user's preference. |
mike-${editIdx}-${Date.now()} change ID prefix in backend/src/lib/docxTrackedChanges.ts |
Internal Word-doc tracked-changes ID; not user-visible. |
ApiKeyField, ApiKeyMissingModal component names; apiKey... props/profile fields; claude_api_key / gemini_api_key Supabase columns |
Internal symbols and DB schema; touching schema is explicitly out of scope. |
ModelToggle / ModelOption / MODELS / ModelProvider exports and the model field on MikeMessage |
Code-level naming for the assistant picker; only the user-visible labels were changed. |
C. Technical settings still reachable but de-emphasized
These remain functional but no longer announce themselves with developer language:
/account/models- the route URL is unchanged (a redirect would be a separate PR). The tab label is now "AI configuration"; the H2s are "Default assistant" and "AI service keys"; vendor names ("Anthropic (Claude)", "Google (Gemini)") are kept on the key fields because the user still needs to know which key matches which assistant when they paste it in.ModelToggledropdown inChatView- still shows model names ("Claude Opus 4.7", "Gemini 3.1 Pro"). PR #6 already hid it from the home empty state. The trigger title is now "Choose assistant" / "No key set for this assistant".ApiKeyMissingModal- still surfaces when a user picks an assistant they have no key for, but now reads "GaryOSS isn't configured yet" with an "Open AI configuration" CTA.
Provider / API / model language status
- Eliminated from normal UI: "API key", "API key required", "API key missing", "Choose model", "Select a model", "Model Preferences", "Models & API Keys", standalone "Model" fallback, "provider" prose in body copy.
- Kept (vendor names, not jargon): "Anthropic (Claude)" and "Google (Gemini)" remain on the configuration page key fields; "Claude" / "Gemini" remain in the assistant dropdown labels (real product names the lawyer needs to recognise to paste the right key).
- Dropped silently: RAG, vector, embedding, token, BYOK, OpenRouter - none of these appeared in user-facing UI to begin with; final sweep is empty.
Backend files touched
None. git diff main..HEAD -- backend/ is empty.
Final grep summary
Run after the changes:
=== User-facing 'API key' / 'API Key' in JSX/strings === (none)
=== User-facing 'Model' / 'model' in JSX text === (none)
=== Mike (user-facing only - JSX text/string literals) === (none)
=== MikeOSS anywhere === (none)
=== mike. user-prefix strings ===
frontend/src/app/hooks/useSelectedModel.ts:6:const STORAGE_KEY = "mike.selectedModel"; # intentionally left
Internal Mike* symbol counts (unchanged): 325 occurrences across frontend/backend (types, components, MIME types, JSDoc).
Build / lint / tests
npx tsc --noEmit- clean.npm run lint- 107 problems onmain, 107 after (identical baseline).npm run build- samefonts.googleapis.comsandbox network failure onmainand on this branch; environmental. Workers Builds will run the real build on the PR.- No test scripts in either
package.json.
Test plan
- Workers Build for this PR succeeds.
- Sign in. Open
/account→ settings tab now reads AI configuration. - Click it → page shows Default assistant and AI service keys sections; key fields say "(Claude) key" / "(Gemini) key"; explanation paragraph mentions GaryOSS connecting to an outside AI service.
- On
/assistant/chat/{id}, hover the assistant dropdown without a key - tooltip says "No key set for this assistant"; with a key - "Choose assistant". - Pick an assistant whose key is missing in the chat - modal title is "GaryOSS isn't configured yet" with Open AI configuration CTA.
- Verify the modal CTA still routes to
/account/modelsand the page renders.
https://claude.ai/code/session_019pRkhcGDRKQWHjzAnV5yCL
Generated by Claude Code
Our analysis
Strip developer jargon from GaryOSS user-facing copy — read the full analysis →
Think the analysis missed something the PR description covers?
Commits in this PR (1)
| SHA | Subject | Author | Date | |
|---|---|---|---|---|
2ea104bd | De-jargon user-facing model/API-key copy | Claude | 2026-05-07 | ↗ GitHub |
commit bodyFrontend-only copy cleanup. No identifiers, file names, MIME types,
localStorage keys, env vars, or backend contracts were renamed -
those carry behavior and were intentionally left alone.
User-facing changes:
- Account settings tab "Models & API Keys" → "AI configuration".
- /account/models page:
- "Model Preferences" → "Default assistant"
- "Tabular review model" → "Assistant for tabular reviews"
- "API Keys" → "AI service keys"
- Body copy rewritten to plain English ("GaryOSS connects to an
outside AI service to answer questions...").
- "Anthropic (Claude) API Key" → "Anthropic (Claude) key"
- "Google (Gemini) API Key" → "Google (Gemini) key"
- Tooltip "Add a {vendor} API key to use this model" →
"Add a {vendor} key in AI configuration to use this assistant"
- Placeholder "Select a model" → "Select an assistant"
- ApiKeyMissingModal:
- Title "API key required" → "GaryOSS isn't configured yet"
- Body softened to "GaryOSS isn't connected to {service} yet.
Open AI configuration to add a key."
- CTA "Go to account settings" → "Open AI configuration"
- ModelToggle:
- title "API key missing for selected model" → "No key set for
this assistant"
- title "Choose model" → "Choose assistant"
- aria-label "API key missing" → "No key set"
- Fallback label "Model" → "Assistant"
GaryOSS branding is already consistent in README, layouts, and
schema header. No backend files touched. License unchanged.
https://claude.ai/code/session_019pRkhcGDRKQWHjzAnV5yCL
| ||||
Capture this PR into my fork
Download a Markdown prompt that tells Claude how to port every
commit in this PR into your working tree. Run it via
claude -p < capture-pull-10.md from
inside the repo you want the changes in.