Building connections, sharing knowledge, fostering academic success
A comprehensive student-centric platform that provides course information, real-time chat functionality, and course review features to enhance the academic experience.
- Overview
- Features
- Tech Stack
- Architecture
- Project Structure
- Installation
- Usage
- API Integration
- Environment Configuration
GROW is a React Native mobile application designed to create a collaborative learning environment for students. The platform combines course management, real-time communication, and peer review systems to foster academic engagement and community building.
Built with a hybrid architecture that leverages both Firebase services for real-time features and a custom REST API for complex data operations, GROW provides a seamless and scalable educational platform.
- Course Discovery: Browse and explore available courses with detailed information and sections
- Real-time Communication: Instant messaging for both group discussions and private conversations
- Peer Reviews: Share and read course reviews from fellow students with rating systems
- Analytics Dashboard: Visualize course popularity and chat activity trends
- Community Building: Connect students through course-specific discussions
- Email/password authentication via Firebase Auth
- JWT token-based API authorization
- User profile creation with personal information
- Avatar selection and customization
- Secure session management
- Group Chat: Course-specific public chat rooms with live participant management
- Private Chat: One-on-one messaging between students with unique chat IDs
- Media Sharing: Image upload and sharing capabilities via Firebase Storage
- Live Synchronization: Real-time message delivery using Firebase Realtime Database
- Message History: Persistent chat history with timestamp tracking
- Comprehensive course catalog with search functionality
- Detailed course information including sections and enrollment data
- Course popularity analytics with interactive charts
- Trending courses based on chat activity metrics
- Course-specific chat room creation and management
- Student-generated course reviews with 1-5 star ratings
- Review browsing with filtering and sorting options
- Like/dislike functionality for review helpfulness
- Review editing capabilities for authors
- Detailed review analytics per course
- Interactive line charts showing daily course chat activity
- Real-time trending courses visualization
- User engagement metrics and statistics
- Course popularity ranking system
- Frontend Repository
- React Native (0.76.7) - Cross-platform mobile development
- Expo SDK (~52.0.35) - Development platform and build tools
- TypeScript (5.3.3) - Static type checking and enhanced developer experience
- React Navigation (7.x) - Navigation management with Stack and Tab navigators
- Backend Repository
- Vercel-hosted REST API (
grow-ruddy.vercel.app) - Course data, reviews, and complex queries - PostgreSQL - Primary relational database for course information, reviews, and user data
- Firebase Realtime Database - Real-time chat message synchronization
- Firebase Firestore - User profiles and supplementary document storage
- Firebase Storage - Image and media file storage with CDN
- Firebase Authentication - User authentication and JWT token management
- Figma Design
- Expo Linear Gradient - Gradient backgrounds and visual effects
- React Native Vector Icons (Ionicons) - Consistent icon system
- React Native Reanimated (3.17.5) - Smooth animations and transitions
- React Native Chart Kit (6.12.0) - Data visualization components
- React Native SVG (15.11.2) - Vector graphics rendering
- React Native Pie Chart (4.0.1) - Circular data visualization
- Expo Image Picker (16.0.6) - Camera and gallery access
- React Native Gesture Handler (2.25.0) - Touch interactions
- Expo AV (15.0.2) - Audio/video capabilities
- React Native Safe Area Context - Screen boundary management
- Expo Font - Custom font integration (Nunito family)
- Babel Core (7.25.2) - JavaScript compilation and transpilation
- Metro (0.81.4) - React Native bundler (managed by Expo CLI)
- @expo/metro-config (0.19.12) - Expo-optimized Metro configuration
GROW implements a sophisticated hybrid architecture that combines the best of both Firebase services and custom REST API solutions:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ React Native Application โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Authentication Layer โ
โ Firebase Auth + JWT Token Management โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Firebase Services โ โ REST API Server โ โ
โ โ โ โ (grow-ruddy.vercel.app) โ โ
โ โ โข Realtime Database โโโโโบโ โ โ
โ โ (Chat Messages) โ โ โข Course Catalog โ โ
โ โ โข Cloud Storage โ โ โข Review System โ โ
โ โ (Media Files) โ โ โข User Analytics โ โ
โ โ โข User Profiles โ โ โข Section Management โ โ
โ โ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ PostgreSQL Database โ โ โ
โ โ โ โ โ โ
โ โ โ โข Course Information โ โ โ
โ โ โ โข Student Reviews โ โ โ
โ โ โ โข User Relationships โ โ โ
โ โ โ โข Analytics Data โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
App.tsx (Stack Navigator)
โโโ Authentication Flow
โ โโโ WelcomeScreen
โ โโโ SignIn
โ โโโ SignUp
โ โโโ UserInfo
โ โโโ AvatarScreen
โโโ Main Application
โโโ MainTabs (Tab Navigator)
โ โโโ Home (Dashboard & Analytics)
โ โโโ Courses (Course Catalog)
โ โโโ ChatList (Chat Management)
โ โโโ Profile (User Settings)
โโโ Detail Screens
โโโ CourseDetails (with embedded Tab Navigator)
โโโ CourseChat (Group Messaging)
โโโ PrivateChat (1-on-1 Messaging)
โโโ Review (Review Creation)
โโโ ReviewDetail (Review Viewing)
โโโ EditProfile (Profile Management)
- Real-time Operations: Firebase Realtime Database for instant chat synchronization
- Complex Queries: PostgreSQL via REST API for course searches and analytics
- Media Management: Firebase Storage for optimized file delivery
- Authentication: Firebase Auth with JWT tokens for API authorization
BuckyClass/
โโโ src/
โ โโโ screens/ # Screen components organized by feature
โ โ โโโ SignIn/ # Authentication screens
โ โ โ โโโ SignIn.tsx
โ โ โ โโโ UserInfoScreen.tsx
โ โ โ โโโ Avatar.tsx
โ โ โโโ HomeScreen/ # Dashboard and analytics
โ โ โ โโโ HomeScreen.tsx
โ โ โ โโโ HomeScreen_CSS.ts
โ โ โโโ CoursesScreen/ # Course catalog management
โ โ โ โโโ CoursesScreen.tsx
โ โ โโโ CourseDetail/ # Individual course views
โ โ โ โโโ CourseDetailsScreen.tsx
โ โ โโโ ChatListScreen/ # Chat room management
โ โ โ โโโ ChatListScreen.tsx
โ โ โโโ CourseChatScreen.tsx # Group chat functionality
โ โ โโโ PrivateChatScreen.tsx # Direct messaging
โ โ โโโ ReviewScreen.tsx # Review creation
โ โ โโโ ReviewDetailScreen.tsx # Review display
โ โ โโโ ProfileScreen.tsx # User profile
โ โ โโโ EditProfileScreen.tsx # Profile editing
โ โ โโโ WelcomeScreen.tsx # App introduction
โ โโโ components/ # Reusable UI components
โ โ โโโ BottomNavBar.tsx
โ โโโ types/ # TypeScript type definitions
โ โ โโโ navigation.ts
โ โโโ firebaseConfig.ts # Firebase service configuration
โ โโโ App.tsx # Main application and navigation setup
โโโ assets/ # Static resources
โ โโโ fonts/ # Custom fonts (Nunito family)
โ โโโ images/ # App icons and graphics
โ โโโ adaptive-icon.png
โโโ app/ # Expo Router files (if applicable)
โโโ app.json # Expo configuration
โโโ package.json # Dependencies and scripts
โโโ tsconfig.json # TypeScript configuration
โโโ index.ts # Application entry point
- Node.js (v16 or higher)
- npm or yarn package manager
- Expo CLI (
npm install -g @expo/cli) - iOS Simulator (for iOS development on macOS)
- Android Studio (for Android development)
- Git for version control
-
Clone the repository
git clone https://github.com/wdragj/BuckyClass-mobile-ReactNative.git cd BuckyClass-mobile-ReactNative/BuckyClass -
Install dependencies
npm install # or using yarn yarn install -
Configure Firebase
- Create a new Firebase project at Firebase Console
- Enable the following services:
- Authentication (Email/Password provider)
- Realtime Database
- Cloud Firestore
- Storage
- Download the configuration file and update
src/firebaseConfig.ts
-
Set up environment variables
# Create .env file in the project root EXPO_PUBLIC_API_URL=https://grow-ruddy.vercel.app -
Install Expo CLI globally (if not already installed)
npm install -g @expo/cli
-
Start the development server
expo start
-
Run on device/simulator
- Mobile Device: Install Expo Go app and scan the QR code
- iOS Simulator: Press
iin the terminal - Android Emulator: Press
ain the terminal - Web Browser: Press
win the terminal
- Account Creation: Register with email and password
- Profile Setup: Complete user information and select an avatar
- Course Exploration: Browse available courses with detailed information
- Join Discussions: Participate in course-specific group chats
- Private Messaging: Connect with classmates through direct messages
- Share Reviews: Write comprehensive course reviews with ratings
- View Analytics: Monitor course popularity and chat activity trends
- Type Safety: Leverage TypeScript for robust development
- Component Structure: Follow established patterns for new features
- Real-time Features: Use Firebase SDK for live data synchronization
- API Integration: Implement proper error handling for REST endpoints
- State Management: Utilize React Hooks for component state
// Fetch complete course catalog
GET /api/courses
Headers: { Authorization: 'Bearer <firebase-jwt-token>' }
// Get detailed course information
GET /api/courses/:courseId
Headers: { Authorization: 'Bearer <firebase-jwt-token>' }
// Get course sections and enrollment data
GET /api/courses/sections/:courseId
Headers: { Authorization: 'Bearer <firebase-jwt-token>' }// Submit new course review
POST /api/reviews
Headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer <firebase-jwt-token>'
}
Body: {
course_id: string,
user_id: string,
rating: number,
comment: string
}
// Fetch reviews for specific course
GET /api/reviews/:courseId
Headers: { Authorization: 'Bearer <firebase-jwt-token>' }{
"chats": {
"courseId_or_privateId": {
"type": "group" | "private",
"name": "Course Chat Room",
"createdAt": 1634567890000,
"participants": {
"userId1": true,
"userId2": true
},
"messages": {
"messageId": {
"text": "Message content",
"imageUrl": "https://storage.url/image.jpg",
"senderUid": "user123",
"senderName": "John Doe",
"timestamp": 1634567890000
}
}
}
},
"users": {
"userId": {
"displayName": "Student Name",
"email": "[email protected]",
"avatar": "avatar_url",
"createdAt": 1634567890000
}
}
}// Firebase ID Token generation
const auth = getAuth();
const user = auth.currentUser;
const idToken = await user.getIdToken(true);
// API request with authentication
fetch("https://grow-ruddy.vercel.app/api/courses", {
headers: {
Authorization: `Bearer ${idToken}`,
"Content-Type": "application/json",
},
});# .env file
EXPO_PUBLIC_API_URL=https://your-api-domain.vercel.app
EXPO_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key_here
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
EXPO_PUBLIC_FIREBASE_DATABASE_URL=https://your_project.firebaseio.com
EXPO_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
EXPO_PUBLIC_FIREBASE_APP_ID=your_app_idUpdate src/firebaseConfig.ts with your Firebase project credentials:
const firebaseConfig = {
apiKey: "your_api_key",
authDomain: "your_project.firebaseapp.com",
databaseURL: "https://your_project.firebaseio.com",
projectId: "your_project_id",
storageBucket: "your_project.appspot.com",
messagingSenderId: "your_sender_id",
appId: "your_app_id",
};- Push Notifications: Real-time chat and course update notifications
- Offline Support: Cache course data for offline viewing
- Advanced Analytics: Detailed user engagement metrics
- Video Integration: Support for course-related video content
- Calendar Integration: Sync with university course schedules
- Accessibility: Enhanced screen reader and navigation support
- Mentor: Frederick Seo
- Mobile Development: Leo Jeong, Sean Baek
- Backend Development: Raphael Oh, Cheryn Kim, Leo Jeong
- UI/UX Design: Brynn Shin, Hyunbin Jung
- Firebase for providing robust real-time backend services
- Expo for streamlining the React Native development process
- Vercel for reliable API hosting and deployment
- React Native Community for excellent documentation and support
- University Students for feedback and feature suggestions
This project is licensed under the MIT License - see the LICENSE file for details.
