Courses and workshops now have safer payment, access, and application workflows
Course payment choices are now clearly separated into pay in full, deposit with one later balance, equal installments without a deposit, and deposit followed by balance installments. Automatic card plans require an explicit buyer authorization. When a scheduled card payment needs attention, the client gets a secure link for that exact installment; they can confirm it or replace the card without be
Course payment choices are now clearly separated into pay in full, deposit with one later balance, equal installments without a deposit, and deposit followed by balance installments. Automatic card plans require an explicit buyer authorization. When a scheduled card payment needs attention, the client gets a secure link for that exact installment; they can confirm it or replace the card without being charged the whole remaining balance. The Sessions tab remains the single place to define what each payment stage unlocks. Classes and workshops have independent selections, totals, dates, cancellation windows, late-cancellation and no-show fees, allowance forfeiture, and streaming/replay rights. Adding another linked date never books course participants automatically; eligible participants choose it themselves. Workshop Library streaming settings now support workshop-specific cameras, online capacity, automatic start/end, recording, publication, retention, and viewer access. Individual occurrences can still override those defaults. Course and Workshop Library lists now use the familiar BookingBible layout on desktop and responsive cards on smaller screens. Duplicate is available on each row as well as in bulk actions. A duplicate is an isolated draft: it keeps reusable payment/access or streaming configuration, while schedules, participants, bookings, access consumption, and old pass links stay behind. Editor failures now remain visible in a summary and move focus to the field that needs attention. This also fixes the Sentry-reported save failure caused by writing a blank custom-label value as SQL null into the non-null `labels` column. Application-gated courses can now collect applications from individuals or companies. A company must provide its name and at least one proposed participant name, with an optional note for each person. Admins review those details from the roster; accepting an application grants eligibility without automatically booking any sessions or creating fake client profiles.
Waitlist tools on your roster, honest stream status, and cancellation fixes
**Waitlists are now visible and workable everywhere.** Class cards on the Schedule and Check-in pages show how many people are waiting (for example "5 waitlist"), and every waitlisted client on a roster has an **Add to class** button that moves them straight onto the roster — with a clear confirmation if the class is already full and you want to squeeze them in anyway. You can also select several