- ECE 452 Software Engineering Project
- Semester: Fall 2025
Most health applications are data-driven β they count steps, calories, or workouts β but often fail to create a sense of community. As a result, users start with enthusiasm but quickly lose motivation.
FittedIn aims to change this by reimagining health and wellness tracking as a social, networking-style experience, inspired by LinkedIn. The platform encourages connections, accountability, and shared progress, turning isolated health efforts into collaborative journeys.
- Runtime: Node.js v20+ with Express.js framework
- Database: PostgreSQL 15+ with Sequelize ORM
- Authentication: JWT-based stateless auth with bcrypt password hashing (10 salt rounds)
- Architecture Pattern: Three-tier architecture (Presentation β Application β Data Layer)
- API Design: RESTful API with proper HTTP methods and status codes
- Code Organization: MVC pattern with separation of concerns (Controllers, Services, Models, Middleware)
- Cloud Platform: AWS Cloud Computing Services
- Reverse Proxy: Nginx with SSL/TLS termination and HTTP/2 support
- Process Management: PM2 with cluster mode support, auto-restart, graceful shutdown, and log rotation
- Containerization: Docker & Docker Compose for local development environment
- Auto-Scaling: EC2 Auto Scaling Groups configured (production-ready)
- CI/CD: GitHub Actions workflow for automated testing and deployment (configurable)
- Authentication: JWT tokens with configurable expiration (7 days default)
- Password Security: bcrypt hashing with 10 salt rounds
- API Protection: Rate limiting (configurable per environment), Helmet.js security headers
- Input Validation: Express-validator for comprehensive request validation
- SQL Injection Prevention: Parameterized queries via Sequelize ORM
- HTTPS: SSL/TLS encryption in production using Let's Encrypt
- CORS: Configurable Cross-Origin Resource Sharing policies
- ORM: Sequelize with automated migrations and seeders
- Relationships: Complex relational model (Users, Profiles, Goals, Connections, Activities, Posts, Notifications)
- Performance: Strategic database indexing on frequently queried columns
- Data Integrity: Foreign key constraints, cascade deletes, and transaction support
- Seeding: Faker.js integration for generating realistic test data at scale
- No Frontend Framework: Vanilla JavaScript to demonstrate core web fundamentals and reduce bundle size
- PostgreSQL over MongoDB: Relational data with complex joins, ACID compliance, and better query performance
- Monorepo Structure: Separated frontend/backend directories for independent deployment and scaling
- PM2 over Docker in Production: Better resource control and monitoring on EC2 instances
- Nginx Reverse Proxy: Separation of static assets and API routing for improved scalability and caching
- Secure Registration: JWT-based user registration with password validation
- Login System: Email/password authentication with bcrypt password hashing
- Protected Routes: JWT middleware for securing API endpoints
- User Profiles: Comprehensive user profile management with privacy settings
- Goal Tracking: Set and monitor personal wellness goals
- Progress Monitoring: Track current progress vs target values
- Goal Categories: Weight loss, muscle gain, cardio, nutrition, etc.
- Milestone System: Break down goals into achievable milestones
- pgAdmin Interface: Web-based database management at
http://localhost:5050 - PostgreSQL: Robust relational database with proper indexing
- Migration System: Automated database schema management
- Database Seeding: Generate fake data with Faker.js for testing and development
- Auto-Accept Connections: Seeded users automatically accept connection requests for better testing experience
- Node.js v20 or higher
- Docker (for PostgreSQL)
- Git
# Clone the repository
git clone <repository-url>
cd FittedIn
# Run the automated setup script
./setup.sh# Start the backend server
cd backend
node server.jsAccess URLs:
- Main App:
http://localhost:3000 - pgAdmin:
http://localhost:5050(admin@fittedin.com / admin123)
- Quick Start Guide - Get up and running in 5 minutes
- Development Setup - Detailed development environment setup
- Database Management - pgAdmin usage guide
- System Architecture - Technical architecture overview
- Architecture Improvements - Future enhancements
- Dashboard Features - Dashboard personalization
- Profile System - User profile management
- Authentication - Auth system documentation
- Manual EC2 Deployment - Deploy to EC2 using setup.sh (Current Method)
- AWS EC2 Deployment Guide - Complete production deployment guide
- AWS RDS Setup - PostgreSQL database configuration
- SSL Certificate Setup - Let's Encrypt SSL configuration
- Monitoring & Alerting - CloudWatch monitoring setup
- Auto Scaling - EC2 Auto Scaling configuration
- DevOps Guide - CI/CD and DevOps documentation (GitHub Actions currently disabled)
- CI/CD Pipeline - GitHub Actions documentation (currently disabled)
- Midterm Summary - Project progress summary
- Presentation Checklist - Demo preparation
Note: GitHub Actions workflows are currently disabled. Use setup.sh for manual deployment to EC2. See Manual EC2 Deployment Guide for details.
# Health check
curl http://localhost:3000/api/health
# Registration
curl -X POST http://localhost:3000/api/auth/register \
-H "Content-Type: application/json" \
-d '{"displayName":"John Doe","email":"john@example.com","password":"Password123"}'
# Login
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"john@example.com","password":"Password123"}'# Test pgAdmin setup
./test-pgadmin.sh
# Direct database access
docker-compose exec postgres psql -U postgres -d fittedin_dev# Seed database with fake data (50 users, goals, posts, connections, etc.)
cd backend
npm run db:seed:faker
# Clear existing data and seed fresh data
npm run db:seed:clear
# Custom amounts
SEED_NUM_USERS=100 SEED_NUM_POSTS=300 npm run db:seed:fakerNote: All seeded users have password: Password123!
- User Discovery: Implement user recommendation system
- Connection Management: Send/accept/reject connection requests
- Social Features: View connections' activities and progress
- Activity Logging: Record daily activities and progress
- Progress Visualization: Charts and reports
- Community Support: Group challenges and leaderboards
- Mobile Responsiveness: Improve UI for mobile devices
- Real-time Notifications: Connection updates and achievements
- Advanced Analytics: Personalized insights and recommendations
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
feat:new featurefix:bug fixdocs:documentation changesrefactor:code refactoringtest:adding or updating tests
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues:
- Check the Troubleshooting section
- Review the logs:
docker-compose logs postgres - Ensure all prerequisites are installed
- Try running the setup script again:
./setup.sh
- Andrew Chen
- Haoyang Guo
- Kelvin Ihezue
- Carlos Ortiz
- Pendo Thiirah
- Dileep Kumar Vadlamudi
- Alaric Li
- Yixiao Xiao
- Adam Ashby
Happy coding! π
