A secure mobile photo trading application for friends with built-in screenshot prevention and watermarking features.
- Screenshot Prevention: Built-in Expo screen capture prevention
- Watermarking: Automatic user-specific watermarks on all photos
- Protected Viewing: Secure image viewing with additional protection layers
- Secure Storage: Encrypted token storage using Expo SecureStore
- Permission Management: Proper camera and photo library permissions
- User Authentication: Secure login/registration with JWT tokens
- Photo Management: Upload, view, and manage your photo collection
- Trading System: Propose and manage trades with friends
- Real-time Updates: Live trade notifications and status updates
- Mobile Optimized: Native mobile experience with smooth animations
- Frontend: React Native with Expo
- Backend: Node.js with Express
- Database: SQLite
- Real-time: Socket.io
- Image Processing: Sharp + Canvas for watermarking
- Security: Expo Screen Capture, SecureStore, Image Picker
- Node.js (v16 or higher)
- npm or yarn
- Expo CLI:
npm install -g @expo/cli - iOS Simulator (for iOS development) or Android Studio (for Android development)
git clone <repository-url>
cd SpurHacks# Install root dependencies
npm install
# Install server dependencies
cd server && npm install && cd ..
# Install mobile app dependencies
npm install# In the server directory
cd server
npm run devThe server will start on http://localhost:5000
# In the root directory
npm startThis will open the Expo development server. You can then:
- Press
ito open iOS simulator - Press
ato open Android emulator - Scan the QR code with Expo Go app on your phone
- Install Xcode from the App Store
- Install iOS Simulator
- Run
npm run iosto start the iOS simulator
- Install Android Studio
- Set up Android Virtual Device (AVD)
- Run
npm run androidto start the Android emulator
- Install Expo Go app from App Store/Google Play
- Scan the QR code from the Expo development server
- The app will load on your device
Create a .env file in the server directory:
JWT_SECRET=your-secret-key-here
PORT=5000Update the API base URL in the mobile app if needed:
- Default:
http://localhost:5000 - For physical device testing: Use your computer's IP address
- Create a new account or sign in with existing credentials
- All authentication data is securely stored
- Upload Photos: Take new photos or select from gallery
- View Gallery: Browse your protected photo collection
- Security: All photos are automatically watermarked
- Select Friends: Choose users to trade with
- Propose Trades: Select your photo and their photo for exchange
- Manage Trades: Accept, decline, or view trade history
- Screenshot Prevention: Built-in protection against screenshots
- Watermarking: User-specific watermarks on all shared photos
- Secure Viewing: Protected image viewer with additional security
- Expo Screen Capture: Built-in prevention using
expo-screen-capture - Protected Viewing: Additional security layers in image viewer
- Watermarking: Automatic user attribution on all photos
- Secure Storage: JWT tokens stored in Expo SecureStore
- Encrypted Communication: HTTPS API communication
- Permission Management: Proper camera and photo library access
- Automatic Watermarking: User-specific watermarks added on upload
- Protected Display: Images shown in secure viewer only
- Access Control: User-specific photo access permissions
- Direct camera access for photo capture
- Photo library selection with permissions
- Image editing and cropping capabilities
- Gesture-based navigation
- Touch-friendly buttons and controls
- Smooth animations and transitions
- Cached data for offline viewing
- Sync when connection restored
- Local storage for user preferences
SpurHacks/
βββ App.tsx # Main app entry point
βββ app.json # Expo configuration
βββ package.json # Mobile app dependencies
βββ server/ # Backend server
β βββ index.js # Express server
β βββ package.json # Server dependencies
β βββ uploads/ # Photo storage
βββ src/
βββ contexts/ # React contexts
β βββ AuthContext.tsx
βββ screens/ # App screens
βββ LoginScreen.tsx
βββ RegisterScreen.tsx
βββ DashboardScreen.tsx
βββ GalleryScreen.tsx
βββ TradeScreen.tsx
βββ ProfileScreen.tsx
# Build for iOS
npm run build:ios
# Build for Android
npm run build:android- Configure app.json with your app details
- Build production versions
- Submit to Apple App Store and Google Play Store
Metro bundler issues:
npx expo start --cleariOS build issues:
cd ios && pod install && cd ..Android build issues:
cd android && ./gradlew clean && cd ..Permission issues:
- Ensure camera and photo library permissions are granted
- Check device settings for app permissions
This project is licensed under the MIT License.
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
For support and questions:
- Create an issue in the repository
- Check the troubleshooting section
- Review Expo documentation
Note: This app includes screenshot prevention features, but no security system is 100% foolproof. The app provides multiple layers of protection to discourage unauthorized photo sharing.