Find. Connect. Collaborate.
TeamFinder is a comprehensive web platform designed for college students to discover events like hackathons, ideathons, and research competitions, and to form teams based on shared interests and complementary skills.
Built with the MERN stack (MongoDB, Express.js, React, Node.js) using plain JavaScript - perfect for learning and understanding full-stack development!
- Event Discovery: Browse upcoming, ongoing, and past events with filters
- Smart Team Formation: Create teams or join existing ones for specific events
- Skill-Based Search: Find teammates with complementary skills and invite them directly
- Invitation System: View and manage team invitations (accept/decline)
- Profile Management: Showcase your skills, achievements, phone number, and experience
- AI Chatbot: Ask questions about events (stub implementation)
- Personalized Dashboard: See recommended events and potential teammates
- Event Management: Create, update, and delete events
- Brochure Parsing: Upload event brochures (AI parsing stubbed)
- Event Monitoring: Track registrations and team formations
- React.js - UI library
- Vite - Build tool (lightning fast!)
- React Router - Client-side routing
- Axios - HTTP client
- Tailwind CSS - Utility-first styling
- Node.js - JavaScript runtime
- Express.js - Web framework
- MongoDB - NoSQL database
- Mongoose - MongoDB object modeling
- JWT - Authentication
- bcryptjs - Password hashing
- Helmet - Security headers
- CORS - Cross-origin resource sharing
- Multer - File upload handling
- Express Rate Limit - API rate limiting
Before you begin, ensure you have the following installed:
- Node.js (v16 or higher) - Download here
- MongoDB (v5 or higher) - Download here
- npm or pnpm - Comes with Node.js
git clone <your-repo-url>
cd codeInstall all dependencies for root, backend, and frontend:
npm run install:allOr install manually:
# Install root dependencies
npm install
# Install backend dependencies
cd backend
npm install
# Install frontend dependencies
cd ../frontend
npm install
cd ..Create a .env file in the backend folder:
cd backend
cp .env.example .envEdit backend/.env with your configurations:
# Server Configuration
PORT=5000
NODE_ENV=development
# Database
MONGODB_URI=mongodb://localhost:27017/teamfinder
# JWT Secrets (CHANGE THESE IN PRODUCTION!)
JWT_ACCESS_SECRET=your_super_secret_access_key_change_this
JWT_REFRESH_SECRET=your_super_secret_refresh_key_change_this
# CORS
CORS_ORIGIN=http://localhost:5173
# File Upload
MAX_FILE_SIZE=5242880
UPLOAD_DIR=uploadsMake sure MongoDB is running on your system:
Windows:
# MongoDB should start automatically as a service
# Or manually start it:
mongodmacOS/Linux:
sudo systemctl start mongod
# Or
brew services start mongodb-communityFrom the root directory:
npm run devThis will start:
- Backend on
http://localhost:5000 - Frontend on
http://localhost:5173
code/
βββ backend/ # Express.js backend
β βββ config/ # Database configuration
β βββ controllers/ # Route controllers
β βββ middleware/ # Custom middleware (auth, errors)
β βββ models/ # Mongoose models
β βββ routes/ # API routes
β βββ services/ # Business logic & AI stubs
β βββ .env # Environment variables
β βββ package.json # Backend dependencies
β βββ server.js # Entry point
β
βββ frontend/ # React frontend
β βββ public/ # Static assets
β βββ src/
β β βββ components/ # Reusable components
β β βββ context/ # React context (auth)
β β βββ pages/ # Page components
β β βββ utils/ # Utility functions (API)
β β βββ App.jsx # Root component
β β βββ main.jsx # Entry point
β β βββ index.css # Global styles
β βββ index.html # HTML template
β βββ package.json # Frontend dependencies
β βββ vite.config.js # Vite configuration
β βββ tailwind.config.js # Tailwind configuration
β
βββ package.json # Root package (scripts)
βββ .gitignore # Git ignore rules
βββ README.md # This file
For testing, you can create users via the Register page or API.
Test Admin Account (create manually):
- Register with role: "admin"
- Email: admin@example.com
- Password: admin123
Test Student Account:
- Register with role: "student"
- Email: student@example.com
- Password: student123
POST /api/auth/register- Register new userPOST /api/auth/login- Login userPOST /api/auth/refresh- Refresh access tokenPOST /api/auth/logout- Logout user
GET /api/users/me- Get current user profilePUT /api/users/me- Update profile (name, phone, skills, etc.)GET /api/users/search?skills=react,python- Search users by skillsGET /api/users/all- Get all students (for teammate discovery)GET /api/users/:id- Get user by ID
POST /api/events- Create event (Admin)GET /api/events- List all events (with filters)GET /api/events/:id- Get event detailsPUT /api/events/:id- Update event (Admin)DELETE /api/events/:id- Delete event (Admin)POST /api/events/:id/parse-brochure- Parse brochure (Admin, stub)POST /api/events/:id/ask- Ask chatbot (stub)
POST /api/teams- Create teamGET /api/teams/my-teams- Get user's teamsGET /api/teams/my-invites- Get pending invitationsGET /api/teams/event/:eventId- Get teams for eventGET /api/teams/:id- Get team detailsPOST /api/teams/:id/invite- Invite user to teamPOST /api/teams/:id/join- Join team (accept invite)POST /api/teams/:id/decline- Decline team invitationPOST /api/teams/:id/leave- Leave teamDELETE /api/teams/:id- Delete team (Leader only)
- JWT-based: Uses access tokens (15min) and refresh tokens (7 days)
- Role-based access: Students and Admins have different permissions
- Secure: Passwords hashed with bcrypt, tokens stored securely
- CRUD operations: Admins can create, read, update, delete events
- Status tracking: Events automatically marked as upcoming/ongoing/past
- Filtering: Filter events by status and category
- Brochure support: Upload and link event brochures
- Team creation: Students create teams for specific events
- Invite system: Team leaders invite members by email
- Size limits: Teams respect event's min/max size requirements
- One team per event: Users can only join one team per event
- Smart matching: Search finds users with matching skills
- Ranking: Results ranked by skill matches and experience
- Stats display: See each user's event participation and wins
- Brochure Parser: Mock service extracts event details from uploads
- Chatbot: Rule-based Q&A about events
- Ready for integration: Easy to replace with real Gemini/OpenAI APIs
-
Register as Student
- Go to
/register - Create student account with skills and optional phone number
- Go to
-
View Events
- Browse dashboard
- Apply filters
- View event details
-
Register as Admin
- Create another account with role "admin"
-
Create Event (as Admin)
- Go to
/create-event - Fill in event details
- Submit
- Go to
-
Create Team (as Student)
- View an event
- Go to Teams tab
- Create a new team
-
Search Teammates
- Go to
/search - Search by skills (e.g., "react") or view all students
- Invite users directly from search results
- Go to
-
Manage Invitations
- Go to My Teams page
- View pending invitations
- Accept or decline invites
-
Test Chatbot
- Open any event
- Go to Chatbot tab
- Ask questions about deadlines, rules, etc.
Solution:
- Ensure MongoDB is running:
mongodor check services - Verify
MONGODB_URIin.env - Check if port 27017 is available
Solution:
- Ensure backend is running on port 5000
- Check proxy settings in
vite.config.js - Verify
CORS_ORIGINin backend.env
Solution:
- Clear localStorage:
localStorage.clear()in browser console - Verify JWT secrets are set in
.env - Check token expiration times
Solution:
- Run
npm installin frontend folder - Restart Vite dev server
- Check
tailwind.config.jscontent paths
This project is perfect for learning:
- MERN Stack: MongoDB, Express, React, Node.js
- REST APIs: Building and consuming RESTful services
- JWT Authentication: Secure token-based auth
- React Hooks: useState, useEffect, useContext
- React Router: Client-side routing
- Tailwind CSS: Utility-first styling
- Axios: HTTP requests and interceptors
- Understand the data models (User, Event, Team)
- Study the authentication flow
- Explore the API endpoints
- Learn how React context manages state
- See how components communicate
- Understand the routing structure
- Real AI integration (Gemini/OpenAI)
- Resume analysis for teammate suggestions
- Email notifications
- Real-time chat between team members
- College domain verification (RVCE)
- Leaderboard for most active students
- Event analytics dashboard
- Mobile responsive improvements
- PWA support
- Dark mode
To deploy this app:
- Set up production MongoDB (MongoDB Atlas)
- Deploy backend to Render/Railway/Heroku
- Deploy frontend to Vercel/Netlify
- Update environment variables
- Enable HTTPS
- Set up proper CORS
- Implement rate limiting
- Add monitoring (Sentry)
This is a learning project, so contributions are welcome!
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Commit changes:
git commit -m 'Add feature' - Push to branch:
git push origin feature-name - Open a Pull Request
This project is open source and available under the ISC License.
Created for learning purposes as part of full-stack development coursework.
If you encounter any issues:
- Check this README
- Review the code comments (heavily documented)
- Check the browser console for errors
- Check the backend terminal for errors
This project is designed for educational purposes. Feel free to:
- Use it as a reference for your projects
- Learn from the code structure
- Extend it with new features
- Share it with classmates
Note: If you use this for academic submissions, make sure to follow your institution's policies on code sharing and attribution.
- Inspired by real problems faced in college event management
- Built with modern web technologies
- Designed to be beginner-friendly and educational
Happy Coding! π
Find. Connect. Collaborate.