A full-featured freelance marketplace platform where clients can post jobs and freelancers can bid on projects.
✅ User Authentication - Secure JWT-based authentication ✅ Browse Projects - Clients can list and filter projects ✅ Browse Freelancers - Find and hire talented freelancers ✅ Bidding System - Freelancers can submit bids for projects ✅ Messaging - Direct communication between clients and freelancers ✅ Reviews & Ratings - Rate and review completed work ✅ User Profiles - Showcase skills, experience, and ratings ✅ Project Management - Track project status and assignments
freelance-marketplace/
├── backend/ # Node.js/Express server
│ ├── models/ # MongoDB schemas
│ ├── routes/ # API routes
│ ├── middleware/ # Middleware functions
│ ├── server.js # Server entry point
│ ├── package.json
│ └── .env # Environment variables
│
├── frontend/ # React application
│ ├── public/
│ │ └── index.html # Main HTML file
│ ├── src/
│ │ ├── components/ # Reusable React components
│ │ ├── pages/ # Page components
│ │ ├── context/ # React context (Auth)
│ │ ├── App.js # Main app component
│ │ ├── index.js # Entry point
│ │ └── index.css # Styles
│ └── package.json
│
└── README.md # This file
Backend:
- Node.js & Express.js
- MongoDB
- JWT for authentication
- Stripe (for payments - ready to integrate)
Frontend:
- React
- Axios (HTTP client)
- CSS3 (modern styling)
- Node.js (v14 or higher)
- npm or yarn
- MongoDB (local or Atlas account)
- Navigate to the backend directory:
cd backend- Install dependencies:
npm install- Create/update
.envfile with your settings:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/freelance_marketplace
JWT_SECRET=your_super_secret_key_here
JWT_EXPIRE=7d
NODE_ENV=development- Start the backend server:
npm start
# or for development with auto-reload:
npm run devThe backend API will be available at http://localhost:5000
- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install- Start the development server:
npm startThe frontend will be available at http://localhost:3000
POST /api/auth/register- Register new userPOST /api/auth/login- Login userGET /api/auth/me- Get current user (requires auth)
GET /api/users- Get all freelancersGET /api/users/:id- Get user profilePUT /api/users/:id- Update user profile (requires auth)
GET /api/projects- Get all projectsGET /api/projects/:id- Get project detailsPOST /api/projects- Create project (requires auth)PUT /api/projects/:id- Update project (requires auth)DELETE /api/projects/:id- Delete project (requires auth)
POST /api/bids- Submit bid (requires auth)GET /api/bids/project/:projectId- Get project bidsGET /api/bids/freelancer/bids/:freelancerId- Get freelancer bidsPUT /api/bids/:bidId/accept- Accept bid (requires auth)PUT /api/bids/:bidId/reject- Reject bid (requires auth)
POST /api/messages- Send message (requires auth)GET /api/messages/conversation/:userId- Get conversationGET /api/messages/inbox/:userId- Get user inboxPUT /api/messages/:messageId/read- Mark message as read
POST /api/reviews- Create review (requires auth)GET /api/reviews/user/:userId- Get user reviews
- Sign up and select "Client" as your user type
- Login to your dashboard
- Click "Post a Project" to create a new project
- Fill in project details, budget, and required skills
- Browse incoming bids from freelancers
- Accept the best bid to assign the project
- Message freelancers to discuss project details
- Leave a review after project completion
- Sign up and select "Freelancer" as your user type
- Complete your profile with skills and experience
- Browse available projects
- Submit bids on projects matching your skills
- Communicate with clients through messaging
- Once project is assigned, start working
- Deliver work and receive reviews
- Secure registration and login with email
- JWT token-based authentication
- User types: Client, Freelancer, or Both
- Protected routes for authenticated users
- Create, edit, and delete projects
- Filter projects by category, budget, and skills
- Track project status (Open, In-Progress, Completed, Cancelled)
- Set project deadlines and budgets
- Choose between fixed and hourly pricing
- Freelancers can submit multiple bids per project
- Include cover letter and proposed timeline
- Clients can accept or reject bids
- Track bid status (Pending, Accepted, Rejected)
- Real-time direct messaging between users
- Message history and conversations
- Mark messages as read
- Project-specific messaging
- Rate completed projects on 1-5 star scale
- Leave detailed comments
- Aggregate ratings on user profiles
- Total review count displayed
- Display name, bio, skills, and hourly rate
- Profile picture support
- Track completed projects
- View average rating
Replace the Stripe placeholder in .env with your actual API key and integrate the Stripe SDK for handling payments.
Edit frontend/src/index.css to customize colors, fonts, and layout:
- Primary color:
#667eea - Secondary color:
#764ba2
Change MongoDB connection string in .env to use MongoDB Atlas or a different MongoDB instance.
- Create a Heroku account and install Heroku CLI
- Login:
heroku login - Create app:
heroku create your-app-name - Set environment variables:
heroku config:set KEY=value - Deploy:
git push heroku main
- Build:
npm run build - Deploy the
buildfolder to Vercel or Netlify - Set environment variables to point to production API
- Ensure MongoDB is running
- Check MongoDB URI in
.env - Verify network access if using MongoDB Atlas
- Backend should have CORS enabled (already configured)
- Check frontend API endpoint matches backend URL
- Clear browser localStorage:
localStorage.clear() - Check JWT_SECRET matches between sessions
- Verify token expiration in
.env
- Payment integration with Stripe
- Search and recommendations algorithm
- Advanced filtering and sorting
- Portfolio showcase for freelancers
- Time tracking during projects
- Dispute resolution system
- Admin dashboard
- Email notifications
- Two-factor authentication
- Video call integration
Feel free to fork this project and submit pull requests!
MIT License - feel free to use this project for personal or commercial purposes.
For issues and questions, please open an issue in the repository or contact support.
Happy freelancing! 🚀