Team Name: Team 1274 Selected Problem Statement: Skill Swap Platform
A modern web application that enables users to exchange skills with each other. Users can list their skills, search for others with specific skills, and request skill swaps in return.
- User Registration & Authentication: Secure JWT-based authentication
- Profile Management: Users can create and edit their profiles
- Profile Photos: Optional profile photo uploads
- Privacy Settings: Users can make their profiles public or private
- Skills Offered: Users can list skills they can teach
- Skills Wanted: Users can list skills they want to learn
- Skill Details: Each skill includes description and proficiency/priority levels
- Availability: Users can specify when they're available (weekdays, weekends, evenings, mornings)
- Browse Users: View all public profiles
- Skill Search: Search users by specific skills
- Location Filtering: Filter users by location
- Availability Filtering: Filter by availability preferences
- Request Swaps: Send skill exchange requests to other users
- Accept/Reject: Recipients can accept or reject swap requests
- Cancel Requests: Requesters can cancel pending requests
- Complete Swaps: Mark swaps as completed after exchange
- Swap History: View all past and current swaps
- Post-Swap Ratings: Rate completed swaps (1-5 stars)
- Comments: Add feedback comments to ratings
- User Ratings: Build reputation through ratings
- Average Ratings: Display user's average rating
- Node.js with Express.js
- MongoDB with Mongoose ODM
- JWT for authentication
- bcryptjs for password hashing
- multer for file uploads
- express-validator for input validation
- helmet for security headers
- express-rate-limit for rate limiting
- React.js with functional components and hooks
- React Router for navigation
- Axios for API calls
- React Hook Form for form management
- React Hot Toast for notifications
- Lucide React for icons
- Tailwind CSS for styling
skillswap/
├── server/ # Backend API
│ ├── models/ # MongoDB schemas
│ ├── routes/ # API routes
│ ├── middleware/ # Custom middleware
│ ├── uploads/ # File uploads
│ └── index.js # Server entry point
├── client/ # Frontend React app
│ ├── src/
│ │ ├── components/ # Reusable components
│ │ ├── pages/ # Page components
│ │ ├── contexts/ # React contexts
│ │ └── index.js # App entry point
│ └── public/ # Static files
└── README.md
- Node.js (v14 or higher)
- MongoDB (local or cloud instance)
- npm or yarn
-
Clone the repository
git clone <repository-url> cd skillswap
-
Install dependencies
# Install root dependencies npm install # Install backend dependencies cd server npm install # Install frontend dependencies cd ../client npm install
-
Environment Setup
Copy the template file and customize it with your settings:
cd server cp .env-template .envThen edit the
.envfile with your MongoDB Atlas connection string:MONGODB_URI=mongodb+srv://your-username:your-password@your-cluster.mongodb.net/skillswap?retryWrites=true&w=majority JWT_SECRET=your-super-secret-jwt-key-change-this-in-production PORT=5000 NODE_ENV=development
-
Start MongoDB
Make sure MongoDB is running on your system or use a cloud instance.
-
Run the application
From the root directory:
# Start both frontend and backend npm run dev # Or start them separately: npm run server # Backend on port 5000 npm run client # Frontend on port 3000
npm run dev- Start both frontend and backend in development modenpm run server- Start only the backend servernpm run client- Start only the frontend development servernpm run build- Build the frontend for productionnpm run install-all- Install dependencies for all packages
POST /api/auth/register- Register a new userPOST /api/auth/login- Login userGET /api/auth/me- Get current user
GET /api/users/browse- Browse public usersGET /api/users/search- Search users by skillsGET /api/users/:id- Get user profilePUT /api/users/profile- Update user profilePOST /api/users/profile-photo- Upload profile photoPOST /api/users/skills-offered- Add skill offeredPOST /api/users/skills-wanted- Add skill wantedDELETE /api/users/skills-offered/:id- Remove skill offeredDELETE /api/users/skills-wanted/:id- Remove skill wanted
POST /api/swaps- Create swap requestGET /api/swaps/my-swaps- Get user's swapsGET /api/swaps/:id- Get swap detailsPUT /api/swaps/:id/accept- Accept swap requestPUT /api/swaps/:id/reject- Reject swap requestPUT /api/swaps/:id/complete- Complete swapPUT /api/swaps/:id/cancel- Cancel swap requestPOST /api/swaps/:id/rate- Rate completed swap
GET /api/skills/popular- Get popular skillsGET /api/skills/suggestions- Get skill suggestions
- Register/Login: Create an account or sign in
- Complete Profile: Add your skills, availability, and bio
- Browse Users: Search for people with skills you want to learn
- Request Swaps: Send skill exchange requests
- Manage Requests: Accept, reject, or cancel swap requests
- Complete Swaps: Mark swaps as completed after exchange
- Rate & Review: Provide feedback after completing swaps
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request