Why This Was Hard
The calendar is the easy part. What makes studio software hard is that the money has to stay correct while the schedule moves underneath it. "Cancel the charge" means two different operations depending on whether money has already left the member's account: an upcoming transaction is voided, an executed one is refunded, and a refund can be line-item-level on an order or standalone on a transaction. Freezing a membership does not just pause billing, it shifts every future package instance forward by the length of the freeze. Booking someone into a paid class without a package does not create a comp, it creates a debt that has to be settled at the next sale. Get any of these subtly wrong and the studio finds out from its accountant, months later.
The second difficulty is surface count. A studio owner on a laptop, a member on a phone, an instructor on a tablet, an unattended kiosk in the lobby and a partner booking platform all need to perform overlapping subsets of the same operations. The usual outcome is authorization logic smeared across controllers, with each client re-deriving what it thinks its user is allowed to do, and a permissions bug that everyone knows about and nobody wants to touch.
The third is age. The API's first commit is from August 2018 and the newest frontend's is from February 2026, and both were committed to in the same week. Every decision here had to be one that could be made incrementally, on a system that was already carrying a live customer base, with no cutover weekend available.