A React Native mobile application for tennis players to find and organize matches.
- User authentication with Firebase
- Create and find tennis matches
- Filter matches by skill level, location, and timing
- Real-time messaging between players
- User preferences for skill level and location
- Modern UI with light/dark theme support
- Node.js (v14 or newer)
- npm or yarn
- Expo CLI
- iOS Simulator (for Mac) or Android Studio (for Android development)
- Firebase account
GameOn/
├── src/
│ ├── app/ # Expo Router pages/screens (index.jsx, communities.jsx, etc.)
│ ├── components/ # Reusable UI components
│ ├── constants/ # Theme, colors, static config
│ ├── utils/ # Utility functions, API, Firebase config
│ ├── assets/ # Images, fonts, etc.
├── app.json # Expo configuration
├── .env # Environment variables (not committed)
├── .gitignore # Git ignore rules
├── package.json
├── package-lock.json
├── README.md
└── ...other root files
-
Clone the repository:
git clone https://github.com/keaenlim/GameOn.git cd GameOn -
Install dependencies:
npm install
-
Create a Firebase project and add your configuration:
- Go to Firebase Console
- Create a new project
- Add an iOS app with bundle ID "com.gameon.app"
- Download the configuration file
- Enable Authentication (Email/Password)
- Create Firestore database
-
Update Firebase configuration:
- Copy your Firebase config to
src/utils/firebaseConfig.js - Add your Google Places API key to
src/utils/config.js
- Copy your Firebase config to
-
Create a
.envfile in the project root:- Copy the structure from
.env.example(if present) - Add your Firebase and Google Places API keys (no quotes)
- Copy the structure from
-
Start the development server:
npx expo start --clear
OR
npx expo start
Create a .env file in the root directory with the following variables:
FIREBASE_API_KEY=your_api_key
FIREBASE_AUTH_DOMAIN=your_auth_domain
FIREBASE_PROJECT_ID=your_project_id
FIREBASE_STORAGE_BUCKET=your_storage_bucket
FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
FIREBASE_APP_ID=your_app_id
FIREBASE_MEASUREMENT_ID=your_measurement_id
GOOGLE_PLACES_API_KEY=your_google_places_api_key
- The main content of each screen is wrapped in a
SafeAreaView(except the bottom navigation bar) to avoid the notch/status bar, while keeping the bottom bar flush to the bottom. - The root route is named
indexin the stack and file structure. - If you add new screens, follow the same pattern for consistent layout.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.