A full-stack freelance marketplace platform built for the modern economy.
Post projects. Bid on work. Get paid. All in one place.
Live Demo β Β Β·Β GitHub β Β Β·Β Report Bug
Co.Worker is a production-grade freelance marketplace where clients post projects and freelancers bid to win work β similar to Fiverr and Upwork, but built from scratch with modern architecture.
| For Clients | For Freelancers |
|---|---|
| Post projects with budget & duration | Build a verified profile & portfolio |
| Browse top talent by category & skill | Bid on projects that match your expertise |
| Secure escrow payment system | Real-time chat with clients |
| Release payment on completion | Get paid to your wallet β withdraw anytime |
| Rate & review your freelancer | Build reputation through ratings |
- Dual role β switch between Client and Freelancer mode
- JWT-based authentication with protected routes
- Profile pages with avatar, bio, skills, and portfolio
- Verified freelancer badge system
- Clients post projects with title, budget, duration, and required tech stack
- Freelancers browse and place bids with custom proposals
- Real-time bid tracking and status updates
- Category filters β Web Dev, UI/UX, AI/ML, Full Stack, and more
- Socket.io powered instant messaging
- Typing indicators and online/offline status
- Seen receipts (ββ)
- Unread badge count on navbar
- Persistent conversation history
- Razorpay integration for client payments
- Escrow model β money is held by platform until work is approved
- 24-hour auto-release timer after client marks project complete
- Freelancer wallet with withdrawable and pending balance
- Withdrawal request system with admin approval
- Real-time balance tracking
- Full transaction history
- Withdrawal via UPI or Bank Transfer
- Platform fee deduction on each transaction
- Clients rate freelancers after project completion
- Star rating + written review
- Rating displayed on freelancer profile and talent cards
- View and manage all payments and escrow
- Approve or reject withdrawal requests
- Monitor platform activity
- Mobile-first design
- Tailwind CSS utility-first styling
- Works across all screen sizes
| Layer | Technology |
|---|---|
| Frontend | React 18, Redux Toolkit, React Router v6 |
| Styling | Tailwind CSS, Custom Animations |
| State Management | Redux Toolkit, RTK Thunks |
| Backend | Node.js, Express.js |
| Database | MongoDB, Mongoose ODM |
| Real-Time | Socket.io (WebSockets) |
| Payments | Razorpay (Orders + Signature Verification) |
| Auth | JWT (JSON Web Tokens) |
| Deployment | Vercel (Frontend) + Render (Backend) |
| Scheduling | node-cron (auto escrow release) |
Screenshots from the live production app
CLIENT PAYS
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββ
β RAZORPAY PAYMENT GATEWAY β
β (Signature verified on backend β secure) β
βββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ESCROW (Platform holds funds)
β
βΌ Client marks project complete
PENDING RELEASE (24hr review window)
β
βΌ Auto-released via cron job
FREELANCER WALLET (withdrawable balance)
β
βΌ Freelancer requests withdrawal
BANK / UPI (Admin processes payout)
Platform fee is deducted per category (βΉ11ββΉ24) at time of payment.
No fake payments β Razorpay signature is verified server-side before any escrow is created.
- Node.js v18+
- MongoDB Atlas account (or local MongoDB)
- Razorpay test account
git clone https://github.com/amitbhallavi/co.worker.git
cd co.worker# Install backend dependencies
cd server
npm install
# Install frontend dependencies
cd ../client
npm installCreate .env in the /server folder:
# Database
MONGO_URI=mongodb+srv://<user>:<password>@cluster.mongodb.net/coworker
# Auth
JWT_SECRET=your_super_secret_jwt_key
# Razorpay
RAZORPAY_KEY_ID=rzp_test_xxxxxxxxxxxx
RAZORPAY_KEY_SECRET=xxxxxxxxxxxxxxxxxxxx
# App
PORT=5000
CLIENT_URL=http://localhost:5173
NODE_ENV=developmentCreate .env in the /client folder:
VITE_API_URL=http://localhost:5000# Terminal 1 β Start backend
cd server
npm run dev
# Terminal 2 β Start frontend
cd client
npm run devApp runs on
http://localhost:5173
co.worker/
β
βββ client/ # React Frontend
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ features/ # Redux slices (auth, project, freelancer, wallet, chat)
β β βββ pages/ # Page components (Home, Profile, Chat, Wallet...)
β β βββ app/ # Redux store configuration
β β βββ main.jsx # App entry point
β βββ vite.config.js
β
βββ server/ # Node.js Backend
β βββ controllers/ # Business logic (auth, project, payment, wallet, chat)
β βββ models/ # Mongoose schemas (User, Project, Payment, Wallet...)
β βββ routes/ # Express route definitions
β βββ middleware/ # Auth middleware (JWT protect)
β βββ socket/ # Socket.io handler
β βββ server.js # Express + HTTP server entry
β
βββ README.md
| Variable | Location | Description |
|---|---|---|
MONGO_URI |
server | MongoDB connection string |
JWT_SECRET |
server | Secret key for JWT signing |
RAZORPAY_KEY_ID |
server | Razorpay API key (public) |
RAZORPAY_KEY_SECRET |
server | Razorpay API secret |
CLIENT_URL |
server | Frontend URL (for CORS + Socket) |
PORT |
server | Backend server port (default 5000) |
VITE_API_URL |
client | Backend API base URL |
| Feature | Status |
|---|---|
| β User Authentication (JWT) | Done |
| β Freelancer Profile & Portfolio | Done |
| β Project Posting & Bidding | Done |
| β Real-Time Chat (Socket.io) | Done |
| β Escrow Payment System (Razorpay) | Done |
| β Wallet + Withdrawal System | Done |
| β Admin Dashboard | Done |
| β Responsive UI | Done |
| π Ratings & Reviews System | In Progress |
| π Notifications (in-app + email) | Planned |
| π AI-powered freelancer matching | Planned |
| π Advanced analytics dashboard | Planned |
| π Mobile app (React Native) | Planned |
Contributions are welcome! Here's how:
# 1. Fork the repo
# 2. Create your feature branch
git checkout -b feature/your-feature-name
# 3. Commit your changes
git commit -m "feat: add your feature"
# 4. Push to your branch
git push origin feature/your-feature-name
# 5. Open a Pull RequestPlease follow the existing code style and keep PRs focused on a single feature or fix.
This project is licensed under the MIT License β see the LICENSE file for details.