Gary branding, metadata, and public-readiness polish

✅ merged · #3 · zgbrenner/gary ← zgbrenner/gary · opened 7d ago by zgbrenner · merged 7d ago by zgbrenner · self · +481-68 across 29 files · ↗ on GitHub

From the PR description

Summary

A polish / branding / documentation pass to make Gary feel like a coherent, intentional open-source product rather than a lightly renamed fork. No new functionality.

Branding audit - user-facing copy

Replaced lingering "Mike" branding with "Gary" in everything a user (or the AI) actually sees:

  • App shell: site-logo wordmark MikeGary; global-error page <title>.
  • AI identity: backend chat system prompt and Review Table assistant prompt now say "You are Gary...".
  • DOCX output: tracked-change author defaults MikeGary (visible in exported Word docs); internal change-id prefix mike-gary-.
  • In-app copy: built-in Saved Legal Task author badge, column-prompt placeholders (Add Column / Edit Column), the support form's question option, and the backend startup log.
  • Terminology: remaining "tabular review" wording in user-facing / LLM-facing strings → "Review Table" (and the missing-key error → "document review model").
  • Product-name code comments (storage.ts, types.ts, PeopleModal.tsx, AssistantMessage.tsx).

App metadata

frontend/src/app/layout.tsx:

  • Title: "Gary - Open-source legal AI for U.S. lawyers"
  • Description: "Gary is a simplified, self-hostable legal AI workspace for U.S. lawyers. Create matters, review documents, run Saved Legal Tasks, and export attorney-review drafts." - applied to the page, Open Graph, and Twitter cards.
  • metadataBase now reads NEXT_PUBLIC_SITE_URL (documented in .env.local.example, defaults to localhost:3000) instead of a hard-coded app.mikeoss.com.
  • OG/Twitter image points at the new Gary social preview.
  • No unsupported claims - no accuracy guarantee, no "bar-compliant", no "replaces legal research".

Visual assets

  • public/social-preview.svg + rasterized social-preview.png (1200×630) - dark neutral card, Gary wordmark, G monogram, subtle legal-document grid motif.
  • public/gary-logo.svg - Gary logo lockup (self-contained dark card so it reads on light and dark README themes).
  • public/gary-mark.svg - standalone G monogram tile.
  • public/apple-touch-icon.png - generated from the G mark; fixes a previously-broken apple icon reference.
  • Removed the orphaned MikeOSS social image link-image.jpg (a Monet painting captioned "Mike").
  • The favicon (icon.svg / favicon.ico, an abstract aperture) is intentionally kept - it carries no Mike branding and doubles as the in-app loading spinner, so replacing it would desync the spinner.

README + docs

  • Root README fully rewritten: plain-English intro, who Gary is for, what it does, a 7-step product flow (connect → create matter → upload → Review Table → Saved Legal Task → export → review), a "bring your own API key" explanation, a "How Gary differs from MikeOSS" section, feature table, current limitations, roadmap, and a License and attribution section preserving the AGPL-3.0 license and MikeOSS credit. Developer setup moved below the product overview.
  • docs/README.md added - a documentation index linking the setup guide, legal disclaimer, terminology map, and safe-testing doc.
  • CONTRIBUTING.md security link repointed to the Gary repo.
  • safe-local-testing.md updated to say Gary.

Attribution

The README's "How Gary differs from MikeOSS" and "License and attribution" sections credit MikeOSS by Will Chen, note both projects are AGPL-3.0, and state Gary is independent and unaffiliated. The LICENSE file (AGPL-3.0) is unchanged. There is no NOTICE file in the repo, so none was created.

Terminology regression check

Confirmed user-facing copy does not reintroduce "Workflow Template", "Tabular Review", "Model Provider", "Environment Variables", organisation/authorised/analyse, solicitor/barrister, "England and Wales", or "Landlord and Tenant Act 1954". The only matches are intentional: the US_TERMINOLOGY_MAP.md mapping table and the test files that assert against the old terms.

Intentionally left unchanged (internal - renaming adds risk, not value)

  • Package names mike / mike-backend ("private": true; renaming churns lockfiles for no user benefit).
  • Code identifiers: MikeProject, MikeDocument, MikeIcon, mikeApi.ts, MikeLayout, etc. - internal types/imports/filenames.
  • Database columns tabular_reviews and organisation - renaming needs a migration; the API already maps organisationorganization in responses.
  • Signup Terms/Privacy links still point to mikeoss.com - Gary has no hosted Terms/Privacy pages, and repointing a legal-agreement link somewhere that isn't actually those documents would mislead users. Self-hosters should substitute their own. Flagged as a follow-up.

