A message becomes a calendar entry from the menu that is already on it: the subject becomes the title, the body becomes the description, and the editor opens for the reader to set when it happens.
What it does
Where — the row context menu, a message's ⋮, and on a phone the ⋮ of a held row (there is no right-click there). Hidden entirely where the account has no calendar.
When — the next half hour, for an hour. The date is the one thing the message cannot supply: "due on the 14th" in an invoice is not a date worth guessing at, and a wrong guess quietly scheduled is worse than none. Always forward, so the start is not already in the past by the time Create is pressed.
What is copied — the plain-text body, or the HTML read as text. Capped at 5000 characters with the cut marked: a newsletter is a message too, and its whole body would be stored on the event, synced everywhere, and shown in a three-row textarea.
One message — the list menu acts on the selection everywhere else, but there is no sensible event to make out of five mails; the mobile entry appears only when exactly one row is held.
Notes
Called Create event…, not "appointment" as the issue put it. It opens the New event dialog, and every catalogue already has its settled noun for that — Termin, événement, 日程. Translated in all nine languages.
The editor lives inside CalendarView and the reader is in the mail view when they ask, so the draft waits in the calendar store until that view mounts and takes it — once, or it would reopen on every later visit. It seeds a form rather than an event: still New event, still has to be pressed.
Verified
npm run typecheck, npm test (481 web + 109 server), i18n:check. Driven by hand against the mock at desktop and phone width: both menus, the seeded editor, an event created, and the mobile entry appearing at one selected row and gone at 42.
Closes #167.
A message becomes a calendar entry from the menu that is already on it: the subject becomes the title, the body becomes the description, and the editor opens for the reader to set when it happens.
### What it does
- **Where** — the row context menu, a message's ⋮, and on a phone the ⋮ of a held row (there is no right-click there). Hidden entirely where the account has no calendar.
- **When** — the next half hour, for an hour. The date is the one thing the message cannot supply: "due on the 14th" in an invoice is not a date worth guessing at, and a wrong guess quietly scheduled is worse than none. Always forward, so the start is not already in the past by the time Create is pressed.
- **What is copied** — the plain-text body, or the HTML read as text. Capped at 5000 characters with the cut marked: a newsletter is a message too, and its whole body would be stored on the event, synced everywhere, and shown in a three-row textarea.
- **One message** — the list menu acts on the selection everywhere else, but there is no sensible event to make out of five mails; the mobile entry appears only when exactly one row is held.
### Notes
- Called *Create event…*, not "appointment" as the issue put it. It opens the New event dialog, and every catalogue already has its settled noun for that — Termin, événement, 日程. Translated in all nine languages.
- The editor lives inside `CalendarView` and the reader is in the mail view when they ask, so the draft waits in the calendar store until that view mounts and takes it — once, or it would reopen on every later visit. It seeds a form rather than an event: still New event, still has to be pressed.
### Verified
`npm run typecheck`, `npm test` (481 web + 109 server), `i18n:check`. Driven by hand against the mock at desktop and phone width: both menus, the seeded editor, an event created, and the mobile entry appearing at one selected row and gone at 42.
**Merged** 2026-08-31 as coffey-labs/ihasmail@16308431b856
<sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #167.
A message becomes a calendar entry from the menu that is already on it: the subject becomes the title, the body becomes the description, and the editor opens for the reader to set when it happens.
What it does
Notes
CalendarViewand the reader is in the mail view when they ask, so the draft waits in the calendar store until that view mounts and takes it — once, or it would reopen on every later visit. It seeds a form rather than an event: still New event, still has to be pressed.Verified
npm run typecheck,npm test(481 web + 109 server),i18n:check. Driven by hand against the mock at desktop and phone width: both menus, the seeded editor, an event created, and the mobile entry appearing at one selected row and gone at 42.Merged 2026-08-31 as coffey-labs/ihasmail@16308431b8
Rebuilt from: git history, session transcript.