GigFlow is a powerful, full-stack freelance marketplace platform where users can seamlessly transition between being a Client (posting gigs) and a Freelancer (bidding on gigs). Built with a modern tech stack, it emphasizes security, scalability, and atomic business logic.
fronend live on Vercel : https://gigflow.vercel.app backend live on render : https://gigflow-we5x.onrender.com
- Framework: React 18 with TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS
- UI Components: Shadcn UI (Radix UI)
- State Management: TanStack Query (React Query)
- Routing: React Router Dom
- HTTP Client: Axios
- Runtime: Node.js
- Framework: Express (TypeScript)
- Database: MongoDB with Mongoose
- Authentication: JWT with HttpOnly Cookies
- Validation: Zod & Custom Middleware
- Unified Auth: Single login for both Clients and Freelancers.
- Security: CSRF-resistant authentication using HttpOnly cookies for JWT storage.
- Session Management: Persistent login with
/api/auth/meverification.
- Create Gigs: Users can post projects with title, description, and budget.
- Browse & Search: Dynamic feed of open gigs with real-time title-based search.
- Responsive Dashboard: Manage your own postings and applications in one place.
The core of GigFlow is its robust hiring mechanism:
- Bidding: Freelancers submit competitive bids with custom messages and pricing.
- Review: Gig owners can view all applicants and their proposals.
- Hire: One-click hiring process that executes atomicity:
- Gig Status: Updates from
opentoassigned. - Winning Bid: Status becomes
hired. - Other Bids: Automatically marked as
rejected. - Validation: Prevents multi-hiring or self-hidding.
- Gig Status: Updates from
- Node.js (v18+)
- MongoDB (Atlas or Local)
- npm or bun
git clone <repository-url>
cd GigFlow
# Install Backend Dependencies
cd server
npm install
# Install Frontend Dependencies
cd ../frontend
npm installCreate a .env file in the server directory (refer to .env.example in the root):
PORT=5000
MONGO_URI=your_mongodb_uri
JWT_SECRET=your_secret_keyStart the backend server:
# In /server
npm run devStart the frontend development server:
# In /frontend
npm run devThe app will be available at http://localhost:5173.
| Category | Endpoint | Method | Description |
|---|---|---|---|
| Auth | /api/auth/register |
POST |
Create new account |
| Auth | /api/auth/login |
POST |
Login & set cookie |
| Gigs | /api/gigs |
GET |
Fetch open gigs (searchable) |
| Gigs | /api/gigs |
POST |
Post a new project |
| Bids | /api/bids |
POST |
Submit a proposal |
| Bids | /api/bids/:gigId |
GET |
View applicants (Owner only) |
| Hire | /api/bids/:bidId/hire |
PATCH |
Execute hiring logic |
GigFlow/
├── frontend/ # React + Vite + Tailwind
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Application views
│ │ ├── api/ # Axios API definitions
│ │ └── lib/ # Shared utilities
├── server/ # Node.js + Express + TS
│ ├── src/
│ │ ├── controllers/# Business logic
│ │ ├── models/ # Mongoose schemas
│ │ ├── routes/ # API endpoints
│ │ └── middleware/ # Auth & error handlers
└── .env.example # Reference environment variables
- Clean Backend Architecture
- Secure JWT-based Authentication
- Atomic Hiring Logic Implementation
- Interactive UI with Shadcn
- Full TypeScript Type Safety