React Native + Expo application for expense sharing.
npm install
cp .env.example .env # Configure API_URL and GOOGLE_CLIENT_ID
npx expo start
# Press 'a' for Android emulatorSee the main README for:
- Complete setup guide
- Environment variable configuration
- API endpoints
- Testing instructions
- Building for production
- Deployment guides
mobile/
├── src/
│ ├── components/ # Snackbar
│ ├── contexts/ # AuthContext (auto-logout)
│ ├── hooks/ # useSnackbar, useDeepLinking
│ ├── navigation/ # AppNavigator
│ ├── screens/ # 10 screens
│ ├── services/ # API client
│ └── types/ # TypeScript definitions
├── .env # API_URL, GOOGLE_CLIENT_ID
└── app.json # Expo config (scheme: splitcash)
- Auto-logout when token expires
- Snackbar toast notifications
- Deep linking for email invitations
- Axios interceptors for token injection
For complete documentation, see ../README.md and ../CHANGELOG.md.
- Android Emulator:
http://10.0.2.2:3000/api(default) - iOS Simulator:
http://localhost:3000/api - Physical Device:
http://YOUR_COMPUTER_IP:3000/api
Find your IP:
- Windows:
ipconfig - Mac/Linux:
ifconfigorip addr
npm start- Start Expo development servernpm run android- Run on Android emulatornpm run ios- Run on iOS simulatornpm run web- Run on web browsernpm run lint- Run TypeScript type checking
- Google OAuth integration
- JWT token storage with AsyncStorage
- Automatic token refresh
- Persistent login sessions
- Create groups with categories (Trip, Home, Food, etc.)
- Invite members via email
- View group details and members
- Admin permissions for group management
- Add expenses with description, amount, category
- Multiple split types: Equal, Unequal, Percentage
- Select which members to split with
- Date selection and notes
- View overall balances across all groups
- View group-specific balances
- See who owes whom
- Optimized settlement suggestions
- Record payments received
- Update balances automatically
- Add notes to settlements
- View account information
- Edit name, phone, currency preference
- Logout functionality
All API calls return a standardized response:
{
success: boolean;
data: any;
message?: string;
}- User logs in with Google
- Backend verifies Google token
- JWT token returned and stored
- Token added to all API requests via interceptor
- Auto-logout on 401 responses
- Global auth state via AuthContext
- Screen-level state with useState
- Data fetching in useEffect
- Pull-to-refresh on list screens
- Ensure backend is running on http://localhost:3000
- Check API URL in
src/services/api.ts - For physical devices, use your computer's IP address
- Ensure firewall allows connections on port 3000
- Verify GOOGLE_CLIENT_ID is set correctly
- Check Google OAuth is enabled in backend
- Ensure redirect URIs are configured in Google Console
- Run
npm installto ensure all dependencies are installed - Check
tsconfig.jsonconfiguration - Some import errors may resolve after first build
- ✅ All core screens implemented
- 🚧 Add loading states and error handling
- 🚧 Implement push notifications
- 🚧 Add expense editing/deletion
- 🚧 Add group images and user avatars
- 🚧 Implement activity feed
- 🚧 Add expense filtering and search
- 🚧 Build iOS and Android releases
eas build --platform androideas build --platform iosRefer to Expo EAS Build documentation for detailed instructions.
This project is part of the Split Cash application.