Enterprise-grade social travel platform with real-time flight tracking and travel analytics
Originally a COP4331 class project built upstream as
Izaacapp/flutterrr; I've continued building on it after the class ended. The full upstream commit history (Jul 19–23, 2025) is preserved in this repository'sgit logas the ancestry of this project.
Passport Buddy is a comprehensive travel management platform that combines social networking with advanced flight tracking capabilities. Built with the MERN stack (MongoDB, Express, React, Node.js) and Flutter, it features real-time posts, authentication, travel tracking, and cross-platform mobile support.
| Layer | Technologies |
|---|---|
| Frontend | React 18, TypeScript 5.0, Vite 5.0, Tailwind CSS, Apollo Client |
| Backend | Node.js 18 LTS, Express.js, GraphQL, Apollo Server, Socket.io |
| Database | MongoDB 6.0, Mongoose ODM, Redis (caching) |
| Mobile | Flutter 3.0, Provider State Management, Cross-platform |
| Infrastructure | Docker, GitHub Actions, DigitalOcean Spaces |
# Initial setup (first time only)
make setup
# Start development environment
make dev
# Run mobile app (auto-detects device)
make mobile
# View all available commands
make help-
Copy environment template:
cp .env.example .env.dev
-
Update credentials in
.env.devwith your actual values -
Important: Never commit
.envfiles to version control -
See Security Guidelines for detailed security practices
passport-buddy/
├── backend/ # Node.js Express + GraphQL API
├── frontend/ # React + Vite + TypeScript Web App
├── mobile/ # Flutter Mobile App (iOS/Android)
├── shared/ # Shared TypeScript types
├── config/ # Configuration files
│ ├── docker/ # Docker configurations
│ ├── nginx/ # Nginx reverse proxy configs
│ └── jenkins/ # CI/CD pipeline configs
├── scripts/ # Utility and setup scripts
├── docs/ # Additional documentation
└── Makefile # Development automation
| Service | URL | Description |
|---|---|---|
| Web App | http://localhost:3001 | React frontend |
| Backend API | http://localhost:3000 | Express server |
| GraphQL Playground | http://localhost:3000/graphql | GraphQL API explorer |
| MongoDB | mongodb://localhost:27017 | Database |
The application comes with 8 pre-seeded test users. All test users have the password: Test123
You can login using either username or email:
| Username | Profile | Miles Flown | |
|---|---|---|---|
| izaacplambeck | izaac@test.com | Adventure seeker from San Francisco | 150,000 |
| diab | diab@test.com | Digital nomad from Dubai | 200,000 |
| devonvill | devon@test.com | Travel photographer from London | 180,000 |
| masonmiles | mason@test.com | Aviation enthusiast from Chicago | 250,000 |
| jacobroberts | jacob@test.com | Budget traveler from Sydney | 120,000 |
| laylale | layla@test.com | Solo female traveler from Vancouver | 165,000 |
| evahocking | eva@test.com | Luxury travel blogger from NYC | 300,000 |
| testuser | test@test.com | Test account for QA | 0 |
# Auto-detect device and run
make mobile
# Specific platforms
make mobile-ios-simulator # iOS Simulator
make mobile-ios-physical # Physical iPhone
make mobile-android-emulator # Android Emulator
make mobile-android-physical # Physical Android device
make mobile-browser # Web browser
make mobile-macos # macOS desktop
make mobile-windows # Windows desktop
make mobile-linux # Linux desktopThe mobile app automatically configures the API URL based on the platform:
- iOS Simulator:
http://localhost:3000/graphql - Android Emulator:
http://10.0.2.2:3000/graphql - Physical Devices:
http://YOUR_LOCAL_IP:3000/graphql(auto-detected) - Web:
http://localhost:3000/graphql
make help # Show all available commands
make setup # Initial project setup
make dev # Start development environment
make dev-d # Start in background (detached)
make stop # Stop all services
make restart # Restart all services
make status # Check service status
make logs # View all logs
make clean # Clean up volumes and containersmake seed # Seed database with test data
make seed-fresh # Drop database and seed fresh
make db-shell # Open MongoDB shell
make db-reset # Reset database
make test-users # Display test user credentialsmake test # Run all tests
make test-backend # Backend tests only
make test-frontend # Frontend tests only
make test-mobile # Flutter tests
make test-coverage # Tests with coverage report
make lint # Run linters
make typecheck # TypeScript type checkingmake mobile-doctor # Check Flutter setup
make mobile-clean # Clean Flutter build
make mobile-reset # Reset Flutter dependencies
make mobile-build-apk # Build Android APK
make mobile-build-ios # Build iOS app
make mobile-list-devices # List available devicesmake build # Build for production
make prod # Run production build
make deploy-check # Pre-deployment checklist
make env-check # Verify environment setup- Automated boarding pass OCR scanning with 98% accuracy
- Real-time flight status tracking and notifications
- Historical flight data analytics and visualization
- Multi-airport trip planning and optimization
- Track miles flown, countries visited, and upcoming trips
- Travel timeline with photo/video sharing
- Friend network and travel companion matching
- Location-based check-ins and recommendations
- Travel statistics and achievement system
- Real-time GraphQL subscriptions for live feed updates
- Create posts with multiple images and engage with comments
- JWT-based auth with email/username login
- Customizable profiles with bio, avatar, and travel stats
- Account verification and password reset via email
- Progressive Web Application (PWA)
- Native iOS application (iOS 12.0+)
- Native Android application (API 23+)
- Responsive web design for all devices
- Offline cache support
- Camera integration for direct photo capture
- Push notifications and location services (coming soon)
- Lighthouse Score: 95+ (Performance, Accessibility, Best Practices)
- First Contentful Paint: < 1.5s
- Time to Interactive: < 3.0s
- Bundle Size: < 200KB gzipped
- API Response Time: p99 < 100ms
- Concurrent Users: 10,000+ tested
- Authentication: JWT with refresh token rotation
- Authorization: Role-based access control (RBAC)
- Data Protection: AES-256 encryption at rest
- API Security: Rate limiting, DDoS protection, input sanitization
- File Upload: Virus scanning, type validation, size limits
- Infrastructure: HTTPS enforcement, security headers, CORS configuration
- Runtime: Node.js with Express.js
- Database: MongoDB with Mongoose ODM
- API: GraphQL (Apollo Server) + REST endpoints
- Authentication: JWT with bcrypt
- File Storage: Local storage with plans for S3
- Email: Mailtrap integration
- Language: TypeScript
- Framework: React 18 with Vite
- State Management: Apollo Client + Context API
- Styling: Tailwind CSS
- Routing: React Router v6
- Language: TypeScript
- Build Tool: Vite
- Framework: Flutter 3.x
- State Management: Provider
- Networking: Dio + GraphQL
- Storage: Shared Preferences
- Language: Dart
- Containerization: Docker & Docker Compose
- Reverse Proxy: Nginx
- CI/CD: GitHub Actions + Jenkins
- Monitoring: Health checks and status endpoints
- Vercel: Optimized for React applications with edge functions
- Netlify: Integrated CI/CD with preview deployments
- AWS CloudFront: Global CDN with S3 origin
- Railway: Modern platform with automatic scaling
- Render: Zero-config deployments with native Node.js support
- AWS ECS: Container orchestration for enterprise scale
- MongoDB Atlas: Managed clusters with automatic backups
- AWS DocumentDB: MongoDB-compatible with enhanced security
- Self-hosted: Docker Compose configuration available
Create a .env.dev file in the root directory:
# MongoDB
MONGO_URI=mongodb://root:pass@mongodb:27017/devdb?authSource=admin
MONGO_ROOT_USERNAME=root
MONGO_ROOT_PASSWORD=pass
# Backend
PORT=3000
JWT_SECRET=your-dev-secret-key-change-in-production
NODE_ENV=development
# Frontend
VITE_API_URL=http://localhost:3000
VITE_GRAPHQL_URL=http://localhost:3000/graphql
VITE_WS_URL=ws://localhost:3000/graphql
# Email (Optional - for email features)
MAILTRAP_TOKEN=your-mailtrap-token
MAILTRAP_ENDPOINT=https://send.api.mailtrap.io
# File Upload
MAX_FILE_SIZE=5242880
ALLOWED_FILE_TYPES=image/jpeg,image/png,image/gif,image/webpFor production, create .env.prod with appropriate values and secure secrets.
Backend won't start
make logs-backend # Check error logs
make clean # Clean and restart
make setup # Re-run setupMobile app can't connect
make info # Get your local IP
make status # Ensure backend is running
# Check firewall settings for port 3000Database issues
make db-shell # Access MongoDB directly
make db-reset # Reset database
make seed-fresh # Re-seed with fresh dataPort conflicts
- Backend: 3000 → Change in docker-compose.yml
- Frontend: 3001 → Change in docker-compose.yml
- MongoDB: 27017 → Change in docker-compose.yml
make help # List all commands
make info # Show project info
make test-summary # View test status- Environment Setup Guide
- Mobile Build Configuration
- API Documentation
- Frontend Guide
- Mobile App Guide
- Testing Guide
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Run tests (
make test) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Use
make devfor local development - Write tests for new features
- Run
make lintandmake typecheckbefore committing - Ensure all tests pass with
make test
This repository maintains production builds following enterprise software distribution standards. The source code is maintained in private repositories to protect intellectual property while demonstrating deployment capabilities and architectural decisions.
- Build Type: Production-optimized
- Source Protection: Private repository maintained
- Distribution Model: Binary distribution only
- License: Proprietary - All Rights Reserved
For technical inquiries, collaboration opportunities, or source code access:
Copyright © 2025 Passport Buddy. All rights reserved.
This software and associated documentation files are proprietary and confidential. Unauthorized copying, modification, distribution, or use of this software, via any medium, is strictly prohibited without express written permission.