Reminders
Calendaria notifies users before scheduled note events occur. You configure reminders per note, and each note supports four notification types.
Configuration
Section titled “Configuration”You configure reminders in the note sheet under the Reminder fieldset.
| Field | Description |
|---|---|
| Type | Notification method: none, toast, chat, or dialog |
| Targets | Who receives the reminder |
| Notify Before | How far ahead of the event to trigger |
| Increment | Unit applied to Notify Before: hour, day, week, month, or year |
| Users | Specific user selection when the target is “specific” |
The Notify Before input enforces a minimum of 0, with no maximum. A value of 0 triggers the reminder at event time.
Increment
Section titled “Increment”The Increment selector sets the unit for the Notify Before value. You can choose hour, day, week, month, or year. The reminder fires that far ahead of the event, with each unit measured against the active calendar’s own definitions for hours per day, days per week, days per month, and days per year. The reminder message reads in the chosen unit, so a Notify Before of 1 with the week increment reads “1 week”.
Selecting none as the type disables the reminder and its other inputs.
Defaults
Section titled “Defaults”| User Type | Default Targets |
|---|---|
| GM users | GM |
| Non-GM users | Author |
Notification types
Section titled “Notification types”Disables reminders for this note. The other reminder fields are disabled when selected.
A brief popup in the top-center of the screen. It auto-dismisses after a few seconds.
A message posted to the chat log with a link to open the note. It can be whispered to specific users based on the target settings.
Dialog
Section titled “Dialog”A modal dialog requiring acknowledgment. It includes “Open Note” and “Dismiss” buttons.
Target options
Section titled “Target options”| Target | Recipients |
|---|---|
all | All users |
gm | Only GM users |
author | Only the note creator |
viewers | Users with at least Observer permission on the note |
specific | Manually selected users |
How reminders work
Section titled “How reminders work”The ReminderScheduler class monitors world time and triggers reminders.
- It runs only on the primary GM client, using
CalendariaSocket.isPrimaryGM(). - It checks for pending reminders every 60 game seconds as time advances.
- It compares the current time against each note’s start time minus the offset.
- It fires reminders when the current time falls within the reminder window, after the offset time and before the event time.
- It tracks fired reminders using occurrence-based keys (
noteId:year-month-day) to support recurring events. - It clears the fired reminders list when the date changes.
- It resets all state and re-checks immediately if time moves backwards.
Recurring events
Section titled “Recurring events”For recurring notes, including those with conditions, the scheduler checks whether the event occurs today, or on the computed reminder day N days ahead. N (daysBefore) is derived from the reminder offset and the event’s time of day. With larger offsets that day can be more than one day ahead, so it is not necessarily tomorrow.
For all-day events occurring today, the scheduler triggers the reminder when the current time is at or before the offset minutes, or immediately when the offset is zero. The scheduler handles the next-day case through the generic recurring-match-on-reminder-day check, not a tomorrow-specific midnight-window rule.
Multi-day events
Section titled “Multi-day events”For a non-recurring multi-day event, the scheduler treats the event time as midnight (eventMinutes=0) on in-range days after the first day.
- With a nonzero offset, the reminder window (
currentMinutes < 0) is unsatisfiable, so no reminder fires on those subsequent days. - With a zero offset, the reminder fires at the start (midnight) of each spanned day.
- For timed events, the reminder fires before the start time on the first day only.
Silent notes
Section titled “Silent notes”Notes with silent: true are skipped by the reminder system.
Multiplayer synchronization
Section titled “Multiplayer synchronization”For toast and dialog notification types, the primary GM broadcasts the reminder to all targeted users via socket. Each client then displays the notification locally. Chat reminders are created as ChatMessage documents and sync automatically.
For developers
Section titled “For developers”See API Reference and Hooks.