A full-stack web application that enables users to exchange skills with each other. Users can create profiles, list their skills, browse others' skills, and request skill swaps.
✅ LIVE FEATURES:
- ✅ User authentication (register/login) with JSON file storage
- ✅ User profiles with skills management
- ✅ Browse and search skills functionality
- ✅ Dashboard with user overview
- ✅ Skills API (suggestions, popular skills, stats)
- ✅ File-based database (no MongoDB setup required)
🔧 TEST CREDENTIALS:
- Email:
john@example.com/ Password:password123 - Email:
jane@example.com/ Password:password123(Admin) - Email:
alice@example.com/ Password:password123
🚀 QUICK START:
cd backend && npm install && npm run dev(starts on port 5001)cd frontend && npm install && npm start(opens http://localhost:3000)- Login with test credentials and explore!
- User Registration & Authentication: Secure JWT-based authentication
- Profile Management: Create and update profiles with skills offered/wanted
- Skill Discovery: Browse and search for skills offered by other users
- Swap Requests: Send and manage skill swap requests
- Rating System: Rate and provide feedback after skill exchanges
- Availability Scheduling: Set availability preferences
- Privacy Controls: Make profiles public or private
- User Management: View, ban/unban users
- Swap Monitoring: Monitor all swap requests and activities
- Platform Messages: Send platform-wide announcements
- Reporting: Generate user activity and swap statistics reports
- Content Moderation: Review and manage inappropriate content
- React.js with TypeScript
- Material-UI (MUI) for UI components
- React Router for navigation
- Axios for API calls
- React Hook Form for form management
- React Toastify for notifications
- Node.js with Express.js
- MongoDB with Mongoose ODM
- JWT for authentication
- Bcrypt for password hashing
- Multer for file uploads
- Express Validator for input validation
- Helmet for security headers
- CORS for cross-origin requests
skill-swap-platform/
├── frontend/ # React.js frontend
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Page components
│ │ ├── contexts/ # React contexts
│ │ ├── services/ # API services
│ │ └── types/ # TypeScript interfaces
│ └── public/
├── backend/ # Node.js backend
│ ├── models/ # MongoDB models
│ ├── routes/ # API routes
│ ├── middleware/ # Custom middleware
│ └── uploads/ # File uploads directory
└── README.md
- Node.js (v14 or higher)
- MongoDB (v4.4 or higher)
- npm or yarn
-
Clone the repository
git clone <repository-url> cd skill-swap-platform
-
Install Backend Dependencies
cd backend npm install -
Install Frontend Dependencies
cd ../frontend npm install -
Environment Setup
Create
.envfile in the backend directory:NODE_ENV=development PORT=5000 MONGODB_URI=mongodb://localhost:27017/skill-swap JWT_SECRET=your_jwt_secret_key_here JWT_EXPIRE=7d FRONTEND_URL=http://localhost:3000
Create
.envfile in the frontend directory:REACT_APP_API_URL=http://localhost:5000/api
-
Start MongoDB Make sure MongoDB is running on your system.
-
Start the Development Servers
Backend (from backend directory):
npm run dev
Frontend (from frontend directory):
npm start
-
Access the Application
- Frontend: http://localhost:3000
- Backend API: http://localhost:5000/api
POST /api/auth/register- User registrationPOST /api/auth/login- User loginGET /api/auth/me- Get current userPOST /api/auth/refresh- Refresh token
GET /api/users- Get all public usersGET /api/users/:id- Get user by IDPUT /api/users/profile- Update user profilePOST /api/users/profile/photo- Upload profile photoGET /api/users/:id/swaps- Get user's swap history
POST /api/swaps- Create swap requestGET /api/swaps/my-swaps- Get user's swapsGET /api/swaps/:id- Get swap by IDPUT /api/swaps/:id/status- Update swap statusPUT /api/swaps/:id/complete- Mark swap as completedDELETE /api/swaps/:id- Cancel swap requestPOST /api/swaps/:id/feedback- Submit feedback
GET /api/skills/suggestions- Get skill suggestionsGET /api/skills/popular- Get popular skillsGET /api/skills/stats- Get skill statistics
GET /api/admin/dashboard- Get admin dashboard statsGET /api/admin/users- Get all users (admin)PUT /api/admin/users/:id/ban- Ban/unban userGET /api/admin/swaps- Get all swaps (admin)POST /api/admin/messages- Create platform messageGET /api/admin/reports/:type- Generate reports
To create an admin user, you can manually update a user in the database:
// In MongoDB shell or through a database client
db.users.updateOne(
{ email: "admin@example.com" },
{ $set: { isAdmin: true } }
)- Basic info (name, email, password)
- Location and profile photo
- Skills offered and wanted
- Availability preferences
- Privacy settings
- Rating information
- Admin status
- Requester and receiver references
- Skills being exchanged
- Status (pending, accepted, rejected, completed, cancelled)
- Scheduling information
- Feedback and ratings
- Admin notes
- Platform-wide announcements
- Message types and priorities
- Target audience settings
- Read status tracking
# Backend tests
cd backend
npm test
# Frontend tests
cd frontend
npm test# Build frontend
cd frontend
npm run build
# Start backend in production mode
cd backend
npm start- 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
This project is licensed under the MIT License - see the LICENSE file for details.
For support, email support@skillswap.com or join our Slack channel.
- Real-time messaging system
- Video call integration
- Mobile app development
- Payment integration for premium features
- Advanced matching algorithms
- Group skill sessions
- Skill certification system
