Set up instructor contracts (hourly, flat, overage)

Three contract models in one place: hourly tiers with optional overage, flat / per-class fees, and a ledger of every overage charge.

1

Open Settings → Contracts

Three tabs: Hourly plans / Flat & per-class fees / Overage charges.

2

Hourly plans

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).

3

Flat & per-class fees

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).

4

Collect payment when they book (optional, per renter)

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.

5

Overage charges ledger

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.

6

Assign to instructors

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.

7

Monitor usage on the instructor profile

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.

8

Audit what was booked and cancelled

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.

Tips
  • Hours are tracked in 15-minute increments automatically.
  • Held cancellations count: a cancelled session keeps counting against the allowance until an admin returns the hours, so the Contract Hours total can be higher than the classes actually taught. The amber "Held (cancelled)" line shows how much — return those hours (on the cancelled tile or the profile's Bookings card) to bring the count down.
  • Looking for a booking you just made and not seeing it? Check the range. The Bookings card opens on Upcoming, so a session earlier today or last week is under Past. The card covers every month either way — you don't have to be in the right month to find it.
  • When an instructor books a room that would put them over their tier, they get a confirmation modal saying "This booking will cost you $X in overage — proceed?" (explicit consent required).
  • At month-end, overage is auto-charged to their card on file via Stripe.
  • Instructors see "This month: 12h used of 10h, estimated overage $50" on their Room Plan page (Instructor → Room Plan).
  • Per hour vs. Hourly plan: the new "Per hour" option in Flat & per-class is for renters with no monthly commitment ($X × hours taught, billed manually). "Hourly plan" is a Stripe subscription with a fixed monthly hour pool — pick that one when the instructor has a predictable monthly schedule.
  • Per hour now includes ad-hoc room bookings (instructor-driven room rentals that don't belong to a class) in addition to class session minutes — the monthly report sums both.
  • Invoice discounts: open a draft invoice from Settings → Invoices (under Instructors) and click "Apply code" to subtract a percent or fixed amount. The code is recorded as a redemption when you click "Send".
  • Instructors can pay contract invoices online: once you Send an invoice, the instructor sees it under Instructor → Invoices (NOT under Room Plan — that page is only for the monthly room-booking tier subscription) and can pay the exact amount by card. Their sidebar shows an unpaid-invoice count badge so the bill is hard to miss, and the invoice email also includes a "Pay invoice online" link.
  • Once an instructor pays an invoice online it is marked Paid automatically; you can no longer manually mark it paid (this prevents double-charging). You can still manually mark Paid any invoice the instructor settles offline (bank transfer, cash).
  • 80% alert: instructors who pass 80% of their monthly hour pool get an automatic heads-up email with remaining hours and (when applicable) the projected overage charge. Fires once per month per instructor.
  • No double-billing for Stripe-subscribed tiers: when an instructor's membership tier is already auto-charged via a Stripe subscription, the monthly invoice shows "auto-billed via Stripe" for the tier line instead of an amount, and the tier fee is excluded from the invoice total.
  • No double-billing for auto-charged overage: any overage that was already auto-charged to the instructor's card at month-end (status "charged") is left off the monthly invoice — it is not billed again. Overage that is still uncollected (a "failed" auto-charge, or one waiting to be charged) is included on the invoice so you can still collect it.
  • Re-generating a month never touches settled invoices: if an invoice for that instructor and period is already Sent or Paid, generation skips it (reported as "already sent/paid") instead of rolling it back to draft.
  • Changing a tier mid-subscription: when you switch an instructor to a different tier while they have an active Stripe subscription, Klasly automatically re-prices the subscription — the new price takes effect at their next renewal (no mid-cycle proration). Removing the tier entirely cancels the subscription immediately so they aren't billed again.
  • Invoice statuses are strict on purpose: only a Sent invoice can be marked Paid (send the draft first), and a Paid invoice can't be voided — refund through Stripe instead. This keeps the settlement record honest.