Three contract models in one place: hourly tiers with optional overage, flat / per-class fees, and a ledger of every overage charge.
Three tabs: Hourly plans / Flat & per-class fees / Overage charges.
Create subscription plans (e.g. "10h / month — $300"). For each plan, choose either: Block further bookings once the monthly limit is reached, OR Allow overage and charge per extra hour ($/hour rate you set).
Three flavours on the same tab: Flat monthly (fixed amount each month), Per class (rate × number of classes taught), or Per hour (rate × actual class minutes that month — designed for ad-hoc renters who use the room as-needed). By default these settle manually via the monthly invoice report; Per class and Per hour renters can instead be switched to pay at the moment they book (next step).
On the instructor's edit page under Flat / per-class, turn on "Collect payment when they book". The renter saves a card once (they're prompted on their Room Bookings page), and from then on each ONE-OFF booking — a single room booking or a one-time class — charges that card immediately (a 90-minute booking at $45/hour charges $67.50 on the spot). If the card is declined the booking is NOT created, and until they save a card they can't make one-off bookings at all. Recurring/weekly series are the exception: those aren't charged at booking (that would bill months of rent at once) — they stay on the monthly report as usual. Anything paid at booking is automatically excluded from the monthly report so nobody is billed twice. And if a paid booking is later cancelled — by the renter, by you, or by a studio closure — that session's rent is refunded to their card automatically.
See every overage with status (pending / charged / failed). Waive any one of them — if it's already charged, the refund happens automatically. If the overage is sitting on a draft invoice, waiving it lowers the draft's total automatically; if it's already on a Sent invoice, waiving is blocked — void that invoice first, waive the charge, then re-generate. Paid invoices are unaffected (use a Stripe refund instead). Waiving requires the "Instructor Contracts & Membership Tiers" manager permission.
On the instructor's edit page, open the Contract section and choose No contract, Hourly plan, or Flat / per-class fee. They're billed monthly through Stripe.
Once assigned, the instructor's profile page shows a Contract Hours card: a stacked progress bar (blue for classes, teal for room bookings, amber for hours held from cancelled sessions) against the contracted amount, a breakdown table, and mini bars for the previous three months. Use the arrows to browse past months. The total now matches what the instructor sees on their own Room Plan and what month-end overage actually bills.
Below Change history, the Bookings card lists this instructor's classes and room bookings together. It opens on Upcoming — everything they have booked from today onwards, however far ahead — and one click on Past walks back through their whole history, newest month first. Cancelled sessions are kept in the list, each with an attribution badge naming who cancelled it ("By Jamie Bischoff"; older cancellations without an audit record fall back to "By admin" / "By teacher"), and those whose hours are still held show a Return hours button right there, so you can reconcile an instructor's count without opening each class. The current month's class and room totals stay pinned to the top of the card whichever range you're looking at.