Module 12 · Intervals · My Calendar I

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.