by codex: feat. General Improvements
CodexBar Mobile Build / build-android (push) Successful in 21m9s
CodexBar Mobile Build / release (push) Successful in 11s

This commit is contained in:
2026-06-25 14:27:58 +02:00
parent 9dd17cf565
commit 2c31be11c4
33 changed files with 1217 additions and 296 deletions
+27 -16
View File
@@ -5,7 +5,6 @@ import {
TouchableOpacity,
TextInput,
KeyboardAvoidingView,
Platform,
ScrollView,
} from "react-native";
import { SafeAreaView } from "react-native-safe-area-context";
@@ -18,6 +17,11 @@ import {
loadClaudeSessionKey,
loadClaudeLastActiveOrg,
} from "@/lib/storage";
import {
isClaudeSessionKeyValid,
validateClaudeSessionKey,
} from "@/lib/claudeCredentials";
import { COLORS } from "@/lib/constants";
export default function OnboardingClaudeScreen() {
const [savedKey, setSavedKey] = useState<string | null>(null);
@@ -35,12 +39,15 @@ export default function OnboardingClaudeScreen() {
);
}, []);
const canSave = pendingKey.trim().startsWith("sk-ant-");
const canSave = isClaudeSessionKeyValid(pendingKey);
const inlineError =
error ?? (pendingKey ? validateClaudeSessionKey(pendingKey) : null);
const handleSave = useCallback(async () => {
const trimmed = pendingKey.trim();
if (!trimmed.startsWith("sk-ant-")) {
setError("Session key must start with sk-ant-");
const validationError = validateClaudeSessionKey(trimmed);
if (validationError) {
setError(validationError);
return;
}
const orgTrimmed = pendingOrg.trim() || undefined;
@@ -58,7 +65,7 @@ export default function OnboardingClaudeScreen() {
<SafeAreaView className="flex-1 bg-neutral-950">
<KeyboardAvoidingView
className="flex-1"
behavior={Platform.OS === "ios" ? "padding" : "height"}
behavior={process.env.EXPO_OS === "ios" ? "padding" : "height"}
>
<ScrollView
className="flex-1"
@@ -77,14 +84,14 @@ export default function OnboardingClaudeScreen() {
<View className="flex-row items-center gap-x-2">
<View
className="w-6 h-6 rounded-full items-center justify-center"
style={{ backgroundColor: "#10a37f" }}
style={{ backgroundColor: COLORS.codex }}
>
<MaterialIcons name="check" size={14} color="white" />
</View>
<View className="w-12 h-0.5" style={{ backgroundColor: "#d97706" }} />
<View className="w-12 h-0.5" style={{ backgroundColor: COLORS.claude }} />
<View
className="w-6 h-6 rounded-full items-center justify-center"
style={{ backgroundColor: "#d97706" }}
style={{ backgroundColor: COLORS.claude }}
>
<Text className="text-white text-xs font-bold">2</Text>
</View>
@@ -96,9 +103,9 @@ export default function OnboardingClaudeScreen() {
<View>
<View
className="w-16 h-16 rounded-2xl items-center justify-center mb-6"
style={{ backgroundColor: "#d9770622" }}
style={{ backgroundColor: `${COLORS.claude}22` }}
>
<MaterialIcons name="psychology" size={32} color="#d97706" />
<MaterialIcons name="psychology" size={32} color={COLORS.claude} />
</View>
<Text className="text-3xl font-bold text-white mb-3">
Connect Claude.ai
@@ -112,9 +119,9 @@ export default function OnboardingClaudeScreen() {
<View className="flex-row items-center gap-x-3 p-4">
<View
className="w-10 h-10 rounded-xl items-center justify-center"
style={{ backgroundColor: "#d9770622" }}
style={{ backgroundColor: `${COLORS.claude}22` }}
>
<MaterialIcons name="check-circle" size={22} color="#d97706" />
<MaterialIcons name="check-circle" size={22} color={COLORS.claude} />
</View>
<View className="flex-1">
<Text className="text-white font-semibold">Connected</Text>
@@ -143,9 +150,9 @@ export default function OnboardingClaudeScreen() {
</View>
) : (
<View>
{error && (
{inlineError && (
<View className="bg-red-950 border border-red-900 rounded-xl px-4 py-3 mb-4">
<Text className="text-red-400 text-sm">{error}</Text>
<Text selectable className="text-red-400 text-sm">{inlineError}</Text>
</View>
)}
<TextInput
@@ -174,7 +181,9 @@ export default function OnboardingClaudeScreen() {
onPress={handleSave}
disabled={!canSave}
className="rounded-2xl py-4 items-center mb-4"
style={{ backgroundColor: canSave ? "#d97706" : "#1a1a1a" }}
style={{
backgroundColor: canSave ? COLORS.claude : "#1a1a1a",
}}
>
<Text
className="font-bold text-base"
@@ -201,7 +210,9 @@ export default function OnboardingClaudeScreen() {
<TouchableOpacity
onPress={() => router.push("/onboarding/done")}
className="rounded-2xl py-4 items-center"
style={{ backgroundColor: savedKey ? "#d97706" : "#1a1a1a" }}
style={{
backgroundColor: savedKey ? COLORS.claude : "#1a1a1a",
}}
>
<Text
className="font-bold text-base"