A two-sided marketplace connecting homeowners and contractors
The situation before we started
The founder had spent 12 years in residential contracting and had seen both sides of the problem: homeowners getting fleeced by cowboy contractors, and skilled tradespeople struggling to find steady work because they had no marketing budget. The idea was a vetted marketplace โ contractors go through a verification process (licence check, insurance confirmation, reviews from past clients) before they can bid. Homeowners post jobs with a budget range and photos, and only vetted contractors in the right service area can respond. The platform takes a commission on completed jobs.
What made this hard
Build the full marketplace infrastructure: contractor profiles, job posting, bid management, in-app messaging, scheduling, payment escrow, review system, and an admin panel to manage disputes and payouts.
Two separate user types (homeowners and contractors) with fundamentally different interfaces and permissions
Real-time messaging had to feel instant โ polling was not acceptable on the contractor side where response speed is a competitive differentiator
Payment escrow: homeowner pays at job acceptance, contractor paid at completion โ required careful Stripe Connect integration with dispute handling
Contractor verification was a manual step โ the admin needed tooling to review licence docs and mark contractors as verified
The review system had to be tamper-resistant โ no editing reviews after 24 hours, no deleting by contractors
How we built it
Phase 1 โ Architecture & Dual Interface Design (Weeks 1โ3)
Designed the full data model for the marketplace: users, profiles, jobs, bids, messages, payments, reviews. Decided on a single Next.js app with route-based role switching rather than two separate apps โ shared component library, role-aware layouts. Planned the Stripe Connect flow upfront given its complexity.
Phase 2 โ Contractor Profiles & Job Posting (Weeks 4โ7)
Built contractor onboarding: profile creation, service categories, service area (zip code radius), portfolio photos, licence and insurance document upload. Built homeowner job posting: job description, photos, budget range, job category, location. Implemented matching logic to surface relevant jobs to contractors in their service area.
Phase 3 โ Bid Management & Messaging (Weeks 8โ11)
Bid system: contractors submit a bid with price, timeline, and a message. Homeowners see bids ranked by rating and price. Built real-time messaging using Socket.io with persistent message history in PostgreSQL. Implemented read receipts and typing indicators. Added the scheduling flow: homeowner proposes a time, contractor confirms.
Phase 4 โ Payments, Reviews & Launch (Weeks 12โ16)
Integrated Stripe Connect: homeowner pays into escrow at bid acceptance, funds released to contractor upon job completion confirmation from homeowner. Built the review system with tamper-resistant controls. Built the admin moderation dashboard for disputes, contractor verification, and payout management. Soft-launched with 120 verified contractors.
Features shipped
How it's built
React/Next.js frontend with separate layout contexts for homeowner and contractor roles. Node.js API with PostgreSQL. Real-time messaging via Socket.io with a dedicated WebSocket server on AWS EC2. Stripe Connect with custom account creation, payment intents, and payout scheduling. Images uploaded to S3. The admin dashboard is a separate Next.js route with its own middleware-enforced auth. Deployed on AWS with an Application Load Balancer routing between the API and WebSocket servers.
What changed after launch
Get the full case study as a PDF
Includes detailed architecture diagrams and implementation notes โ free to download.
Ready to build something
that actually works?
Book a 30-minute strategy call. No sales pitch โ just an honest conversation about your project and the best way to approach it.
30-min call ยท No commitment ยท Response within 24 hours