Tests

  • frontend/src/lib/branding.test.ts (new, 10 checks) - metadata uses Gary branding and avoids unsupported claims; app-shell wordmark renders "Gary"; global-error title; README opens with the Gary positioning line, credits MikeOSS, links the upstream repo, preserves the AGPL note, lists the feature bullets, and includes the product flow; docs index links the three key docs; no bare "Mike" in app-shell files; Gary visual assets exist. All 10 pass.
  • Existing matterReviewTable.test.ts, builtinWorkflows.test.ts, exportDraft.test.ts still pass.

Validation

  • Backend: bun run build - clean.
  • Frontend: bun run build - TypeScript compilation succeeds (Compiled successfully in 19.8s, Finished TypeScript in 12.3s). The Next.js static prerender of /account/models fails with Error: supabaseUrl is required. - the expected codespace failure mode (no Supabase env vars configured here); unrelated to these changes.
  • Frontend: bun run lint - error count unchanged (43 before and after); no new lint issues.

Recommended next PR

  • Provide Gary-owned Terms of Use / Privacy templates (or make the signup links configurable) so deployments stop pointing at mikeoss.com.
  • Optionally rename the tabular_reviews / organisation DB columns behind a migration for full internal consistency.
  • Replace the placeholder social preview / logo with professionally designed assets before a public launch.

Test plan

  • Browser tab and link-preview show "Gary - Open-source legal AI for U.S. lawyers".
  • App-shell logo reads "Gary".
  • Trigger an assistant reply and an error - the AI identifies as Gary; the error icon comment/label is Gary.
  • Export a tracked-change DOCX - the change author is "Gary".
  • bun run frontend/src/lib/branding.test.ts → 10/10 pass.
  • README renders correctly on GitHub (logo legible on light and dark themes).

https://claude.ai/code/session_01LNzU9cGoR4SsYXon8H7aJZ


Generated by Claude Code

Our analysis

Rebrand the Mike fork as Gary with a public-readiness polish — read the full analysis →

Think the analysis missed something the PR description covers?

Commits in this PR (1)

SHA Subject Author Date
9d868c45 chore: Gary branding, metadata, and public-readiness polish Claude 2026-05-19 ↗ GitHub
commit body
Make Gary feel like a coherent, intentional open-source product rather
than a lightly renamed fork. No new functionality.

Branding / user-facing copy:
- App-shell wordmark, global-error page title, and the built-in
  Saved Legal Task author label now read "Gary" instead of "Mike".
- Backend AI identity prompts (chat system prompt, Review Table
  assistant prompt) and the DOCX tracked-change author now say "Gary".
- Column-prompt placeholders, the support form, and the backend
  startup log say "Gary".
- Remaining "tabular review" wording in user-facing/LLM-facing strings
  updated to "Review Table" / "document review model".

App metadata (frontend/src/app/layout.tsx):
- Title "Gary - Open-source legal AI for U.S. lawyers" and a factual
  description across the page, Open Graph, and Twitter cards.
- metadataBase now reads NEXT_PUBLIC_SITE_URL (documented in
  .env.local.example) instead of a hard-coded mikeoss.com domain.
- Avoids unsupported claims (no accuracy guarantee, not bar-compliant).

Visual assets:
- Add Gary social preview (SVG + rasterized PNG, 1200x630), a Gary
  wordmark/monogram logo, a standalone G mark, and a generated
  apple-touch-icon. Remove the orphaned MikeOSS link-image.jpg.
- The favicon (abstract aperture) is intentionally kept - it carries
  no Mike branding and doubles as the in-app loading spinner.

Documentation:
- Rewrite the root README: plain-English intro, who it's for, what it
  does, the 7-step product flow, bring-your-own-key explanation, how
  Gary differs from MikeOSS, features, limitations, roadmap, and a
  License & attribution section preserving the AGPL-3.0 / MikeOSS
  credit. Developer setup moved below the product overview.
- Add docs/README.md as a documentation index linking the setup
  guide, legal disclaimer, terminology map, and safe-testing doc.
- Point the CONTRIBUTING.md security link at the Gary repo.
- Update safe-local-testing.md to say Gary.

Tests:
- Add frontend/src/lib/branding.test.ts: metadata uses Gary and avoids
  unsupported claims, wordmark renders Gary, README credits MikeOSS
  and lists features + product flow, docs index links key docs, and
  the Gary visual assets exist.

Intentionally left unchanged (internal, renaming would add risk):
package names ("mike" / "mike-backend"), code identifiers (MikeProject,
MikeIcon, mikeApi, MikeLayout, etc.), the tabular_reviews /
organisation database columns, and the signup Terms/Privacy links
(no Gary-hosted legal pages exist yet - self-hosters substitute their
own).

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-3.md from inside the repo you want the changes in.

⬇ Download capture-pull-3.md