From 54e899d4fe72bcaaa9a8421b1ef4218e8bfae663 Mon Sep 17 00:00:00 2001 From: Pixel Perfect Date: Thu, 16 Jul 2026 03:06:46 +0000 Subject: [PATCH 1/3] fix(mobile): restore branded iOS home title --- apps/mobile/src/Stack.tsx | 4 +- .../src/components/CompactBrandTitle.tsx | 58 +++++++++++++++++++ apps/mobile/src/features/home/HomeHeader.tsx | 3 + .../src/features/home/HomeRouteScreen.tsx | 5 +- .../threads/sidebar-navigation-shell.tsx | 4 +- 5 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 apps/mobile/src/components/CompactBrandTitle.tsx diff --git a/apps/mobile/src/Stack.tsx b/apps/mobile/src/Stack.tsx index 3837e5dde56..78c5f403257 100644 --- a/apps/mobile/src/Stack.tsx +++ b/apps/mobile/src/Stack.tsx @@ -14,6 +14,7 @@ import { DynamicColorIOS, Platform, Pressable, ScrollView, StyleSheet } from "re import { useResolveClassNames } from "uniwind"; import { AppText as Text } from "./components/AppText"; +import { renderCompactBrandTitle } from "./components/CompactBrandTitle"; import { ArchivedThreadsRouteScreen } from "./features/archive/ArchivedThreadsRouteScreen"; import { useAgentNotificationNavigation } from "./features/agent-awareness/notificationNavigation"; import { ClerkSettingsSheetDetentProvider } from "./features/cloud/ClerkSettingsSheetDetent"; @@ -351,7 +352,8 @@ export const RootStack = createNativeStackNavigator({ ...GLASS_HEADER_OPTIONS, contentStyle: { backgroundColor: "transparent" }, headerBackVisible: false, - title: "Threads", + headerTitle: renderCompactBrandTitle, + title: "T3 Code", }, }), Thread: createNativeStackScreen({ diff --git a/apps/mobile/src/components/CompactBrandTitle.tsx b/apps/mobile/src/components/CompactBrandTitle.tsx new file mode 100644 index 00000000000..04d0f86ca03 --- /dev/null +++ b/apps/mobile/src/components/CompactBrandTitle.tsx @@ -0,0 +1,58 @@ +import { View } from "react-native"; + +import { AppText as Text } from "./AppText"; +import { T3Wordmark } from "./T3Wordmark"; +import { useThemeColor } from "../lib/useThemeColor"; + +/** + * Compact brand lockup sized for native navigation bars. + */ +export function CompactBrandTitle() { + const iconColor = useThemeColor("--color-icon"); + const mutedColor = useThemeColor("--color-foreground-muted"); + const subtleColor = useThemeColor("--color-subtle"); + + return ( + + + + Code + + + + Alpha + + + + ); +} + +export function renderCompactBrandTitle() { + return ; +} diff --git a/apps/mobile/src/features/home/HomeHeader.tsx b/apps/mobile/src/features/home/HomeHeader.tsx index 3a0342a8214..c4022cdf28b 100644 --- a/apps/mobile/src/features/home/HomeHeader.tsx +++ b/apps/mobile/src/features/home/HomeHeader.tsx @@ -11,6 +11,7 @@ import type { SearchBarCommands } from "react-native-screens"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { ControlPillMenu } from "../../components/ControlPill"; +import { renderCompactBrandTitle } from "../../components/CompactBrandTitle"; import { SymbolView } from "../../components/AppSymbol"; import { T3Wordmark } from "../../components/T3Wordmark"; import { useThemeColor } from "../../lib/useThemeColor"; @@ -269,7 +270,9 @@ function IosHomeHeader(props: HomeHeaderProps) { options={{ // Static header config (glass, title, fonts) lives in Stack.tsx // (GLASS_HEADER_OPTIONS). Only dynamic values are set here. + headerTitle: renderCompactBrandTitle, headerTintColor: iconColor, + title: "T3 Code", unstable_headerRightItems: Platform.OS === "ios" ? () => [ diff --git a/apps/mobile/src/features/home/HomeRouteScreen.tsx b/apps/mobile/src/features/home/HomeRouteScreen.tsx index 49cf06d85ec..cd9467c774e 100644 --- a/apps/mobile/src/features/home/HomeRouteScreen.tsx +++ b/apps/mobile/src/features/home/HomeRouteScreen.tsx @@ -4,6 +4,7 @@ import { useNavigation } from "@react-navigation/native"; import { useMemo, useState } from "react"; import { NativeHeaderToolbar, NativeStackScreenOptions } from "../../native/StackHeader"; +import { renderCompactBrandTitle } from "../../components/CompactBrandTitle"; import { useProjects, useThreadShells } from "../../state/entities"; import { usePendingNewTasks } from "../../state/use-pending-new-tasks"; import { useWorkspaceState } from "../../state/workspace"; @@ -86,7 +87,9 @@ export function HomeRouteScreen() { > <> {/* Restore the compact title in case the split branch blanked it. */} - + Date: Thu, 16 Jul 2026 03:22:11 +0000 Subject: [PATCH 2/3] fix(mobile): use registered DM Sans family names --- apps/mobile/src/components/CompactBrandTitle.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/mobile/src/components/CompactBrandTitle.tsx b/apps/mobile/src/components/CompactBrandTitle.tsx index 04d0f86ca03..ff66df00af8 100644 --- a/apps/mobile/src/components/CompactBrandTitle.tsx +++ b/apps/mobile/src/components/CompactBrandTitle.tsx @@ -22,7 +22,7 @@ export function CompactBrandTitle() { Date: Thu, 16 Jul 2026 03:50:20 +0000 Subject: [PATCH 3/3] fix(mobile): preserve branded title accessibility --- apps/mobile/src/components/CompactBrandTitle.tsx | 2 ++ apps/mobile/src/features/home/HomeHeader.tsx | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/mobile/src/components/CompactBrandTitle.tsx b/apps/mobile/src/components/CompactBrandTitle.tsx index ff66df00af8..2ecf34aa40c 100644 --- a/apps/mobile/src/components/CompactBrandTitle.tsx +++ b/apps/mobile/src/components/CompactBrandTitle.tsx @@ -14,8 +14,10 @@ export function CompactBrandTitle() { return ( diff --git a/apps/mobile/src/features/home/HomeHeader.tsx b/apps/mobile/src/features/home/HomeHeader.tsx index c4022cdf28b..3a0342a8214 100644 --- a/apps/mobile/src/features/home/HomeHeader.tsx +++ b/apps/mobile/src/features/home/HomeHeader.tsx @@ -11,7 +11,6 @@ import type { SearchBarCommands } from "react-native-screens"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { ControlPillMenu } from "../../components/ControlPill"; -import { renderCompactBrandTitle } from "../../components/CompactBrandTitle"; import { SymbolView } from "../../components/AppSymbol"; import { T3Wordmark } from "../../components/T3Wordmark"; import { useThemeColor } from "../../lib/useThemeColor"; @@ -270,9 +269,7 @@ function IosHomeHeader(props: HomeHeaderProps) { options={{ // Static header config (glass, title, fonts) lives in Stack.tsx // (GLASS_HEADER_OPTIONS). Only dynamic values are set here. - headerTitle: renderCompactBrandTitle, headerTintColor: iconColor, - title: "T3 Code", unstable_headerRightItems: Platform.OS === "ios" ? () => [