Back to work
Marketplace2023

EventFlow Pro

Two-sided marketplace for event clients & providers

Planning an event means stitching together a dozen providers — a venue, a caterer, a photographer, a planner — usually over scattered DMs, phone calls and back-and-forth quotes. EventFlow Pro brings both sides into one marketplace: clients describe what they need and providers get discovered, then the two sides message, agree on scope, book and pay without ever leaving the platform.

RoleFull-stack engineer — design & build
Timeline2023
PlatformWeb platform · responsive
Next.jsTypeScriptPostgreSQLStripeWebSockets
01 — The idea

Upwork, but for events

The event industry is a classic fragmented market: clients don’t know which providers are any good, and good providers struggle to be found. Every booking starts from scratch over email and phone, with quotes, availability and scope negotiated across a dozen disconnected threads.

EventFlow Pro’s premise was simple — put both sides in one place. Providers publish what they offer, clients describe what they need, and the platform owns everything in between, from first message to final payment.

  • Modelled the product as two distinct sides — providers and clients — on one system
  • Scoped the core loop: discover → message → agree → book → pay
  • Designed around the real friction: trust, scope clarity and getting paid
02 — The hard part

The two-sided cold-start problem

Every marketplace faces the same chicken-and-egg problem: clients won’t come without providers, and providers won’t list without clients. So the product had to feel useful to each side on its own, before real liquidity exists.

For providers that meant genuinely good profiles and a real inbox of leads; for clients, enough discovery and filtering to trust who they were hiring. Each side had to feel the platform working for them from day one.

  • Rich provider profiles — services, portfolio, availability — that stand alone as a presence
  • Search and filtering so clients can shortlist by service, budget and date
  • A messaging inbox that gives providers a reason to show up before booking exists
03 — Connect & agree

Turning a conversation into a booking

The heart of the platform is the conversation between the two sides. A client and a provider need to talk through scope, dates and price — and then lock it into something both can rely on.

In-app messaging runs over WebSockets so it feels instant, and the thread carries the structured details — the service, the date, the agreed price — so a chat turns cleanly into a booking instead of a vague verbal promise.

  • Real-time in-app messaging between clients and providers over WebSockets
  • Scheduling tied to provider availability so double-bookings can’t happen
  • Booking details agreed in-thread, not lost in free-text chat
04 — Book & pay

Payments that make both sides safe

Money is where trust in a marketplace is won or lost. The client wants to know the provider will deliver; the provider wants to know they’ll actually get paid.

Stripe handles booking payments inside the platform, so the whole engagement — quote, booking, payment, delivery — lives in one auditable place instead of an off-platform bank transfer that neither side can rely on.

  • Integrated Stripe checkout for in-platform booking payments
  • The full engagement — from first message to paid booking — kept on-platform
  • A single record of what was agreed, booked and paid
05 — Build & outcome

One platform, both sides, end to end

Next.js + TypeScript on PostgreSQL, with WebSockets for real-time messaging and Stripe for payments — a single product serving two very different users out of one codebase.

The result is a marketplace where planning an event stops being a scavenger hunt across email and phone: clients and providers find each other, agree, book and pay in one place, end to end.

// the result
One platformBoth sides
Real-timeClient ↔ provider messaging
In-appBook & pay

Got a manual workflow worth automating?

This kind of focused, end-to-end tool is exactly what I like building. Let's talk about yours.