My calendar I
A booking [start, end) holds start but stops just before end, so it is stored as the closed Range(start, end - 1); then the usual overlap check is right, and back-to-back events don't clash.
Booked events sit in the top lane, the new request under them. A clash turns both red and books nothing; an accepted request slides up into the calendar.