Marketplaces
ResourceAble
A multi-category service marketplace with the full provider lifecycle: onboarding, verification, split payments, refunds, and dashboards.
- Services
- Apps for your customers
- Stack
- Next.js, Stripe Connect, PostgreSQL, Prisma
At a glance
- Problem
- The storefront takes a weekend. Onboarding, split payments, and refunds are where marketplace builds stall.
- Solution
- Stripe Connect onboarding, a webhook-driven booking lifecycle, and dashboards for providers and admins.
- Result
- Payment state changes only on verified webhooks, so a closed tab never loses a booking.
The problem
Marketplace MVPs are easy to fake and hard to ship. A grid of listings and a checkout button takes a weekend.
The real product is everything after: onboarding and verifying providers, splitting payments, refunding after a provider was paid, and a dashboard both sides can trust. That’s where marketplace builds die, and it’s the part most agencies leave for phase two.
What we built
Provider onboarding
Self-serve sign-up, profile, and verification, with Stripe Connect onboarding embedded so providers can start taking payments quickly.
OrderSourceStatus4471EmailDone4470WebsiteIn progress4468EmailNeeds a lookCategories as configuration
Categories, sub-categories, and per-category attributes, so a new vertical is a configuration change rather than a migration.
CategoryCleaningTutoringRepairsAvailable this weekRating4.5 and upBooking and payment
Funds are held, split at completion, and paid out net of the platform fee. Refunds and disputes are handled in Connect.
Orders today128Stock alerts32 expiringDemo dataTwo honest dashboards
Providers see bookings, earnings, and payouts. Admins see providers, transactions, disputes, and platform revenue.
Orders processed automaticallyDemo data
Architecture
Engineering decisions
- Why webhook-driven state instead of client callbacks?
- A customer closing the tab after paying is a normal event, and a marketplace that loses that booking is broken. Verified webhooks are the source of truth the network can’t drop.
- Why Stripe Connect instead of building payouts?
- Money transmission, identity checks, and tax reporting are not places to be original. Connect absorbs that compliance surface.
- Why make every payment handler idempotent?
- Stripe will eventually deliver the same webhook twice. Every payment-related handler is keyed and safe to replay.
Tech stack
- Next.js
- Stripe Connect
- PostgreSQL
- Prisma