Production-ready React Native chat application with real-time messaging and audio/video calling.
- β User Authentication - Login and registration
- β Real-time Chat - Instant messaging with Socket.io
- β Audio/Video Calls - WebRTC-powered calling
- β Group Conversations - Create and manage group chats
- β Message Reactions - React to messages with emoji
- β Read Receipts - See when messages are read
- β Typing Indicators - See when others are typing
- β Push Notifications - Stay updated with new messages
- β File Sharing - Share images, videos, and files
- β User Search - Find and connect with users
- β Offline Support - Redux Persist for offline data
- β Modern UI - Clean and intuitive interface
- Node.js 18+ or 20+
- npm or yarn
- Expo CLI
- iOS Simulator (Mac) or Android Emulator
- OR physical device with Expo Go app
- Clone the repository
git clone https://github.com/QuckApp/quckapp-mobile.git
cd quckapp-mobile- Install dependencies
npm install- Configure API endpoints
Edit the following files to point to your backend:
src/services/api.ts:
const API_URL = __DEV__
? 'http://localhost:3000/api/v1' // or your local IP
: 'https://your-production-backend.com/api/v1';src/services/socket.ts & webrtc.ts:
const SOCKET_URL = __DEV__
? 'http://localhost:3000'
: 'https://your-production-backend.com';Note:
- iOS Simulator: use
http://localhost:3000- Android Emulator: use
http://10.0.2.2:3000- Physical Device: use
http://YOUR_LOCAL_IP:3000
- Start the app
npm startThen:
- Press
ifor iOS Simulator - Press
afor Android Emulator - Scan QR code with Expo Go app for physical device
npm run iosnpm run androidnpm run websrc/
βββ navigation/ # Navigation setup
β βββ RootNavigator.tsx # Root navigation
β βββ AuthNavigator.tsx # Auth screens
β βββ MainNavigator.tsx # Main app screens
βββ screens/
β βββ auth/ # Authentication screens
β β βββ LoginScreen.tsx
β β βββ RegisterScreen.tsx
β βββ main/ # Main app screens
β β βββ ConversationsScreen.tsx
β β βββ ChatScreen.tsx
β β βββ ProfileScreen.tsx
β β βββ NewConversationScreen.tsx
β β βββ NewGroupScreen.tsx
β βββ CallScreen.tsx # WebRTC calling screen
βββ services/ # API & WebSocket services
β βββ api.ts # HTTP client (Axios)
β βββ socket.ts # Socket.io client
β βββ webrtc.ts # WebRTC service
β βββ notifications.ts # Push notifications
βββ store/ # Redux store
β βββ index.ts # Store configuration
β βββ slices/ # Redux slices
β βββ authSlice.ts
β βββ conversationsSlice.ts
β βββ messagesSlice.ts
β βββ callSlice.ts
β βββ usersSlice.ts
βββ App.tsx # App entry point
- React Native - Cross-platform mobile framework
- Expo SDK 50 - Development platform
- TypeScript - Type safety
- Redux Toolkit - State management
- React Navigation 6 - Navigation
- Socket.io Client - Real-time communication
- react-native-webrtc - WebRTC for calls
- Gifted Chat - Chat UI components
- Expo Notifications - Push notifications
- Redux Persist - Offline data persistence
This app requires the QuckApp backend to function: π QuckApp Backend
Follow the backend setup instructions to run the API server.
- Install EAS CLI
npm install -g eas-cli- Login to Expo
eas login- Configure build
eas build:configure- Build for Android
eas build --platform android- Build for iOS
eas build --platform ios- Submit to stores
# Android
eas submit --platform android
# iOS
eas submit --platform ios- Login Screen - Email/password login
- Register Screen - New user registration
- Conversations - List of all chats with unread counts
- Chat - Real-time messaging with reactions and typing indicators
- Call - Audio/video calling interface
- Profile - User profile and settings
- New Conversation - Search and start new chats
- New Group - Create group conversations
To enable push notifications:
- Create a Firebase project
- Download
google-services.json(Android) andGoogleService-Info.plist(iOS) - Add Firebase configuration to your Expo project
- Configure backend with Firebase Admin SDK credentials
iOS Simulator:
npm run iosAndroid Emulator:
npm run androidPhysical Device:
- Install Expo Go app
- Run
npm start - Scan QR code
- Use React Native Debugger
- Enable Remote JS Debugging in dev menu
- Check console logs in terminal
- Shake device to open dev menu
- Enable Fast Refresh for instant updates
The app automatically detects development vs production:
// Development (local backend)
__DEV__ === true
// Production (deployed backend)
__DEV__ === falseUpdate URLs in:
src/services/api.tssrc/services/socket.tssrc/services/webrtc.ts
# Start Expo dev server
npm start
# Run on iOS
npm run ios
# Run on Android
npm run android
# Run on Web
npm run web
# Lint code
npm run lint
# Format code
npm run format
# Build for production
npm run build:android
npm run build:ios- Verify backend is running
- Check API URLs in service files
- Use correct IP for physical devices
- Disable VPN/firewall if blocking
- Grant camera/microphone permissions
- Test on physical device (simulators may not support WebRTC)
- Configure TURN server in backend for production
- Clear cache:
expo start -c - Delete node_modules:
rm -rf node_modules && npm install - Check Expo SDK compatibility
MIT
Contributions are welcome! Please feel free to submit a Pull Request.
For issues and questions, please open an issue on GitHub.
Built with β€οΈ using React Native, Expo, and WebRTC