3οΈβ£The matching rule
A vendor is shown only if every condition holds:
- Distance β€ the customer's radius and β€ the vendor's own travel radius.
- Working hours β the event fits entirely inside that weekday's window.
- No overlap with an existing booking, including setup and teardown on both sides.
- Minimum hours for that vendor is met.
- Category requested and occasion type supported.
- Final price β€ the per-vendor cap.
- Freshness β availability confirmed within the last 7 days, otherwise flagged "needs reconfirming".
The two fields everyone forgets, and they are what break the product: setup time (a DJ playing at 6:00 leaves home at 4:30) and freshness ("available" from two months ago is a guess, not data).
πBooking states
SentRequest delivered to the vendor, awaiting reply
ConfirmedVendor accepted β the slot locks on their calendar automatically
DeclinedAlternatives available at the same time are offered
ExpiredNo answer within 2 hours β moves to the next option
Every confirmation writes back to vendor availability. Without that, two customers book the same DJ for the same hour.