- Shipped
- August 10, 2026 at 7:17 PM UTC
- Author
- kamo
- Commit
- cc76f28
Ten identically weighted outlined fields in a column, in the order the columns happen to sit in the table: title, description, location, calendar, all-day, start, end, colour, private, recurring. Nothing signalled that the title and the times are the whole job and the rest is usually left alone. Reordered by what is actually decided, and given hierarchy to match: - The title is set like a heading being typed — large, borderless, autofocused — because it is the one thing filled in every single time. - When becomes the hero block: the two times in mono, with the duration derived and shown live between them, and 15m/30m/1h/2h presets that set the end from the start. That is how a meeting is actually decided ("make it an hour"), and the pair of datetime inputs never answered it. - Calendar and colour become chips and swatches instead of dropdowns. There are rarely more than a handful of either, the colour is as much the thing being chosen as the name, and a dropdown of colour *names* made you read a word to pick a swatch. The duration is also the validation. When the end precedes the start the chip turns red and reads a negative value — "−30m" states the problem more precisely than a sentence, needs no new translation key, and is right in every language. Save is disabled on that and on an empty title, both of which are already visible on the form. Cmd/Ctrl+Enter saves. This dialog is opened, filled and dismissed dozens of times a day. Fixes a real bug while here: the time fields were populated with toISOString(), which is UTC, into inputs that expect local wall time. In California the dialog opened offering a start seven hours away, and any event created without touching the field landed at the wrong hour.