SPONTA is a mobile application that gamifies spontaneity for college students. It encourages users to step out of their comfort zones, discover new experiences, and connect with their community through challenges and events.
- Anuvrat - Frontend Development
- Suraj - Frontend Development
- Arnav - Backend Development
- Sukrit - Backend Development
- React Native with Expo - iOS mobile development
- Firebase - Authentication, Firestore Database, Cloud Storage
- React Navigation - Navigation library
- Expo Location - iOS location services
- Expo Camera - iOS camera access
- Expo Notifications - iOS push notifications
- React Hook Form - Form management
Platform: iOS only (iPhone & iPad)
- Node.js - Runtime environment
- Express - Web framework
- Firebase Admin SDK - Server-side Firebase operations
- JWT - Authentication tokens
- Helmet - Security middleware
- Morgan - HTTP request logger
SPONTA/
βββ frontend/ # React Native Expo app
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ screens/ # Screen components
β β β βββ onboarding/ # Onboarding flow screens
β β βββ navigation/ # Navigation configuration
β β βββ services/ # API and Firebase services
β β βββ context/ # React Context providers
β β βββ hooks/ # Custom React hooks
β β βββ utils/ # Utility functions
β β βββ models/ # Data models/types
β βββ App.js
β βββ app.json
β βββ package.json
β
βββ backend/ # Node.js Express API
β βββ src/
β β βββ controllers/ # Request handlers
β β βββ routes/ # API routes
β β βββ middleware/ # Custom middleware
β β βββ models/ # Data models
β β βββ services/ # Business logic
β β βββ utils/ # Utility functions
β β βββ config/ # Configuration files
β βββ server.js
β βββ package.json
β
βββ .gitignore
βββ README.md
βββ SETUP.md
The project uses a feature branch workflow with personal branches:
- main - Default branch (working in-progress version, baseline)
- anuvrat - Anuvrat's personal working branch
- arnav - Arnav's personal working branch
- sukrit - Sukrit's personal working branch
- suraj - Suraj's personal working branch
-
Always start from main:
git checkout main git pull origin main
-
Create/switch to your personal branch:
git checkout anuvrat # or arnav, sukrit, suraj # If branch doesn't exist locally: git checkout -b anuvrat origin/anuvrat
-
Work on your personal branch:
- Make your changes
- Commit frequently with clear messages
- Push to your personal branch:
git push origin anuvrat
-
When ready to merge:
- Create a Pull Request (PR) from your branch β
main - Get at least one team member to review
- After approval, merge to
main - Update your personal branch:
git checkout main && git pull && git checkout anuvrat && git merge main
- Create a Pull Request (PR) from your branch β
-
Before starting new work:
- Always pull latest changes from
main - Merge
maininto your branch to stay up to date
- Always pull latest changes from
- Minimum iOS Version: iOS 13.0+
- Target Devices: iPhone and iPad
- Development: Expo Go app for iOS (App Store)
- Testing: iOS Simulator or physical iPhone/iPad
- Deployment: Apple App Store via EAS Build
- macOS (required for iOS development)
- Node.js (v18 or higher)
- npm or yarn
- Expo CLI (
npm install -g expo-cli) - Xcode (for iOS Simulator - optional but recommended)
- Expo Go App for iOS (App Store)
- Firebase Account
- Apple Developer Account (for App Store deployment - optional)
See SETUP.md for detailed step-by-step setup instructions.
Frontend:
cd frontend
npm install
npm run ios # Open in iOS Simulator
npm run ios:device # Open on connected iPhone/iPadBackend:
cd backend
npm install
npm start- Create a new Firebase project at Firebase Console
- Enable Authentication (Phone Auth)
- Create Firestore Database
- Enable Cloud Storage
- Add iOS App in Firebase Console:
- Bundle ID:
com.sponta.app - Download
GoogleService-Info.plist - Add to
ios/folder (when using Expo Dev Build)
- Bundle ID:
- Generate service account key for backend
- Copy configuration values to
.envfiles
See SETUP.md for detailed Firebase configuration steps.
- Landing screen
- Phone number authentication
- User profile setup (name, DOB, location)
- College verification
- Daily/weekly challenges
- Challenge categories
- Accept and complete challenges
- Photo verification
- Points and rewards
- Friend system
- Leaderboards
- Share achievements
- Challenge recommendations
- Nearby challenges
- Location-based events
- Campus-specific content
- Create and join events
- Group challenges
- Event discovery
- Badges and achievements
- Streaks
- Leveling system
- Rewards store
- Push notifications
- Analytics
- Performance optimization
- Bug fixes
- Use ESLint and Prettier for code formatting
- Follow React Native best practices
- Write meaningful commit messages
- Comment complex logic
- Always work on your personal branch
- Create feature branches from your personal branch if needed
- Commit frequently with clear messages
- Pull latest changes before pushing
- Create PRs for review before merging to main
- Test on iOS Simulator (iPhone 13/14/15 recommended)
- Test on physical iPhone/iPad devices
- Test on different iOS versions (13.0+)
- Verify permissions (Location, Camera, Notifications)
- Use Expo Go app during development
- Test Firebase integration thoroughly
- Verify API endpoints with Postman/cURL
- Use iOS design guidelines (Human Interface Guidelines)
- Test on different screen sizes (iPhone SE to iPad Pro)
- Handle iOS keyboard behavior
- Implement proper iOS navigation patterns
- Test offline functionality
- Verify push notifications on iOS
- Use EAS Build for iOS builds
- Configure App Store Connect
- Submit to App Store for review
POST /api/auth/signup- User registrationPOST /api/auth/signin- User sign inPOST /api/auth/verify-phone- Phone verificationPOST /api/auth/refresh-token- Refresh token
GET /api/users/profile- Get user profilePUT /api/users/profile- Update profileGET /api/users/stats- Get user statistics
GET /api/challenges- Get all challengesGET /api/challenges/nearby- Get nearby challengesPOST /api/challenges/:id/accept- Accept challengePOST /api/challenges/:id/complete- Complete challenge
GET /api/events- Get all eventsGET /api/events/nearby- Get nearby eventsPOST /api/events- Create eventPOST /api/events/:id/join- Join event
- Never commit
.envfiles - Store Firebase service account keys securely
- Use environment variables for all secrets
- Implement proper authentication middleware
- Validate all user inputs
- React Native Documentation
- Expo Documentation
- Firebase Documentation
- React Navigation
- Express.js Guide
This project is private and proprietary.
- Checkout your personal branch
- Make your changes
- Test thoroughly
- Create a Pull Request
- Get reviewed and approved
- Merge to main