Skip to content

Commit 049ef40

Browse files
feat: Implement foundational UI and navigation for mobile and web applications, including initial screens and layout components.
1 parent a7764ee commit 049ef40

10 files changed

Lines changed: 43 additions & 14 deletions

File tree

262 KB
Loading

apps/mobile/app/components/ActivityItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { spacing } from '../theme/spacing';
88
interface ActivityItemProps {
99
title: string;
1010
subtitle: string;
11-
amount: string;
11+
amount?: string;
1212
date: string;
1313
icon?: keyof typeof MaterialCommunityIcons.glyphMap;
1414
}

apps/mobile/app/screens/HomeScreen.tsx

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ import { SectionHeader } from '../components/SectionHeader';
1212
import { Avatar } from '../components/ui/Avatar';
1313
import { groupService } from '../services/group.service';
1414
import type { ActivityDto } from '@fairshare/shared-types';
15+
import { ActivityItem } from '../components/ActivityItem';
1516
import { useToastStore } from '../store/toastStore';
17+
import { Image } from 'react-native';
18+
19+
const LOGO_SOURCE = require('../assets/images/logo.png');
20+
1621

1722
export function HomeScreen({ navigation }: { navigation: any }) {
1823
const user = useAuthStore((state) => state.user);
@@ -45,8 +50,8 @@ export function HomeScreen({ navigation }: { navigation: any }) {
4550

4651
const quickActions = [
4752
{ label: 'Split it', icon: 'plus-circle-outline' as const, color: colors.primary, onPress: () => navigation.navigate('AddExpense', { groupId: groups[0]?.id ?? '' }) },
48-
{ label: 'Squads', icon: 'account-group-outline' as const, color: colors.accent, onPress: () => navigation.navigate('Groups') },
49-
{ label: 'Clear Air', icon: 'handshake-outline' as const, color: colors.success, onPress: () => navigation.navigate('SettleUp', { groupId: groups[0]?.id ?? '' }) },
53+
{ label: 'Groups', icon: 'account-group-outline' as const, color: colors.accent, onPress: () => navigation.navigate('Groups') },
54+
{ label: 'Settle Up', icon: 'handshake-outline' as const, color: colors.success, onPress: () => navigation.navigate('SettleUp', { groupId: groups[0]?.id ?? '' }) },
5055
];
5156

5257
const totalBalance = Number(summary?.totalBalanceCents ?? 0) / 100;
@@ -62,9 +67,16 @@ export function HomeScreen({ navigation }: { navigation: any }) {
6267
>
6368
{/* Header */}
6469
<View style={styles.header}>
65-
<View>
66-
<Text style={[typography.bodyMedium, { color: colors.text_secondary }]}>Yo, welcome back ✌️</Text>
67-
<Text style={[typography.h2, { color: colors.text_primary, marginTop: 2 }]}>{user?.name ?? 'Bestie'}</Text>
70+
<View style={styles.brandContainer}>
71+
<Image
72+
source={LOGO_SOURCE}
73+
style={styles.logo}
74+
resizeMode="contain"
75+
/>
76+
<View>
77+
<Text style={[typography.bodyMedium, { color: colors.text_secondary }]}>Yo, welcome back ✌️</Text>
78+
<Text style={[typography.h2, { color: colors.text_primary, marginTop: 2 }]}>{user?.name ?? 'Bestie'}</Text>
79+
</View>
6880
</View>
6981
<TouchableOpacity onPress={() => navigation.navigate('Profile')}>
7082
<Avatar name={user?.name ?? 'U'} size={48} />
@@ -107,7 +119,7 @@ export function HomeScreen({ navigation }: { navigation: any }) {
107119

108120
{/* Recent Activity */}
109121
<SectionHeader
110-
title="The Tea ☕"
122+
title="Recent Activity ☕"
111123
action="See all"
112124
onActionPress={() => navigation.navigate('Activity')}
113125
/>
@@ -149,6 +161,16 @@ const styles = StyleSheet.create({
149161
marginBottom: spacing.xxl,
150162
marginTop: spacing.sm,
151163
},
164+
brandContainer: {
165+
flexDirection: 'row',
166+
alignItems: 'center',
167+
gap: spacing.md,
168+
},
169+
logo: {
170+
width: 54,
171+
height: 54,
172+
borderRadius: 14,
173+
},
152174
summarySection: {
153175
marginBottom: spacing.xxl,
154176
},

apps/mobile/app/screens/ProfileScreen.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export function ProfileScreen({ navigation }: { navigation: { navigate: (route:
6666

6767
{/* Menu Sections */}
6868
<View style={styles.menuSection}>
69-
<SectionHeader title="Account Vibes" />
69+
<SectionHeader title="Account Management" />
7070
{menuItems.map((item, i) => (
7171
<Animated.View
7272
key={item.label}
@@ -107,7 +107,7 @@ export function ProfileScreen({ navigation }: { navigation: { navigate: (route:
107107

108108
<View style={styles.footer}>
109109
<Text style={[typography.caption, { color: colors.muted }]}>
110-
FairShare Gen-Z Edition v1.2.0
110+
FairShare Edition v1.0.0
111111
</Text>
112112
</View>
113113
</ScrollView>

apps/mobile/app/screens/SettingsScreen.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export function SettingsScreen() {
7171
<SectionHeader title="About FairShare" />
7272
<Card style={styles.infoCard}>
7373
<Text style={[typography.bodyMedium, { color: colors.text_secondary }]}>
74-
FairShare is built for royal expense management. Split bills with elegance and precision.
74+
FairShare is built for expense management. Split bills with elegance and precision.
7575
</Text>
7676
</Card>
7777
</View>

apps/web/app/layout.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ export const metadata: Metadata = {
3131
description: 'Smart group expense sharing app.',
3232
type: 'website',
3333
},
34+
icons: {
35+
icon: '/favicon.ico',
36+
},
3437
};
3538

3639
const manrope = Manrope({ subsets: ['latin'], variable: '--font-sans', display: 'swap' });

apps/web/public/favicon.ico

261 KB
Binary file not shown.

apps/web/public/logo.png

262 KB
Loading

apps/web/src/components/layout/Sidebar.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,16 @@ export function Sidebar() {
2727
<div className={`${glassPanel} p-6 md:p-7 min-h-[520px] flex flex-col`}>
2828
{/* Brand */}
2929
<div className="flex items-center gap-3 mb-12 px-2">
30-
<div className="w-10 h-10 bg-[var(--fs-primary)] rounded-xl flex items-center justify-center shadow-lg border border-white/20">
31-
<span className="text-white font-black text-xl">F</span>
30+
<div className="w-12 h-12 relative overflow-hidden rounded-xl shadow-lg border border-white/20">
31+
<img
32+
src="/logo.png"
33+
alt="FairShare Logo"
34+
className="w-full h-full object-cover"
35+
/>
3236
</div>
3337
<div>
3438
<h2 className="text-xl font-extrabold tracking-tight text-[var(--fs-text-primary)]">FairShare</h2>
35-
<p className="text-[10px] font-bold text-[var(--fs-text-muted)] uppercase tracking-wider">Royal Edition</p>
39+
<p className="text-[10px] font-bold text-[var(--fs-text-muted)] uppercase tracking-wider">Premium Edition</p>
3640
</div>
3741
</div>
3842

apps/web/tsconfig.tsbuildinfo

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)