CALENDAR SETS: named groups of calendars, in the Calendar tab and over CalDAV (grill) #543

Open
opened 2026-09-30 17:32:18 +00:00 by kayg · 3 comments
Owner

Owner request (2026-09-30)

"please file a 'Calendar Sets' feature - which should work both when navigating our own calendars and when exposing calendars via CalDAV"

Idea: a Calendar Set is a named group of calendars that the User shows together. Examples: "Work" = Work area + team shared calendar; "Personal" = Aayushy + Family + Birthdays. Fantastical and BusyCal have this feature. Switching the set changes which calendars the Calendar tab shows, in one step.

Scope (to confirm in a grill; do not build before the owner answers):

  1. Members. Every kind of calendar: area calendars (DESIGN §46), Tasks/Reminders lists, subscribed webcal calendars, Connected Account calendars (#407), and calendars shared with the User (#479).
  2. In calternal:
    • The Calendar sidebar shows a set switcher as a sidebar sub-view (chrome rules: no pill bar).
    • There is an "All calendars" default and a shortcut to cycle sets (#542 registry).
    • Each set is deep-linkable with Copy link (DESIGN §33, stable set ID).
    • Search and the agenda follow the active set. Is that the default, with an easy "search all"?
  3. Over CalDAV: options, with the recommendation first:
    • (a) Per-app-password set: the App Password (Sync with Your Devices preset, #412) can be limited to one set, so a work phone only ever sees Work calendars. This is server-side, so it is safe.
    • (b) One CalDAV principal/home per set: each set shows as its own account in Apple Calendar.
    • (c) No CalDAV change; sets are only a view in calternal.
      The owner asked for CalDAV support, so (c) is out.
  4. Automatic sets: can a set switch on by time or location (Location #391: "Work" on weekdays 9–6 or at the office)? Is it opinionated default ON with an easy override, or later?
  5. Parity: sets can be created, edited and switched over the API, CLI and MCP (#484).
  6. Storage: a plain file under the User's Home settings, synced like other preferences (single writer: the server).

Tests:

  • The two-User isolation matrix: a set never leaks another User's calendar.
  • A CalDAV client with a set-limited password: PROPFIND/REPORT/sync-collection only list the member calendars, and writes to others get 403/404.
  • An e2e that switches sets in the Calendar tab and asserts the visible events.
  • Real Apple Calendar on the macOS VM: a set-limited account shows only the member calendars.
## Owner request (2026-09-30) "please file a 'Calendar Sets' feature - which should work both when navigating our own calendars and when exposing calendars via CalDAV" **Idea:** a Calendar Set is a named group of calendars that the User shows together. Examples: "Work" = Work area + team shared calendar; "Personal" = Aayushy + Family + Birthdays. Fantastical and BusyCal have this feature. Switching the set changes which calendars the Calendar tab shows, in one step. **Scope (to confirm in a grill; do not build before the owner answers):** 1. **Members.** Every kind of calendar: area calendars (DESIGN §46), Tasks/Reminders lists, subscribed webcal calendars, Connected Account calendars (#407), and calendars shared with the User (#479). 2. **In calternal:** - The Calendar sidebar shows a set switcher as a sidebar sub-view (chrome rules: no pill bar). - There is an "All calendars" default and a shortcut to cycle sets (#542 registry). - Each set is deep-linkable with Copy link (DESIGN §33, stable set ID). - Search and the agenda follow the active set. Is that the default, with an easy "search all"? 3. **Over CalDAV:** options, with the recommendation first: - **(a) Per-app-password set:** the App Password (Sync with Your Devices preset, #412) can be limited to one set, so a work phone only ever sees Work calendars. This is server-side, so it is safe. - (b) One CalDAV principal/home per set: each set shows as its own account in Apple Calendar. - (c) No CalDAV change; sets are only a view in calternal. The owner asked for CalDAV support, so (c) is out. 4. **Automatic sets:** can a set switch on by time or location (Location #391: "Work" on weekdays 9–6 or at the office)? Is it opinionated default ON with an easy override, or later? 5. **Parity:** sets can be created, edited and switched over the API, CLI and MCP (#484). 6. **Storage:** a plain file under the User's Home settings, synced like other preferences (single writer: the server). **Tests:** - The two-User isolation matrix: a set never leaks another User's calendar. - A CalDAV client with a set-limited password: PROPFIND/REPORT/sync-collection only list the member calendars, and writes to others get 403/404. - An e2e that switches sets in the Calendar tab and asserts the visible events. - Real Apple Calendar on the macOS VM: a set-limited account shows only the member calendars.
Author
Owner

Owner decisions, grill round 1 (2026-10-01): members = area calendars, Tasks/Reminders lists, webcal subscriptions, Connected Account calendars and calendars shared with the User; a calendar can be in many sets; "All calendars" is the default set. CalDAV: an App Password can be limited to one set (install several profiles, one per set). The active set filters the grid, agenda/Today and Analytics (with an off switch); global search covers everything with a one-tap set chip; the active set is remembered per device. Manual switching only (shortcut + quick switcher); automatic switching moves to Focus Modes (#574).

**Owner decisions, grill round 1 (2026-10-01):** members = area calendars, Tasks/Reminders lists, webcal subscriptions, Connected Account calendars and calendars shared with the User; a calendar can be in many sets; "All calendars" is the default set. **CalDAV: an App Password can be limited to one set** (install several profiles, one per set). The active set filters the grid, agenda/Today and Analytics (with an off switch); global search covers everything with a one-tap set chip; the active set is remembered per device. **Manual switching only** (shortcut + quick switcher); automatic switching moves to Focus Modes (#574).
Author
Owner

Owner decisions, grill round 2 (2026-10-01): sets are managed from both the Calendar sidebar (switch, create, edit: refer to Fantastical / BusyCal calendar sets) and Settings → Calendars → Sets, with the same editor. A set-limited App Password limits calendars and reminder lists only; Contacts/Notes/Mail are unaffected (whole-app filtering → Focus Modes #574). Membership is live: adding/removing a calendar reaches set-limited devices on their next sync. The owner says "make sure it actually works that way": prove it with a real Apple Calendar/Reminders run on the macOS VM.

**Owner decisions, grill round 2 (2026-10-01):** sets are managed from **both** the Calendar sidebar (switch, create, edit: refer to **Fantastical / BusyCal** calendar sets) and Settings → Calendars → Sets, with the same editor. A set-limited App Password limits **calendars and reminder lists only**; Contacts/Notes/Mail are unaffected (whole-app filtering → Focus Modes #574). Membership is **live**: adding/removing a calendar reaches set-limited devices on their next sync. The owner says "make sure it actually works that way": prove it with a real Apple Calendar/Reminders run on the macOS VM.
Author
Owner

Static audit evidence for DESIGN §51 Calendar Sets:

The Calendar schema currently has account and calendar records only: crates/plugins/calendar/migrations/0001_calendar.sql:1-24. Calendar settings list connected accounts and external calendars in apps/web/src/routes/settings/calendars/CalendarsSection.svelte:404-436, with no Sets model or editor found in the source tree.

Expected: add stable Calendar Set identities, membership, active-set preference and shared editor in the Calendar sidebar and Settings. Regression idea: filter Calendar, Agenda, Today and Analytics by one Set, then verify a set-limited CalDAV credential cannot read or write a non-member calendar.

Static audit evidence for DESIGN §51 Calendar Sets: The Calendar schema currently has account and calendar records only: crates/plugins/calendar/migrations/0001_calendar.sql:1-24. Calendar settings list connected accounts and external calendars in apps/web/src/routes/settings/calendars/CalendarsSection.svelte:404-436, with no Sets model or editor found in the source tree. Expected: add stable Calendar Set identities, membership, active-set preference and shared editor in the Calendar sidebar and Settings. Regression idea: filter Calendar, Agenda, Today and Analytics by one Set, then verify a set-limited CalDAV credential cannot read or write a non-member calendar.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#543
No description provided.