A real-time freelance bidding marketplace
GigFlow is a full-stack platform where clients post gigs and freelancers compete by placing bids.
Clients hire the best offer, and all other bids are automatically rejected.
This is not a listing site — it is a live reverse-marketplace.
- Frontend: https://imkhs-gigflow.netlify.app
- Backend: https://gigflow-n32p.onrender.com
- User registration & login
- JWT authentication stored in HttpOnly cookies
- Secure password hashing using bcrypt
- Post gigs (title, description, budget)
- View all bids for a gig
- Hire one freelancer
- Automatically reject all other bids
- Track active & assigned gigs
- Browse open gigs
- Submit bids with message & price
- Track bid status (
pending,hired,rejected) - View all bids
- Gigs posted
- Bids made
- Hired count
- Active gigs
- Graphs showing activity (Recharts)
- Live search by gig title
- Debounced input
- Fast MongoDB filtering
Frontend
- React (Vite)
- Tailwind CSS
- Zustand
- Axios
- React Router
- Framer Motion
- Recharts
Backend
- Node.js
- Express.js
- MongoDB
- Mongoose
- JWT Authentication
- HttpOnly Cookies
- MongoDB Transactions
User
- name
- password (hashed)
Gig
- title
- desc
- budget
- owner
- status (open, assigned)
- createdAt
Bid
- gig
- freelancer
- price
- message
- status (pending, hired, rejected)
When a client hires a freelancer:
- Gig status becomes
assigned - Selected bid becomes
hired - All other bids become
rejected - This is executed inside a MongoDB transaction to prevent race conditions
Only one freelancer can be hired per gig.
Create a .env file in the backend:
PORT=5001
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
NODE_ENV=developmentBackend
cd server
npm install
npm run dev
Frontend
cd client
npm install
npm run dev
A full hiring workflow demonstration is available here: Loom Video: https://drive.google.com/file/d/182knvFQoMbITkdLxYuu0nNYU7LLb4IwM/view
Karan Kumar Full Stack Developer Built for the ServiceHive Assignment Round