Skip to content

SCCapstone/Geriatrics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

330 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Features

  • 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

External Requirements

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. Use npx expo run:android or build an APK with EAS.

Bambuu depends on four external services. All four must be configured before the app will function correctly.

1. Firebase (Auth + Firestore)

Used for user authentication and real-time chat.

  1. Go to https://console.firebase.google.com and create a project.
  2. Enable Email/Password sign-in under Authentication → Sign-in method.
  3. Create a Firestore database (production mode is fine; set your security rules appropriately).
  4. Download google-services.json (Android) from Project Settings → Your apps and place it at the project root.
  5. The app uses @react-native-firebase/auth and @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

2. Bambuu Backend (MongoDB + Express)

The app's REST API handles profiles, matching, forum posts, and recommendations.

  • Base URL: https://bambuu.onrender.com (or set EXPO_PUBLIC_API_URL to 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.

3. Supabase Storage

Used for storing profile pictures and prompt media (images, GIFs, videos).

  1. Go to https://supabase.com and create a project.
  2. Create two storage buckets:
    • avatars — profile pictures (public read)
    • promptMedia — prompt images and videos (public read)
  3. Set both buckets to public so uploaded URLs are accessible without auth tokens.
  4. Copy your project URL and anon key from Project Settings → API.
  5. Add them to your .env (see Environment Variables below).

4. IGDB / Twitch (Game Search)

The game search feature in profile creation and editing fetches game metadata (names, cover art, release dates) from the IGDB API via Twitch credentials.

  1. Go to https://dev.twitch.tv/console and create an application.
  2. Note your Client ID and generate a Client Secret.
  3. These are used by the backend (not the app directly) to call IGDB. Configure them as environment variables in your backend deployment.

Setup

cd GamerMatchApp
npm install // run at least once

Running

  1. In your terminal, make sure you are in the "GamerMatchApp" folder
  2. Type in the npx expo start command to run the program
  3. Once everything is built, you will have a list of options to run the app
    1. To run it on your phone, scan the QR code
    2. To use an emulator, press a to open on android. You must have the development build, on your emulator before pressing a. See Deployment.
cd GamerMatchApp
npx expo start

Deployment

To build an apk of the app for installation on a device or emulator:

cd GamerMatchApp
eas build --platform android --profile preview

The 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.

For a physical device

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

For an emulator

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.

Testing

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/.

Testing Technology

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

Running Tests

# 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.tsx

Project Structure

bambuu/
├── 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)

Screens

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

Design System

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–500 Border radius: 10px inputs, 12px cards, 16–20px modals, 999px pills

Authors

Yasmine Kennedy

Ian Kruger

Justin Mateo

Casey Vu

Lia Zhao

© 2026 Bambuu — Built with React Native, Expo, Firebase, MongoDB, and Supabase.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors