feat: production-ready UI with onboarding wizard and dashboard
CodexBar Mobile Build / build-android (push) Successful in 31m31s
CodexBar Mobile Build / release (push) Failing after 23s

- Onboarding flow (welcome -> Codex setup -> Claude setup -> done) with
  dark-themed screens and step indicators; completion stored in SecureStore
- Smart root redirect checks onboarding state on launch
- Dashboard tab shows both services at a glance via ServiceStatusCard;
  useFocusEffect + reload() keeps it fresh when credentials change in tabs
- Settings tab manages credentials and exposes re-run setup wizard
- Polished Codex and Claude detail screens with service headers and empty states
- 4-tab layout (Home, Codex, Claude, Settings) with dark-mode tab bar
- Both hooks gain reload() for cross-tab credential refresh

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-24 17:52:06 +02:00
parent 6bcef323be
commit d5b0f9c833
15 changed files with 1398 additions and 107 deletions
+35 -3
View File
@@ -1,16 +1,39 @@
import { Tabs } from "expo-router";
import { useColorScheme } from "react-native";
import { MaterialIcons } from "@expo/vector-icons";
export default function TabLayout() {
const colorScheme = useColorScheme();
const isDark = colorScheme === "dark";
return (
<Tabs
screenOptions={{
headerShown: false,
tabBarActiveTintColor: "#10a37f",
tabBarStyle: { backgroundColor: "#ffffff" },
headerStyle: { backgroundColor: "#ffffff" },
headerTitleStyle: { fontWeight: "600" },
tabBarInactiveTintColor: isDark ? "#52525b" : "#a1a1aa",
tabBarStyle: {
backgroundColor: isDark ? "#09090b" : "#ffffff",
borderTopColor: isDark ? "#27272a" : "#f4f4f5",
height: 56,
paddingBottom: 8,
paddingTop: 6,
},
tabBarLabelStyle: {
fontSize: 10,
fontWeight: "600",
},
}}
>
<Tabs.Screen
name="index"
options={{
title: "Home",
tabBarIcon: ({ color, size }) => (
<MaterialIcons name="home" size={size} color={color} />
),
}}
/>
<Tabs.Screen
name="codex"
options={{
@@ -29,6 +52,15 @@ export default function TabLayout() {
),
}}
/>
<Tabs.Screen
name="settings"
options={{
title: "Settings",
tabBarIcon: ({ color, size }) => (
<MaterialIcons name="settings" size={size} color={color} />
),
}}
/>
</Tabs>
);
}