A barter-only skill marketplace where users trade skills without money.
Features • Tech Stack • Getting Started • Structure • API • Contributing
SkillSwap is a modern web application that enables users to exchange skills and services through a barter system. Instead of using money, users trade their expertise directly with others or use an internal credit system called SkillCoins.
- Post Skill Offers: Share what you can teach or do
- Post Skill Requests: Describe what you want to learn or get done
- Propose Barter Deals: Trade skills directly (e.g., "I'll teach Python if you design my poster")
- Earn SkillCoins: Build credits by completing tasks
- Build Trust: Grow your reputation through ratings and reviews
- Skill Offers & Requests - List skills you offer and want
- Barter Deals - Propose and negotiate skill trades
- SkillCoins - Internal credit system for flexibility
- Trust Score - Reputation based on ratings and history
- Messaging - In-app chat for deal discussions
- Notifications - Stay updated on proposals and messages
- User Profiles - Showcase your skills and reviews
- User Management - View and moderate users
- Dashboard - Overview of platform activity
- Dispute Resolution - Handle reported issues
- Content Moderation - Remove inappropriate content
- React.js - UI library
- React Router - Client-side routing
- Framer Motion - Smooth animations
- Axios - HTTP client
- CSS Modules - Scoped styling
- Node.js - Runtime environment
- Express.js - Web framework
- MongoDB - Database
- Mongoose - ODM for MongoDB
- JWT - Authentication
- bcrypt - Password hashing
- Multer - File uploads
- Node.js (v18 or higher)
- MongoDB (local or Atlas)
- npm or yarn
-
Clone the repository
git clone https://github.com/ZenYukti/SkillSwap.git cd SkillSwap -
Install all dependencies
npm run install:all
-
Set up environment variables
Copy the example env file and update values:
cp .env.example server/.env
Edit
server/.envwith your configuration:MONGODB_URI=mongodb://localhost:27017/skillswap JWT_SECRET=your_secure_secret_key JWT_REFRESH_SECRET=your_refresh_secret_key CLIENT_URL=http://localhost:5173
-
Start MongoDB (if running locally)
mongod
-
Run the application
# Run both frontend and backend npm run dev # Or run separately: npm run server # Backend on port 5000 npm run client # Frontend on port 5173
-
Open in browser
http://localhost:5173
Run the seed script to create a default admin:
cd server
npm run seed:adminDefault admin credentials:
- Email:
admin@skillswap.com - Password:
Admin123!
SkillSwap/
├── client/ # React frontend
│ ├── public/ # Static assets
│ └── src/
│ ├── components/ # Reusable UI components
│ ├── pages/ # Page components
│ ├── context/ # React Context providers
│ ├── services/ # API service functions
│ ├── hooks/ # Custom React hooks
│ ├── styles/ # Global styles and CSS modules
│ └── utils/ # Utility functions
│
├── server/ # Node.js backend
│ ├── config/ # Configuration files
│ ├── controllers/ # Route controllers
│ ├── middleware/ # Custom middleware
│ ├── models/ # Mongoose models
│ ├── routes/ # API routes
│ ├── utils/ # Utility functions
│ ├── uploads/ # File uploads directory
│ └── tests/ # Backend tests
│
├── .env.example # Environment variables template
├── package.json # Root package.json
└── README.md # This file
http://localhost:5000/api
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/register |
Register new user |
| POST | /auth/login |
Login user |
| POST | /auth/refresh |
Refresh access token |
| POST | /auth/logout |
Logout user |
| POST | /auth/forgot-password |
Request password reset |
| Method | Endpoint | Description |
|---|---|---|
| GET | /users/me |
Get current user |
| PUT | /users/me |
Update profile |
| GET | /users/:username |
Get public profile |
| PUT | /users/password |
Change password |
| Method | Endpoint | Description |
|---|---|---|
| GET | /skills |
Get all skills (with filters) |
| POST | /skills/offer |
Create skill offer |
| POST | /skills/request |
Create skill request |
| GET | /skills/:id |
Get skill details |
| PUT | /skills/:id |
Update skill |
| DELETE | /skills/:id |
Delete skill |
| Method | Endpoint | Description |
|---|---|---|
| GET | /deals |
Get user's deals |
| POST | /deals |
Create barter proposal |
| GET | /deals/:id |
Get deal details |
| PUT | /deals/:id/status |
Update deal status |
| POST | /deals/:id/review |
Add review |
| Method | Endpoint | Description |
|---|---|---|
| GET | /messages/conversations |
Get conversations |
| GET | /messages/:conversationId |
Get messages |
| POST | /messages |
Send message |
| Method | Endpoint | Description |
|---|---|---|
| GET | /notifications |
Get notifications |
| PUT | /notifications/:id/read |
Mark as read |
| PUT | /notifications/read-all |
Mark all as read |
# Run all tests
npm test
# Run backend tests only
cd server && npm test
# Run frontend tests only
cd client && npm testSkillSwap follows a modern, clean design approach:
- Light Theme - Easy on the eyes
- Smooth Animations - Framer Motion for delightful interactions
- Responsive - Mobile-first design
- Accessible - WCAG guidelines compliance
- Minimal - Focus on content and functionality
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add 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.
- Built with ❤️ by Team ZenYukti
- Inspired by the philosophy of skill sharing and community collaboration
- "Learn. Build. Share." — To grow together
| Website | zenyukti.in |
| linkedin.com/company/ZenYukti | |
| Twitter/X | x.com/ZenYukti |
| Discord | Join our community |
| info@zenyukti.in | |
| Support | support@zenyukti.in |
SkillSwap — Trade Skills, Not Money
"Learn. Build. Share." — Team ZenYukti 💜
