Skip to content

feat: Pip is Ada's logo across every surface - #235

Merged
jayleaton merged 9 commits into
mainfrom
feat/rebrand-ada-logo-20261113
Nov 13, 2026
Merged

jayleaton merged 9 commits into
mainfrom
feat/rebrand-ada-logo-20261113

Conversation

@jayleaton

@jayleaton jayleaton commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner

Stacked on #234 (the ada CLI), which is stacked on #233 (copy and names). Merge those first.

Summary

JJ chose Pip as Ada's logo. Every logo, icon and favicon now comes from one master SVG, assets/agents/pip.svg, via the existing generators. The README and the social card use the approved "A" lockup.

+ assets/agents/pip.svg                       master glyph (evenodd eyes, tight 62x60 viewBox)
+ assets/agents/pip-lockup-{dark,light}.svg/png   JJ's approved lockup "A", used as-is
+ scripts/lib/pip.ts                          parse the master, draw it alone or on a canvas
  scripts/export-brand-icons.ts   (icons:export)
    writes each Icon Composer project's Assets/pip.svg (prod lavender, nightly and dev white) and renders
    as before. New: a padded macOS PNG, copies of the prod renders to the fork's assets/agents/ set,
    apps/web/public/brand-mark.png, the marketing favicons and icons (webp), and the social card from the lockup
  scripts/export-android-icons.ts (icons:export:android)
    mobile iOS icon, splash mark, Android foreground, monochrome and splash, and the widget's PipMark.svg
  assets/{prod,nightly,dev}/app-icon.icon   text.svg layer -> pip.svg; prod fill black -> Pip navy
  apps/mobile   PipMark component replaces T3Wordmark in the work log; the widget plugin ships PipMark.svg; splash and adaptive navy #0A1442 -> #111925
  apps/desktop/resources/dmg/*.svg          Pip replaces the inline T3 glyph
  README.md     <picture> lockup (dark or light by prefers-color-scheme), X and Buy Me a Coffee badges centred under it
- assets/agents/source.png, assets/prod/logo.svg, apps/mobile/assets/android-{icon-background-*,splash-icon-*,icon-foreground,icon-mark,notification-icon}.png
                no code, config or build step references them (only the old assets/README.md did)

Variants keep the same Pip with each channel's existing backdrop. Production is solid navy with a lavender Pip, nightly is the night sky with clouds and a white Pip, and dev is the blueprint with a white Pip. That is the same way the T3 variants differed. Mobile still uses one set for every variant, as the fork already did.

Trade-off: macOS icons. Icon Composer's command line has no "macOS pre-Tahoe" preset, so upstream hand-exported those PNGs. They are now generated: the render sits on Apple's 824-on-1024 safe area. They don't have Icon Composer's native drop shadow. A hand export from Icon Composer can replace them if the shadow matters.

Evidence

The captures compare #234 (5ac6b54) with this branch. They come from a real web client on fresh dev databases and are in a secret gist: https://gist.github.com/jayleaton/b719528fd65934a59b4d11ac7a50e569

Before After
Favicon (served /favicon-32x32.png), brand-mark.png, sidebar header
Main shell
Settings → About

Social card (apps/marketing/src/assets/social-card.webp):

README rendered on GitHub: https://github.com/jayleaton/t3code/blob/feat/rebrand-ada-logo-20261113/README.md. It switches between the dark and light lockups with your GitHub theme.

Checks:

  • vp run check:changed at 73c33a7 → pass: format, lint, knip, typecheck (41 packages), test (257 files, 4,844 passed), react compiler
  • vp run icons:check → all 55 generated assets match their sources. The renders are byte-reproducible.
  • scripts/{apply-web-brand-assets,build-desktop-artifact,upstream-install-commands}.test.ts → pass (58)

Mobile: not captured here. Captain runs the MacBook iOS pass. Capture these:

  1. Home-screen icon: Pip on navy (same for Dev and Preview).
  2. Launch splash: lavender Pip alone on navy.
  3. Loading-screen BrandMark: Pip on navy for production, blueprint for dev builds, night sky for preview.
  4. Subscription Usage widget: the Pip template mark, if the widget shows it.
  5. Work-log glyph: the small Pip in front of Ada tool rows (t3_* MCP calls) in a thread.

Android, if checked: the adaptive icon (Pip inside the mask over navy), the themed monochrome icon, and the Android 12 splash.

Leftovers from the MacBook iOS pass of #234

These come from https://gist.github.com/jayleaton/5955335593e5703ddf636bcd85702f3f. They are new commits on top, so #233 and #234 are unchanged.

Item Change
t3 pair Mobile Connections → New, the localhost pairing error, web's hosted empty state, Network settings, Connect agent and the ada triage hints now say ada. The server, desktop and docs got the same sweep: Ada home, ada update, ada service …, ada serve, ada policy check and others.
Legal Mobile About → License opens LICENSE_URL (https://github.com/${CLI_RELEASE_REPOSITORY}/blob/main/LICENSE), and the in-app viewer only allows that page. Web About → Legal adds a License row. The privacy policy stays because it covers the telemetry sent to ingest.t3.codes.
Notifications The T3 Connect sentence is gone, and the same change is in docs/user/mobile-notifications.md.
Theme The "T3 Chat" theme is now Orchid, after its pink-violet palette. The stored id t3-chat is unchanged.
Labs "Ada home folder" (mobile Thread settings, web Labs and Storage). The path is still ~/.t3.
Worktrees The hint reads "ada or ada/ produces ada/add-search". The branchNamePrefix decoding default is now ada. Stored values are not migrated, so a saved prefix stays as it is.
Android Saved images go to Pictures/Ada.

Bug: mobile "Check for updates" showed Missing key at ["tag_name"] (also on main).

  • Cause: every fork release is a prerelease, so github.com/jayleaton/t3code/releases/latest redirects to /releases. That page answers 200 with JSON that has no tag_name, and decodeRelease threw. asError passed the schema message straight to the UI.
  • Fix: findEnvironmentUpdate reads the Atom feed for every channel. If the feed has no match, it falls back to the paged API index, as cliRelease and npmRelease do. An unreadable list now says "Could not read the release list. Try again."
  • Tests: two cases in environment-maintenance.test.ts failed first with the raw Missing key at ["tag_name"]. They now pass.

Guard. scripts/upstream-install-commands.test.ts now also flags T3 <Word> phrases and t3 <subcommand> hints. Before the fixes, it failed on every missed item:

apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:346  Scan the code from t3 pair …
apps/mobile/src/features/connection/pairing.ts:108                      … with t3 pair --tailscale …
apps/mobile/src/features/settings/ThreadSettingsSections.tsx:55         … the T3 home folder …
apps/mobile/src/features/settings/components/BranchNamingSettings.tsx:77  Use t3 or t3/ for t3/add-search.
apps/web/src/components/settings/BranchNamingSettings.tsx:84            For example, t3 or t3/ produces t3/add-search.
apps/web/src/components/settings/LabsSettingsPanel.tsx:153             … the T3 home folder …
packages/shared/src/themePalettes.ts:238                                label: "T3 Chat",

The widened pattern found 144 lines. Most were fixed. The rest are allowlisted, each with a reason:

  • the removed T3 Connect, named so its users know what changed;
  • t3 update in the copied command for hosts older than ada;
  • the desktop's t3 link, which ada sits beside as an alias;
  • installer copy that sets up both commands;
  • the stale-t3 service preflight;
  • the T3 Tools copyright holder;
  • markers older versions wrote;
  • the outside-agent MCP server name.

Kept on purpose: with the desktop's t3 link on PATH, the triage hint still says t3 triage. That link is the one the CLI state proves exists, and ada beside it is best-effort. t3@<version> (the npm package name) and paths such as ~/.t3/bin/t3 are also unchanged.

MacBook re-pass: the Pip list below, plus Connections → New (ada pair), About → License, Notifications, the Orchid theme, Thread settings → Ada home folder, Branch naming, and Check for updates on a stable host.

Usage data off by default

JJ's call: the fork doesn't report to upstream unless asked.

  • Server: T3CODE_TELEMETRY_ENABLED now defaults to false in AnalyticsService, and that includes the desktop's login-shell path. T3CODE_TELEMETRY_ENABLED=true (in the environment or the shell profile) still opts in, and a managed policy can still force it off. The key and host defaults are unchanged.
  • Tests: two cases in AnalyticsService.test.ts failed first. With nothing set, 20 events were sent; now none are. An unset shell value counted as on; now only an explicit true from the shell turns it on.
  • Other paths checked: web, desktop and mobile don't send analytics themselves. Only the server talks to PostHog or ingest.t3.codes. Desktop and web OTLP export only runs to endpoints the user configures. The server still downloads its model manifest from raw.githubusercontent.com/pingdotgg/t3code. That isn't telemetry, so it's left as a separate decision.
  • Copy: the t3.codes privacy-policy link is gone (legalLinks.ts is deleted). Web About → Legal → Usage data and the Welcome page footer now say "Ada doesn't collect usage data unless you turn it on with T3CODE_TELEMETRY_ENABLED." Under a policy that turns usage data off, both show the organization's notice instead. docs/user/telemetry.md (now "Turn it on") and faq.md describe it as opt-in.
About → Legal Welcome page

Merge Danger

Door: two-way. The logo is assets and generators only. The leftovers change copy and one settings default (branchNamePrefix for new settings), with no stored-data migration. Reverting restores the T3 artwork.

Blast Radius: platform

  • Usage data stops by default: installs that never set T3CODE_TELEMETRY_ENABLED stop reporting after this update.

  • Every surface's icon changes: desktop app and installers, web favicons and manifest, mobile launcher, splash and widget, DMG backgrounds, marketing, and README.

  • macOS Dock icon loses Icon Composer's native shadow. See the trade-off above.

  • Upstream merges: upstream edits to the .icon projects or the T3 PNGs will conflict here. Resolve by keeping Pip and rerunning vp run icons:export and vp run icons:export:android.

Model and harness: Claude Opus 5.5 in Claude Code (T3 Code).

🤖 Generated with Claude Code

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Nov 13, 2026
@jayleaton
jayleaton force-pushed the feat/rebrand-ada-cli-20261113 branch from 5ac6b54 to 6a58e77 Compare November 13, 2026 10:51
@jayleaton
jayleaton force-pushed the feat/rebrand-ada-logo-20261113 branch from cdc6d4c to 84bbec0 Compare November 13, 2026 10:51
@jayleaton
jayleaton marked this pull request as ready for review November 13, 2026 10:51
@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire — 5.0 KiB — 6.8 KiB ✅
Codex Thread snapshot wire — 3.8 KiB — 4.9 KiB ✅
Codex Live turn WebSocket wire — 1.2 KiB — 2.0 KiB ✅
Codex Live turn WebSocket decoded — 21.5 KiB — 24.4 KiB ✅
Codex Live turn messages — 1 — 8 ✅
Claude Total thread wire — 5.0 KiB — 6.8 KiB ✅
Claude Thread snapshot wire — 3.8 KiB — 4.9 KiB ✅
Claude Live turn WebSocket wire — 1.2 KiB — 2.0 KiB ✅
Claude Live turn WebSocket decoded — 21.9 KiB — 24.4 KiB ✅
Claude Live turn messages — 1 — 8 ✅

Baseline: unavailable · PR result: 0d3a5ed · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

jayleaton and others added 9 commits November 13, 2026 19:19
assets/agents/pip.svg is the only hand-edited source. icons:export draws it into each channel's Icon
Composer backdrop (prod navy, nightly sky, dev blueprint) and writes the desktop, web, fork and marketing
sets, a padded macOS icon and the social card. icons:export:android renders the mobile launcher, splash
and widget marks. Legacy T3 sources nothing references are removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The README picks the dark or light lockup with prefers-color-scheme. The social card nests the dark lockup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…releases

GitHub redirects /releases/latest to the release list when no release is
marked latest, which answers 200 without a tag_name, so every stable check
showed a raw schema error. Read the Atom feed for every channel, fall back to
the paged API index as cliRelease and npmRelease do, and report an unreadable
list in plain words.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mobile About -> Legal becomes License and opens LICENSE on GitHub. Web About
gains a License row beside the privacy policy, which still covers the
telemetry sent to upstream.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pairing, auth and triage hints name the ada command; the T3 Connect sentence
leaves Notifications; the T3 Chat theme is Orchid (its id stays t3-chat);
Labs and Storage say Ada home folder; new settings default the branch prefix
to ada; Android saves images to Pictures/Ada.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Allowlist the intentional ones, each with its reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The fork reported to upstream's ingest by default. Telemetry now defaults
off, including after the desktop reads the login shell, and setting
T3CODE_TELEMETRY_ENABLED=true still opts in. The web About row and Welcome
notice replace the t3.codes privacy-policy link with one line saying so,
and the user docs describe it as opt-in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jayleaton
jayleaton force-pushed the feat/rebrand-ada-logo-20261113 branch from 73c33a7 to 0d3a5ed Compare November 13, 2026 12:21
@jayleaton

Copy link
Copy Markdown
Owner Author

Restacked onto #234's fix head 70c1792 (one conflict in apps/server/src/cli/update.ts resolved; range-diff otherwise identical). Head moved 73c33a7 → 0d3a5ed. Anyone with a local copy of this branch: git fetch && git reset --hard origin/feat/rebrand-ada-logo-20261113 before pushing again.

@jayleaton
jayleaton changed the base branch from feat/rebrand-ada-cli-20261113 to main November 13, 2026 12:32
@jayleaton
jayleaton merged commit 653e015 into main Nov 13, 2026
30 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant