- Shipped
- August 25, 2026 at 11:31 PM UTC
- Author
- kamo
- Commit
- 4b316b3
Three things, all about the same layer. WHO SEES IT. The availability toggle was shown to everybody. Declaring hours is only meaningful for somebody a webinar type actually lists as a presenter — nobody is one by default, and hours declared by anyone else could never be picked by a soul. The toggle, the sidebar panel and the grid gestures are now all withheld unless GET /api/webinar/presenting comes back non-empty, and the hook starts in a loading state so the control never appears on first paint and then vanishes. It fails closed: an error hides the layer rather than offering an editor whose hours may belong to no session. WHAT IT MEANS. A new sidebar panel lists every window with edit and delete, and carries the explanation. That copy is the point of the panel: availability is the rare surface where the control is easy and the CONCEPT is not, and somebody added as a presenter last week has no idea whether marking an hour commits them to a meeting, blocks their calendar, or cancels something. It is written for a person who has never seen this system — that marking hours schedules nothing, that a booking becomes a real meeting they are told about, that existing meetings block it automatically, and that removing hours never cancels anything already booked. It also names the sessions they can be booked for, because a member may not know what they were added to. DIRECT MANIPULATION. Drag down empty grid to mark hours; drag a block's top or bottom edge to change it. Shared by the day and week views through one hook so they cannot drift. Whole hours, because the grid's rows ARE hours — that is the contract it keeps with the now spine — so a create opens the editor pre-filled rather than saving silently, and half past stays the editor's job. A resize commits straight through: the member has just expressed the hours with their hands and can see the result. The row arithmetic is separated out and tested, because two of its three cases are off-by-ones that read as grid bugs and the third is a data trap: an end at or before its start is how this platform stores an OVERNIGHT window, so a gesture must never produce one. A drag to the bottom of the grid ends at 23:59, and dragging one edge past the other collapses rather than inverting. Also renames the settings tab to Scheduled Webinars, in the tab, the settings menu and the launchpad card. Its ?tab= value becomes scheduled-webinars and old links are rewritten rather than aliased, so the URL a member goes on to share is the current one — without that they would land on Topics with the address bar still claiming otherwise, which is the documented failure mode for changing a tab key here. The menu entry points at the tab's own title key so the two cannot drift apart across 22 locales.