QuickWork — Local Service Marketplace
Multi-role marketplace connecting clients with service providers through real-time coordination, payments, and assignment workflows.
Overview
QuickWork is a full-stack service marketplace where clients can discover and hire local service providers for various tasks. The platform manages the complete lifecycle from provider discovery and job posting through assignment, work tracking, payment processing, and completion — with separate interfaces for clients, providers, and platform administrators.
My Role
Sole developer. Designed the data model, built the REST API, implemented real-time communication, integrated Razorpay payments, and deployed to AWS EC2.
Problem Statement
Connecting clients with local service providers dynamically requires real-time coordination, location-based filtering, multi-role access control, and verified payment handling across different user types.
Solution & Architecture
QuickWork implements a three-role system (Client, Provider, Admin) with location-based provider discovery using GeoJSON queries, real-time Socket.IO messaging between parties, and Razorpay payment integration with server-side HMAC signature verification.
+-------------------+ WebSockets +-----------------------+
| Client/Provider | <==================> | Socket.IO Gateway |
+-------------------+ +-----------------------+
|
v
+-----------------------+
| Node/Express Server |
+-----------------------+
| | |
v v v
+-----------+ +--------+ +-----------+
| MongoDB | |Razorpay| |Cloudinary |
| (GeoJSON) | | API | | (Files) |
+-----------+ +--------+ +-----------+
Technical Flow
React (TypeScript) → Axios → Express REST API → Mongoose ODM → MongoDB (GeoJSON indexes) — Socket.IO for real-time messaging — Razorpay SDK for payment order creation and HMAC verification — Cloudinary for file/image uploads — Leaflet + OpenStreetMap for location display.
Core Workflow
- Clients post jobs (public or targeted) with service requirements and location
- Providers discover jobs via location filtering and apply
- Clients review applications and assign a provider
- Provider updates work status through defined lifecycle stages
- Client confirms completion and initiates payment
- Server creates Razorpay order, client completes payment, server verifies signature via HMAC SHA-256
- Platform fee is deducted and provider earnings are recorded
- Admin manages users, monitors transactions, and handles dispute resolution
User Roles
Client
Posts jobs, browses providers, assigns work, initiates payments, and tracks job status.
Provider
Manages availability, discovers jobs by location, applies to jobs, updates work progress, and receives earnings.
Admin
Manages platform users, reviews transactions, handles cancellations and absence reports, and monitors platform fees.
Key Engineering Areas
Payment Verification
Razorpay order creation on the server, client-side checkout, then server-side HMAC SHA-256 signature verification before confirming payment state in the database.
Assignment Lifecycle
Tracks assignment and work status across job, assignment, in-progress, completion, and payment-related workflows, including cancellation and provider absence handling.
Role-Based Access Control
JWT authentication with role-specific middleware restricting API routes to the appropriate user type (client, provider, admin).
Real-Time Communication
Socket.IO manages bidirectional messaging between clients and providers with connection tracking for online status.
Location-Based Discovery
MongoDB GeoJSON indexes enable providers to discover nearby jobs and clients to filter providers by proximity.
Platform Fee Handling
Tracks platform fees, provider earnings, and transaction records as part of the payment workflow.
Technical Challenges & Resolutions
Key engineering challenges: managing GeoJSON coordinate queries for location-based filtering, distributing real-time Socket.IO events across multiple user roles, coordinating payment state transitions with Razorpay signature verification, and preventing invalid status transitions in the assignment lifecycle.
Architectural Trade-offs
Chose MongoDB for GeoJSON indexing support and flexible document schemas across different user roles.
What I Learned
Building QuickWork taught me how to coordinate multiple user roles within a single application, implement location-based queries with GeoJSON, handle real payment verification flows, and manage the deployment of a Node.js application on AWS with process management and reverse proxying.