README for Geriatrics Team Repository
Bambuu is a mobile application for gamers to match with other gamers. Based on playstyle, timezone, platforms, and the games they love, users build rich profiles with prompts (text, image, or video), swipe through a discovery feed, and chat in real time when both players like each other.
- Smart matching — recommendation algorithm based on playstyle, games, platforms, timezone, and interaction history
- Discovery feed — scroll through curated profiles; like or pass with animated buttons
- Filter system — filter the discovery feed by playstyle, timezone, platform, game name, and age range; persisted across sessions
- Rich profiles — display name, bio, age, gender, platform badges, games (with cover art), and up to 6 prompts (text, image, or video)
- Mutual match — both users must like each other before a chat opens
- Real-time chat — Firestore-powered messaging with unread indicators and timestamp grouping
- Forum — community discussion board with categories, threaded replies, and post/comment deletion
- Profile creation wizard — 3-step onboarding flow with username availability check
- Media uploads — profile pictures and prompt media stored in Supabase Storage
- Persistent sessions — Firebase Auth handles login state across app restarts
Download the .apk on an Android device to test the mobile app.
In order to build this project locally on your laptop/PC you first have to install:
- Node.js
- MongoDB
- [npm | ≥ 9.x | Comes with Node]
- [Expo CLI | latest |
npm install -g expo-cli] - [EAS CLI | latest |
npm install -g eas-cli(for builds)] - [Android Studio | latest | Required for Android emulator / APK builds]
- [JDK | 17 | Required by Android build toolchain]
Note: Firebase Auth (
@react-native-firebase) requires a native build — it will not work in Expo Go. Usenpx expo run:androidor build an APK with EAS.
Bambuu depends on four external services. All four must be configured before the app will function correctly.
Used for user authentication and real-time chat.
- Go to https://console.firebase.google.com and create a project.
- Enable Email/Password sign-in under Authentication → Sign-in method.
- Create a Firestore database (production mode is fine; set your security rules appropriately).
- Download
google-services.json(Android) from Project Settings → Your apps and place it at the project root. - The app uses
@react-native-firebase/authand@react-native-firebase/firestore— both require the native Google Services file and cannot be tested in Expo Go (use a development build or physical device). Firestore collections used:
| Collection | Purpose |
|---|---|
conversations |
Stores participant UIDs, last message, unread flags |
conversations/{id}/messages |
Individual chat messages |
The app's REST API handles profiles, matching, forum posts, and recommendations.
- Base URL:
https://bambuu.onrender.com(or setEXPO_PUBLIC_API_URLto your own deployment) - Hosted on: Render — note that the free tier spins down after inactivity; the first request after a cold start may take 30–60 seconds
- Database: MongoDB Atlas Key endpoints used by the app:
| Method | Endpoint | Purpose |
|---|---|---|
GET |
/UserProfiles/login |
Fetch profile on login |
PUT |
/UserProfiles |
Create / update profile |
POST |
/UserProfiles |
Get profile by Firebase UID |
POST |
/match-action |
Like or pass on a profile |
POST |
/reset-passes |
Reset passed profiles for re-discovery |
GET |
/Prompts |
Fetch available prompt questions |
GET |
/Forum/posts |
Get forum posts (optionally filtered by category) |
POST |
/Forum/posts |
Create a forum post |
POST |
/Forum/posts/:postId/comments |
Add a comment |
DELETE |
/Forum/posts/:postId |
Delete a post (author only) |
DELETE |
/Forum/posts/:postId/comments/:commentId |
Delete a comment (author only) |
GET |
/CheckName |
Check display name availability |
To run the backend locally, clone the backend repository and follow its own README. Then set EXPO_PUBLIC_API_URL=http://localhost:3000/ in your .env.
Used for storing profile pictures and prompt media (images, GIFs, videos).
- Go to https://supabase.com and create a project.
- Create two storage buckets:
avatars— profile pictures (public read)promptMedia— prompt images and videos (public read)
- Set both buckets to public so uploaded URLs are accessible without auth tokens.
- Copy your project URL and anon key from Project Settings → API.
- Add them to your
.env(see Environment Variables below).
The game search feature in profile creation and editing fetches game metadata (names, cover art, release dates) from the IGDB API via Twitch credentials.
- Go to https://dev.twitch.tv/console and create an application.
- Note your Client ID and generate a Client Secret.
- These are used by the backend (not the app directly) to call IGDB. Configure them as environment variables in your backend deployment.
cd GamerMatchApp
npm install // run at least once- In your terminal, make sure you are in the "GamerMatchApp" folder
- Type in the
npx expo startcommand to run the program - Once everything is built, you will have a list of options to run the app
- To run it on your phone, scan the QR code
- To use an emulator, press
ato open on android. You must have the development build, on your emulator before pressinga. See Deployment.
cd GamerMatchApp
npx expo startTo build an apk of the app for installation on a device or emulator:
cd GamerMatchApp
eas build --platform android --profile previewThe terminal will display an expo.dev link (along with other information) to your specific build where it will take some time to complete.
Once complete the apk can be installed on an Android mobile device or emulator such as through Android Studio.
Follow the given expo.dev link on the desired device and press install. Follow the installation steps.
Note: You may have to allow apps from unknown sources to install the app
Follow the given expo.dev link either on the emulated device itself or the computer used to run the emulator:
- If following through the PC running the emulator, click the three dots button near the install button. This will allow you to directly download the apk, which can then be installed on the emulator (e.g. dragging the binary into the emulator.)
- If following through the emulated device itself: Click the install button and follow the installation steps.
This app uses Jest and the React Native Testing Library to test our app.
The unit tests are in __tests__/unit/.
The behavioral tests are in __tests__/behavioral/.
The following packages are required to run the tests. They are listed
as devDependencies in package.json.
- Jest — test runner
- jest-expo — Expo preset for Jest
- @testing-library/react-native — renders components and simulates user interactions
- @types/jest — TypeScript type definitions for Jest
To install all dependencies including test packages, run:
cd GamerMatchApp
npm install# run all tests
# note: the test preset runs jest with --watchAll, press q to quit
npm run test
# or to run without the preset
npx jest
# run only unit tests
npx jest __tests__/unit
# run only behavioral tests
npx jest __tests__/behavioral
# run a specific test file
# Example:
npx jest __tests__/unit/loginScreen.test.tsxbambuu/
├── app/ # Expo Router screens (file-based routing)
│ ├── index.tsx # Landing screen (Login / Register)
│ ├── loginScreen.tsx # Email/password login
│ ├── registerScreen.tsx # Account creation
│ ├── createProfile.tsx # 3-step profile creation wizard
│ ├── conversationScreen.tsx # Individual chat thread
│ └── (tabs)/ # Bottom tab navigator
│ ├── _layout.tsx # Tab bar configuration
│ ├── discoveryScreen.tsx # Discover feed with filter system
│ ├── chatScreen.tsx # Conversation list
│ ├── profileScreen.tsx # User's own profile (view + edit)
│ └── forumScreen.tsx # Community forum
│
├── components/
│ └── VideoPromptAnswer.tsx # expo-video wrapper for prompt videos
│
├── services/
│ └── api.ts # API helpers, type definitions
│
├── store/
│ └── authStore.ts # Zustand auth state
│
├── lib/
│ └── supabase.ts # Supabase client initialisation
│
├── assets/
│ └── images/
│ ├── bambuu-icon.png # App logo
│ ├── bambuu-icon.svg # App logo (vector)
│ └── screenshots/ # App screenshots (used on website)
│
├── app.json # Expo config
├── eas.json # EAS Build profiles
├── google-services.json # Firebase Android config (not committed)
└── .env # Environment variables (not committed)
| Screen | File | Description |
|---|---|---|
| Landing | app/index.tsx |
Login / Register entry point |
| Login | app/loginScreen.tsx |
Firebase email/password sign-in |
| Register | app/registerScreen.tsx |
Account creation |
| Create Profile | app/createProfile.tsx |
3-step wizard (avatar → basics → gaming) |
| Discover | app/(tabs)/discoveryScreen.tsx |
Profile feed with like/pass + filter sheet |
| Chat | app/(tabs)/chatScreen.tsx |
List of matched conversations |
| Conversation | app/conversationScreen.tsx |
Real-time Firestore message thread |
| Profile | app/(tabs)/profileScreen.tsx |
View and edit own profile |
| Forum | app/(tabs)/forumScreen.tsx |
Community posts and threaded comments |
All screens share a consistent token set:
| Token | Value | Usage |
|---|---|---|
| Primary green | #3B6D11 |
Top bars, buttons, active states |
| Mid green | #639922 |
Accents |
| Light green | #C0DD97 |
Borders, dividers, badge rings |
| Pale green | #EAF3DE |
Card surfaces, pill backgrounds |
| Deep green | #27500A |
Text on pale green surfaces |
| Surface | #F7FAF5 |
Screen background |
| Text primary | #1a1a1a |
Body text |
| Text secondary | #444 |
Secondary body text |
| Text muted | #888 |
Timestamps, placeholders |
| Error red | #A32D2D |
Destructive actions, error states |
Typography scale:
- Screen titles:
20px / weight 700 - Section labels:
11px / weight 600 / uppercase / letterSpacing 0.7 - Body:
14–15px / weight 400 - Metadata:
12–13px / weight 400–500Border radius:10pxinputs,12pxcards,16–20pxmodals,999pxpills
Yasmine Kennedy
- Personal: yasminekennedy88@gmail.com
- School: ykennedy@email.sc.edu
Ian Kruger
-
Personal: krugerianc@gmail.com
-
School: ikruger@email.sc.edu
Justin Mateo
-
Personal: justmateo0903@gmail.com
-
School: jsmateo@email.sc.edu
Casey Vu
- School: cv10@email.sc.edu
Lia Zhao
- School: liaz@email.sc.edu
© 2026 Bambuu — Built with React Native, Expo, Firebase, MongoDB, and Supabase.