docs: Document the new notification system

This commit is contained in:
Callum Alpass 2025-08-07 23:06:06 +10:00
parent 25e02abdec
commit 57fdf0ef00
5 changed files with 513 additions and 2 deletions

View file

@ -11,6 +11,7 @@ TaskNotes provides a system for managing tasks. You can create, edit, and organi
- **Organization**: Contexts and tags.
- **Planning**: Time estimates and recurring patterns.
- **Tracking**: Automatic creation and modification dates.
- **Reminders**: Custom notifications for tasks using relative or absolute timing.
For more detailed information, see the [Task Management](features/task-management.md) documentation.

View file

@ -51,6 +51,7 @@ Each task in TaskNotes is a Markdown file with a YAML frontmatter block that sto
- **Time Estimate**: The estimated time required to complete the task, in minutes.
- **Recurrence**: The pattern for repeating tasks, using the RRule standard.
- **Time Entries**: An array of recorded work sessions, with start and stop times.
- **Reminders**: Custom reminders to notify you before or at specific times related to the task.
You can also add your own custom fields to the YAML frontmatter, and use the **Field Mapping** feature to map them to TaskNotes' internal properties.
@ -170,21 +171,25 @@ The `scheduled` field automatically updates to show the next uncompleted occurre
```yaml
# Initial state
recurrence: "DTSTART:20250804T090000Z;FREQ=DAILY"
scheduled: "2025-08-04T09:00"
complete_instances: []
# After completing Aug 4th
recurrence: "DTSTART:20250804T090000Z;FREQ=DAILY" # unchanged
scheduled: "2025-08-05T09:00" # auto-updated to next day
complete_instances: ["2025-08-04"]
# After manually rescheduling next occurrence
recurrence: "DTSTART:20250804T090000Z;FREQ=DAILY" # unchanged
scheduled: "2025-08-05T14:30" # manually set to 2:30 PM
complete_instances: ["2025-08-04"]
# Calendar view shows:
# - Aug 5 at 2:30 PM: Next occurrence (solid border)
# - Aug 6+ at 9:00 AM: Pattern instances (dashed border)
```
@ -192,12 +197,14 @@ complete_instances: ["2025-08-04"]
### Drag and Drop Behavior
#### Dragging Next Scheduled Occurrence (Solid Border)
- **Updates**: Only the `scheduled` field
- **Effect**: Reschedules just that specific occurrence
- **Pattern**: Remains unchanged
- **Use case**: "I need to do today's workout at 2 PM instead of 9 AM"
#### Dragging Pattern Instances (Dashed Border)
- **Updates**: DTSTART time in the recurrence rule
- **Effect**: Changes when all future pattern instances appear
- **Next occurrence**: Remains independently scheduled
@ -217,6 +224,7 @@ complete_instances: ["2025-08-04", "2025-08-06", "2025-08-08"]
```
#### Automatic Scheduled Date Updates
When completing occurrences:
- The `scheduled` field automatically updates to the next uncompleted occurrence
- Uses UTC anchor principle for consistent timezone handling
@ -225,6 +233,7 @@ When completing occurrences:
### Flexible Scheduling
#### Next Occurrence Independence
The next scheduled occurrence can be set to any date, including:
- **Before DTSTART**: Schedule the next occurrence before the pattern officially begins
- **Outside pattern**: Schedule Tuesday's occurrence for a weekly Monday pattern
@ -273,6 +282,7 @@ TaskNotes maintains full backward compatibility:
### Advanced Configuration
#### Custom Recurrence Modal
Access advanced options through the custom recurrence modal:
- **Start date picker**: Set the DTSTART date
- **Start time picker**: Set the DTSTART time (optional)
@ -281,8 +291,205 @@ Access advanced options through the custom recurrence modal:
- **End conditions**: Until date, count limits, or never-ending
#### Time Independence
Pattern time (DTSTART) and next occurrence time (scheduled) are completely independent:
- Pattern instances can appear at 9 AM while next occurrence is at 2 PM
- Dragging pattern instances changes the pattern time for all future instances
- Dragging next occurrence only affects that specific instance
- Users have complete control over both timing aspects
- Users have complete control over both timing aspects
## Task Reminders
TaskNotes provides a reminder system that allows you to set notifications for your tasks. The reminder system uses the iCalendar VALARM specification and supports both relative reminders (based on due or scheduled dates) and absolute reminders (specific date and time).
### Reminder Types
#### Relative Reminders
Relative reminders are triggered relative to a task's due date or scheduled date. These are useful for consistent notification patterns across different tasks.
**Examples:**
- 15 minutes before due date
- 1 hour before scheduled date
- 2 days before due date
- 30 minutes after scheduled date
#### Absolute Reminders
Absolute reminders are triggered at a specific date and time, regardless of the task's due or scheduled dates. These are useful for time-sensitive notifications or follow-up actions.
**Examples:**
- October 26, 2025 at 9:00 AM
- Tomorrow at 2:30 PM
- Next Monday at 10:00 AM
### Setting Up Reminders
#### Adding Reminders to Tasks
You can add reminders to tasks through several methods:
1. **Task Creation Modal**: When creating a new task, use the reminder field to access the reminder interface
2. **Task Edit Modal**: Edit existing tasks and manage their reminders
3. **Task Cards**: Click the bell icon on any task card to access quick reminder options
4. **Context Menu**: Right-click the reminder field for quick access to common options
#### Quick Reminder Options
The reminder context menu provides quick access to common reminder patterns:
**Before Due Date:**
- 5 minutes before
- 15 minutes before
- 1 hour before
- 1 day before
**Before Scheduled Date:**
- 5 minutes before
- 15 minutes before
- 1 hour before
- 1 day before
These quick options are only available when the task has the corresponding due or scheduled date set.
#### Reminder Modal
For advanced reminder management, use the Reminder Modal which provides:
- **Form-based reminder creation** with validation and real-time preview
- **Multiple reminder management** for complex notification needs
- **Custom descriptions** for personalized reminder messages
- **Visual indicators** showing task context (due date, scheduled date)
- **Editing and deletion** of existing reminders
### Reminder Data Format
Reminders are stored in the task's YAML frontmatter as an array using the following format:
#### Relative Reminder Structure
```yaml
reminders:
- id: "rem_1678886400000_abc123xyz"
type: "relative"
relatedTo: "due"
offset: "-PT15M"
description: "Review task details"
```
#### Absolute Reminder Structure
```yaml
reminders:
- id: "rem_1678886400001_def456uvw"
type: "absolute"
absoluteTime: "2025-10-26T09:00:00"
description: "Follow up with client"
```
#### Field Descriptions
- **id**: Unique identifier for UI management and updates
- **type**: Either "relative" or "absolute"
- **relatedTo** (relative only): Anchor date - either "due" or "scheduled"
- **offset** (relative only): ISO 8601 duration format (negative for before, positive for after)
- **absoluteTime** (absolute only): Full ISO 8601 timestamp
- **description** (optional): Custom notification message
### Visual Indicators
#### Task Card Bell Icons
Tasks with reminders display a bell icon on their task cards:
- **Solid bell**: Task has active reminders
- **Clickable**: Opens the reminder context menu for quick management
- **Positioned**: Properly spaced with other task indicators (priority, status, etc.)
#### Reminder Context Information
When managing reminders, the interface displays relevant task context:
- Current due date (if set)
- Current scheduled date (if set)
- Existing reminders count
- Task title for reference
### Default Reminders
TaskNotes supports configuring default reminders that automatically apply to new tasks. This feature eliminates the need to manually add common reminders to every task.
#### Configuring Default Reminders
Default reminders are configured in the TaskNotes settings under "Task Creation Defaults":
1. Navigate to Settings → TaskNotes → Task Defaults
2. Scroll to the "Default Reminders" section
3. Use the form to add new default reminders
4. Specify reminder type, timing, and optional descriptions
#### Default Reminder Application
Default reminders automatically apply to:
- **Manual task creation** through the task creation modal
- **Instant conversion** of existing content to tasks
- **Natural language task creation** using the parser
#### Default Reminder Examples
Common default reminder configurations:
- 15 minutes before due date (for all tasks with due dates)
- 1 hour before scheduled date (for time-sensitive tasks)
- 1 day before due date (for project deadlines)
- Custom absolute reminders for recurring processes
### Integration with Task Workflows
#### Task Creation Integration
Reminders integrate with all task creation workflows:
- Default reminders apply automatically during creation
- Additional reminders can be added during the creation process
#### Task Editing Integration
The task editing process provides full reminder management:
- View all existing reminders
- Add, edit, or remove individual reminders
- Quick access through context menus
- Real-time validation and preview
#### Calendar View Integration
Reminders work alongside calendar features:
- Visual reminder indicators on task cards in calendar views
- Quick reminder management through calendar context menus
- Compatibility with drag-and-drop scheduling
### Field Mapping Support
The reminder system integrates with TaskNotes' field mapping functionality:
- **Custom Property Names**: Map reminders to custom frontmatter property names
- **Vault Compatibility**: Adapt to existing vault structures and naming conventions
- **Migration Support**: Maintain compatibility when changing field mappings
### Technical Implementation
#### iCalendar VALARM Compliance
TaskNotes reminder implementation follows the iCalendar VALARM specification:
- Standard duration formats (ISO 8601)
- Proper trigger mechanisms for relative and absolute reminders
- Compatible data structures for interoperability
#### Performance Considerations
The reminder system is designed for efficiency:
- Lazy loading of reminder data
- Minimal impact on task loading performance
- Efficient storage in YAML frontmatter format

View file

@ -24,7 +24,7 @@ The plugin is built around several key principles:
TaskNotes includes the following capabilities:
**Task Properties**: Each task can include a title, status, priority, due date, scheduled date, contexts, tags, time estimate, and recurrence pattern. You can also add custom fields.
**Task Properties**: Each task can include a title, status, priority, due date, scheduled date, contexts, tags, time estimate, recurrence pattern, and reminders. You can also add custom fields.
**Time Tracking**: A time tracking feature allows you to record the amount of time that you spend on tasks. This data is stored in the task's frontmatter as time entries with start and stop times.

84
docs/releases/3.18.0.md Normal file
View file

@ -0,0 +1,84 @@
# TaskNotes 3.18.0
## New Features
### Task Reminders System
A complete reminder system has been added to TaskNotes, providing iCalendar VALARM-compliant reminder functionality.
**Core Features:**
- Support for both relative reminders (e.g., "15 minutes before due date") and absolute reminders (specific date/time)
- Visual reminder indicators on task cards with clickable bell icons
- Integration with task creation and editing workflows
**User Interface:**
- **Reminder Modal**: Modal for managing task reminders with form validation and real-time preview
- **Reminder Context Menu**: Quick access to common reminder options (5min, 15min, 1hr, 1day before due/scheduled dates)
- Reminder management accessible from task creation modal, edit modal, and task cards
**Default Reminders:**
- Configure default reminders that automatically apply to new tasks
- Support for multiple default reminders per task type
- Applies to both manual task creation and instant conversion workflows
### Property-Based Task Identification
Tasks can now be identified using frontmatter properties instead of requiring tags.
- Configure property name and value for task identification (e.g., `categories: [[Tasks]]`)
- Full backward compatibility with existing tag-based workflows
- Addresses modern Obsidian property-based vault organization patterns
*Thanks to @mdbraber for the feature request (#340)*
### Enhanced Saved Views
- Clicking an active saved view now clears all filters, providing quick access to unfiltered task list
- Preserves sort and group settings while resetting filters
*Thanks to @oldjove for the suggestion (#351)*
### Parent Note as Project Option
- New setting to automatically use parent note as project during instant task conversion
- Useful for users who organize tasks within project-specific notes
- Merges with existing default projects to avoid duplicates
*Thanks to @FindingJohnny for the feature request (#348)*
## Bug Fixes
### ICS Calendar Integration
- **Fixed recurring event exceptions**: Properly handle EXDATE properties and RECURRENCE-ID for modified instances
- **Eliminated duplicate events**: Resolved issue where deleted or rescheduled recurring events from external calendars still appeared
*Thanks to @robmikulec for reporting the recurring events issue (#342)*
### Settings Persistence
- **Fixed settings reset during updates**: Prevent user configuration loss when plugin updates introduce new default settings
- Apply deep merge strategy to preserve customizations in nested configuration objects
## Improvements
### User Interface
- Reminder modal uses consistent design patterns with task creation/edit modals
- Fixed task card icon overlap issues with proper spacing for multiple indicators
### Code Quality
- Added unit test coverage for new reminder functionality
- Improved type safety with proper TypeScript interfaces for reminder data structures
- Improved error handling and user feedback across reminder operations
## Technical Details
### Data Model Changes
- Added optional `reminders` array field to TaskInfo interface
- Extended field mapping support for custom reminder property names
- Enhanced cache system to include reminder data in task extraction

View file

@ -24,6 +24,225 @@ This feature is recommended for users who prefer a minimalist approach to their
You can set the **Default Status** and **Default Priority** for new tasks, as well as the **Default Due Date** and **Default Scheduled Date**. You can also specify default **Contexts** and **Tags** that will be automatically added to new tasks.
## Default Reminders
TaskNotes supports configuring default reminders that automatically apply to new tasks. This eliminates the need to manually add common reminders to every task and ensures consistent notification patterns across your task management workflow.
### Configuring Default Reminders
Default reminders are configured in the TaskNotes settings under the "Task Creation Defaults" section:
1. Open TaskNotes settings (Settings → TaskNotes)
2. Navigate to the "Task Defaults" tab
3. Scroll to the "Default Reminders" section
4. Use the provided form to add new default reminders
### Default Reminder Types
You can configure both types of reminders as defaults:
#### Relative Default Reminders
Relative default reminders are triggered relative to a task's due date or scheduled date:
- **Anchor Date**: Choose between "due date" or "scheduled date"
- **Timing**: Specify the offset (e.g., 15 minutes, 1 hour, 2 days)
- **Direction**: Choose "before" or "after" the anchor date
- **Description**: Optional custom reminder message
**Example Configurations:**
```
15 minutes before due date
1 hour before scheduled date
2 days before due date
30 minutes after scheduled date
```
#### Absolute Default Reminders
Absolute default reminders are triggered at specific dates and times:
- **Date**: Set the specific date for the reminder
- **Time**: Set the specific time for the reminder
- **Description**: Optional custom reminder message
**Example Configurations:**
```
Every Monday at 9:00 AM (for weekly planning)
October 26, 2025 at 2:30 PM (for project deadline)
Tomorrow at 10:00 AM (for follow-up tasks)
```
### Default Reminder Application
Default reminders automatically apply to new tasks created through:
#### Manual Task Creation
- Tasks created using the Task Creation Modal
- Default reminders are added automatically based on available anchor dates
- Additional reminders can be added during the creation process
#### Instant Conversion
- Tasks created by converting existing content (checkboxes, bullet points, etc.)
- Default reminders apply based on the converted task's properties
- Respects existing due and scheduled dates from natural language parsing
#### Natural Language Task Creation
- Tasks created using the natural language parser
- Default reminders integrate with parsed task properties
- Applied after natural language processing is complete
### Managing Default Reminders
#### Adding Default Reminders
Use the form interface in settings to add new default reminders:
1. **Select Reminder Type**: Choose between "Relative" or "Absolute"
2. **Configure Timing**: Set the specific timing parameters
3. **Add Description**: Optionally add a custom reminder message
4. **Save Configuration**: Click "Add Default Reminder" to save
#### Editing Default Reminders
Default reminders can be managed through the settings interface:
- **View All Defaults**: See a list of all configured default reminders
- **Delete Defaults**: Remove unwanted default reminders
- **Modify Settings**: Edit timing, descriptions, and other parameters
### Default Reminder Examples
#### Common Workflow Patterns
**Getting Things Done (GTD) Setup:**
```
15 minutes before due date (quick review)
1 day before due date (preparation time)
```
**Time-blocking Setup:**
```
30 minutes before scheduled date (preparation)
5 minutes before scheduled date (start notification)
```
**Project Management Setup:**
```
1 week before due date (progress check)
2 days before due date (final review)
4 hours before due date (completion deadline)
```
#### Task Type Specific Defaults
**Meeting Tasks:**
```
30 minutes before scheduled date (preparation)
5 minutes before scheduled date (join notification)
```
**Deadline Tasks:**
```
1 week before due date (progress milestone)
2 days before due date (completion buffer)
4 hours before due date (final submission)
```
**Follow-up Tasks:**
```
Absolute reminder: Next Monday at 9:00 AM
Relative reminder: 1 day after due date (if not completed)
```
### Integration with Existing Settings
#### Field Mapping Compatibility
Default reminders integrate with the Field Mapping system:
- **Custom Property Names**: Map reminders to custom frontmatter property names
- **Vault Compatibility**: Adapt to existing vault structures
- **Migration Support**: Maintain compatibility when changing field mappings
#### Template Integration
Default reminders work alongside template systems:
- **Applied After Templates**: Default reminders are added after template processing
- **Template Variables**: Templates can reference reminder-related variables
- **Combined Workflows**: Templates and default reminders complement each other
### Data Storage and Format
Default reminders are stored in your TaskNotes settings and converted to task reminders when new tasks are created. They maintain the same data structure as task reminders:
#### Settings Storage Format
```json
{
"defaultReminders": [
{
"id": "def_rem_1678886400000",
"type": "relative",
"relatedTo": "due",
"offset": 15,
"unit": "minutes",
"direction": "before",
"description": "Task review reminder"
},
{
"id": "def_rem_1678886400001",
"type": "absolute",
"absoluteDate": "2025-10-26",
"absoluteTime": "09:00",
"description": "Weekly planning session"
}
]
}
```
#### Task Application Format
When applied to tasks, default reminders are converted to the standard reminder format:
```yaml
reminders:
- id: "rem_1678886400000_abc123xyz"
type: "relative"
relatedTo: "due"
offset: "-PT15M"
description: "Task review reminder"
- id: "rem_1678886400001_def456uvw"
type: "absolute"
absoluteTime: "2025-10-26T09:00:00"
description: "Weekly planning session"
```
### Best Practices
#### Reminder Strategy
**Start Simple:** Begin with one or two common default reminders and add more as needed.
**Consider Context:** Different types of tasks may benefit from different reminder patterns.
**Avoid Overloading:** Too many default reminders can become overwhelming and reduce their effectiveness.
#### Timing Considerations
**Buffer Time:** Include enough lead time for preparation and action.
**Multiple Alerts:** Use multiple reminders for important deadlines (e.g., 1 week, 2 days, 4 hours before).
**Personal Patterns:** Align reminder timing with your personal work patterns and schedule.
#### Maintenance
**Regular Review:** Periodically review and adjust default reminders based on effectiveness.
**Seasonal Adjustments:** Consider adjusting reminder patterns for different seasons or project types.
**Feedback Integration:** Use your experience with reminders to refine default configurations.
## Template System
TaskNotes supports **Templates** for both the YAML frontmatter and the body of your task notes. You can use templates to pre-fill common values, add boilerplate text, and create a consistent structure for your tasks. Templates can also include variables, such as `{{title}}`, `{{date}}`, and `{{parentNote}}`, which will be automatically replaced with the appropriate values when a new task is created.