Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
c86a4a9
feat(analytics, premium): implement analytics dashboard and premium s…
Kush-Srigiri Apr 2, 2026
2b249e8
fix(analytics, premium): replace hardcoded colors with useTheme
Kush-Srigiri Apr 2, 2026
d41e05b
fix(#14): fix Field import & move to components, start datingInfo lay…
Kush-Srigiri Apr 2, 2026
9ed4870
Merge branch 'dev' into feature/favorites
Kush-Srigiri Apr 2, 2026
82f6317
feat(#67): complete datingInfo screen with categories, tips modal & p…
Kush-Srigiri Apr 2, 2026
8187e94
feat(#67): complete datingInfo screen with categories, tips modal & p…
Kush-Srigiri Apr 2, 2026
4b6baf6
feat: add subscription plans screen and integrate subscription option…
LuisAll12 Apr 10, 2026
6e1b664
fix: premium delete
LuisAll12 Apr 16, 2026
16a2c37
Merge branch 'dev' into feature/favorites
LuisAll12 Apr 16, 2026
ce8c2e2
feat: add expo-image-picker and react-native-keyboard-aware-scroll-vi…
LuisAll12 Apr 16, 2026
f2c249a
Merge branch 'feature/subscriptions' into feature/favorites
LuisAll12 Apr 16, 2026
59a8b61
feat: update routing to subscriptions for premium features
LuisAll12 Apr 16, 2026
a815b66
Merge branch 'dev' into feature/favorites
Kush-Srigiri Apr 22, 2026
8e34f68
feat(favorites): fix light mode text colors, carousel width reactivit…
Kush-Srigiri Apr 22, 2026
605ffba
fix(favorites): resolve lint errors and missing dependencies (#136)
Kush-Srigiri Apr 22, 2026
61cda30
fix(favorites): resolve lint errors and missing dependencies (#136)
Kush-Srigiri Apr 22, 2026
b0c7c71
fix(favorites): resolve merge conflicts (#136)
Kush-Srigiri Apr 22, 2026
56e5059
fix(favorites): resolve merge conflicts 2.0 (#136)
Kush-Srigiri Apr 22, 2026
faee9e0
fix(favorites): resolve merge conflicts 3.0 (#136)
Kush-Srigiri Apr 22, 2026
f745a61
Delete .claude/settings.local.json
Jamie-Poeffel Apr 22, 2026
39186f6
feat: add IdeaDetail and ErrorScreen components; update package.json …
Jamie-Poeffel Apr 22, 2026
0d131b8
feat: implement server status context and connection quality hook; up…
Jamie-Poeffel Apr 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,5 @@ app-example

.claude
*.claude
claude
claude
,claude-*
Comment thread
Jamie-Poeffel marked this conversation as resolved.
37 changes: 32 additions & 5 deletions app/(auth)/outage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,12 @@ function BrokenHeart({ color }: { color: string }) {
const crackOpacity = useRef(new Animated.Value(0)).current;

useEffect(() => {
let mounted = true;
const timeouts: ReturnType<typeof setTimeout>[] = [];

function run() {
if (!mounted) return;

pulse.setValue(1);
splitLeft.setValue(0);
splitRight.setValue(0);
Expand All @@ -37,10 +42,15 @@ function BrokenHeart({ color }: { color: string }) {
crackOpacity.setValue(0);

Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
setTimeout(() => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light), 310);
setTimeout(
() => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy),
1120,
timeouts.push(
setTimeout(() => {
if (mounted) Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
}, 310),
);
timeouts.push(
setTimeout(() => {
if (mounted) Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy);
}, 1120),
);

Animated.sequence([
Expand Down Expand Up @@ -162,10 +172,27 @@ function BrokenHeart({ color }: { color: string }) {
}),
]),
Animated.delay(900),
]).start(() => run());
]).start(({ finished }) => {
if (finished && mounted) run();
});
}

run();

return () => {
mounted = false;
timeouts.forEach(clearTimeout);
[
pulse,
splitLeft,
splitRight,
splitY,
rotateLeft,
rotateRight,
crackDash,
crackOpacity,
].forEach((v) => v.stopAnimation());
};
}, []);

const leftTransform = [
Expand Down
77 changes: 40 additions & 37 deletions app/(auth)/register/addProfilePicture.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import BackWrapper from "@/components/backwrapper";
import { Pressable, Text, View } from "react-native";
import { Image } from "expo-image";
import { BtnText, Button } from "@/components/button";
import { router } from "expo-router";
import { router, Stack } from "expo-router";
import { createT } from "@/i18n";
import * as ImagePicker from "expo-image-picker";
import { useRegisterStore } from "@/utils/registerStore";
Expand Down Expand Up @@ -35,44 +35,47 @@ export default function AddProfilePicturePage() {
};

return (
<BackWrapper>
<Text style={[gs.h1, { marginTop: 35 }]}>{t("title")}</Text>
<>
<Stack.Screen options={{ headerShown: false }} />

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<Stack.Screen options={{ headerShown: false }} />

<BackWrapper>
<Text style={[gs.h1, { marginTop: 35 }]}>{t("title")}</Text>

<Text style={[gs.bodyText, { marginTop: 10, color: theme.base + "54" }]}>
{t("makeAttractive")}{" "}
<Text style={{ fontWeight: "bold" }}>{t("makeAttractiveBold")}</Text>{" "}
{t("makeAttractiveSuffix")}
</Text>
<Text style={[gs.bodyText, { marginTop: 10, color: theme.base + "54" }]}>
{t("makeAttractive")}{" "}
<Text style={{ fontWeight: "bold" }}>{t("makeAttractiveBold")}</Text>{" "}
{t("makeAttractiveSuffix")}
</Text>

<Pressable onPress={pickImage}>
<View
style={{
flexDirection: "column",
justifyContent: "center",
alignItems: "center",
marginVertical: 32,
borderRadius: 16,
}}
>
<Image
source={
data.profilePictureUri
? { uri: data.profilePictureUri }
: require("@/assets/blank-profile.png")
}
placeholder="|rF?hV%2WCj[ayj[a|j[az_NaeWBj@ayfRayfQfQM{M|azj[azf6fQfQfQIpWXofj[ayj[j[fQayWCoeoeaya}j[ayfQa{oLj?j[WVj[ayayj[fQoff7azayj[ayj[j[ayofayayayj[fQj[ayayj[ayfjj[j[ayjuayj["
transition={1000}
style={{ width: 200, height: 200, borderRadius: 16 }}
/>
</View>
</Pressable>
<Pressable onPress={pickImage}>
<View
style={{
flexDirection: "column",
justifyContent: "center",
alignItems: "center",
marginVertical: 32,
borderRadius: 16,
}}
>
<Image
source={
data.profilePictureUri
? { uri: data.profilePictureUri }
: require("@/assets/blank-profile.png")
}
placeholder="|rF?hV%2WCj[ayj[a|j[az_NaeWBj@ayfRayfQfQM{M|azj[azf6fQfQfQIpWXofj[ayj[j[fQayWCoeoeaya}j[ayfQa{oLj?j[WVj[ayayj[fQoff7azayj[ayj[j[ayofayayayj[fQj[ayayj[ayfjj[j[ayjuayj["
transition={1000}
style={{ width: 200, height: 200, borderRadius: 16 }}
/>
</View>
</Pressable>

<Button
onPress={() => router.push("/register/addProfileData")}
style={{ marginTop: "auto" }}
>
<BtnText>{t("continue")}</BtnText>
</Button>
</BackWrapper>
<Button
onPress={() => router.push("/register/addProfileData")}
style={{ marginTop: "auto" }}
>
<BtnText>{t("continue")}</BtnText>
</Button>
</BackWrapper>
</>
);
}
84 changes: 47 additions & 37 deletions app/(auth)/register/gender.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import BackWrapper from "@/components/backwrapper";
import { useTheme } from "@/lib/theme/context";
import { BtnText, Button } from "@/components/button";
import { router } from "expo-router";
import { router, Stack } from "expo-router";
import { useState } from "react";
import { Pressable, StyleSheet, Text, View } from "react-native";
import { Mars, Venus } from "lucide-react-native";
Expand Down Expand Up @@ -44,44 +44,54 @@ export default function Gender() {
};

return (
<BackWrapper>
<Text style={[gs.h1, { marginTop: 35 }]}>{t("title")}</Text>

<Text
style={[
gs.bodyText,
{ marginTop: 10, color: theme.base + "54", textAlign: "left" },
]}
>
{t("body")} <Text style={{ fontWeight: "bold" }}>{t("bodyBold")}</Text>
</Text>

<View style={styles.cardsArea}>
<Pressable
style={[styles.card, getCardStyle("male")]}
onPress={() => setSelected("male")}
<>
<Stack.Screen options={{ headerShown: false }} />

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<Stack.Screen options={{ headerShown: false }} />

<BackWrapper>
<Text style={[gs.h1, { marginTop: 35 }]}>{t("title")}</Text>

<Text
style={[
gs.bodyText,
{ marginTop: 10, color: theme.base + "54", textAlign: "left" },
]}
>
<Mars size={36} color={getLabelColor("male")} />
<Text style={[styles.cardText, { color: getLabelColor("male") }]}>
{t("male")}
</Text>
</Pressable>

<Pressable
style={[styles.card, getCardStyle("female")]}
onPress={() => setSelected("female")}
{t("body")}{" "}
<Text style={{ fontWeight: "bold" }}>{t("bodyBold")}</Text>
</Text>

<View style={styles.cardsArea}>
<Pressable
style={[styles.card, getCardStyle("male")]}
onPress={() => setSelected("male")}
>
<Mars size={36} color={getLabelColor("male")} />
<Text style={[styles.cardText, { color: getLabelColor("male") }]}>
{t("male")}
</Text>
</Pressable>

<Pressable
style={[styles.card, getCardStyle("female")]}
onPress={() => setSelected("female")}
>
<Venus size={36} color={getLabelColor("female")} />
<Text
style={[styles.cardText, { color: getLabelColor("female") }]}
>
{t("female")}
</Text>
</Pressable>
</View>

<Button
style={{ marginTop: "auto" }}
onPress={onSubmit}
disabled={!selected}
>
<Venus size={36} color={getLabelColor("female")} />
<Text style={[styles.cardText, { color: getLabelColor("female") }]}>
{t("female")}
</Text>
</Pressable>
</View>

<Button style={{ marginTop: "auto" }} onPress={onSubmit} disabled={!selected}>
<BtnText>{t("continue")}</BtnText>
</Button>
</BackWrapper>
<BtnText>{t("continue")}</BtnText>
</Button>
</BackWrapper>
</>
);
}

Expand Down
7 changes: 6 additions & 1 deletion app/(protected)/(tabs)/_layout.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import { Tabs } from "expo-router";
import { ErrorScreen } from "@/components/ErrorScreen";
import { Heart, HomeIcon, MessageCircle, PieChart, Settings } from "lucide-react-native";
import { Platform } from "react-native";
import { useTheme } from "@/lib/theme/context";

export function ErrorBoundary({ error, retry }: { error: Error; retry: () => void }) {
return <ErrorScreen error={error} retry={retry} />;
}

export default function TabLayout() {
const { theme } = useTheme();

Expand All @@ -16,7 +21,7 @@ export default function TabLayout() {
backgroundColor: theme.background,
borderTopWidth: 0,
height: Platform.OS === "ios" ? 60 : 45,
paddingBottom: Platform.OS === "ios" ? 20 : 20,
paddingBottom: Platform.OS === "ios" ? 20 : 60,
Comment thread
Kush-Srigiri marked this conversation as resolved.
paddingTop: 12,
elevation: 0,
shadowColor: "#000",
Expand Down
14 changes: 7 additions & 7 deletions app/(protected)/(tabs)/chat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ function EmptyChatsState({ isSearching, onPrimaryPress }: EmptyChatsStateProps)
style={[
styles.backBubble,
{
backgroundColor: theme.background,
backgroundColor: theme.rootBg,
shadowColor: theme.primary,
},
]}
Expand All @@ -297,7 +297,7 @@ function EmptyChatsState({ isSearching, onPrimaryPress }: EmptyChatsStateProps)
style={[
styles.frontBubble,
{
backgroundColor: theme.background,
backgroundColor: theme.rootBg,
borderColor: theme.primary,
},
]}
Expand Down Expand Up @@ -333,7 +333,7 @@ const makeStyles = (theme: Theme) =>
StyleSheet.create({
screen: {
flex: 1,
backgroundColor: theme.background,
backgroundColor: theme.rootBg,
},
searchWrapper: {
borderBottomColor: theme.base + "14",
Expand All @@ -342,7 +342,7 @@ const makeStyles = (theme: Theme) =>
searchContainer: {
paddingHorizontal: 16,
paddingVertical: 14,
backgroundColor: theme.background,
backgroundColor: theme.rootBg,
},
inputContainer: {
backgroundColor: theme.base + "10",
Expand All @@ -363,11 +363,11 @@ const makeStyles = (theme: Theme) =>
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: theme.background,
backgroundColor: theme.rootBg,
},
listContent: {
paddingBottom: 24,
backgroundColor: theme.background,
backgroundColor: theme.rootBg,
},
emptyListContent: {
flexGrow: 1,
Expand Down Expand Up @@ -463,7 +463,7 @@ const makeStyles = (theme: Theme) =>
justifyContent: "center",
},
emptyButtonText: {
color: theme.background,
color: theme.rootBg,
fontSize: 16,
fontWeight: "700",
},
Expand Down
Loading