-
Notifications
You must be signed in to change notification settings - Fork 0
Chore Scheduling
TaskMate supports two scheduling modes for chores, set during the add/edit chore flow.
The chore appears on selected days of the week. This is the default mode and matches the existing behaviour.
Setup: On Step 2 of the chore flow, select which days the chore should appear. Leave empty to show every day.
Child card behaviour: Use due_days_mode on the child card:
-
hide— chores not due today are hidden entirely -
dim— chores not due today are shown greyed out and non-interactive -
show— all chores shown regardless of day
Progress counting: The Overview card and Parent Dashboard count only chores due today in the progress bar denominator — a chore scheduled Mon/Wed/Fri doesn't inflate Saturday's total.
The chore has a rolling recurrence window. Once completed, it cannot be done again until the window expires.
Setup: Select Recurring on Step 1, then on Step 2 configure:
| Field | Applies To | Description |
|---|---|---|
| Recurrence | All | How often the chore can be completed |
| Day of Week | Weekly, Every 2 Weeks | Pin to a specific day. Leave empty for any day. |
| Start Date | Every 2 Days | Anchor date for the rhythm. Leave empty for today. |
| First Occurrence | All | Available immediately or wait for first scheduled occurrence |
| Option | Window |
|---|---|
| Every 2 days | 2 days from last completion date |
| Weekly | 7 days from last completion date |
| Every 2 weeks | 14 days from last completion date |
| Monthly | 30 days from last completion date |
| Every 3 months | 90 days from last completion date |
| Every 6 months | 180 days from last completion date |
Windows are midnight-rounded — if completed at 7pm Wednesday, the window starts from Wednesday midnight. A weekly chore completed Wednesday is available again the following Wednesday from midnight.
When a recurring chore is first created (no completions yet):
| Setting | Behaviour |
|---|---|
| Available Immediately (default) | Child can complete it straight away |
| Wait for First Scheduled Occurrence | Chore is locked until the first scheduled day/date arrives |
For Weekly/Every 2 Weeks with a Day of Week set — "wait" means locked until that day of the week arrives.
For Every 2 Days with a Start Date — "wait" means locked until the start date.
For Monthly and longer — "wait" means locked for the full window from creation date before first use.
Use recurrence_done_mode on the child card to control what happens when a recurring chore is completed and waiting to reset:
| Value | Behaviour |
|---|---|
dim |
Shown greyed out, non-interactive (default) |
hide |
Hidden entirely until available again |
show |
Shown normally — child can see it's done but can't complete again |
If a child undoes a recurring chore completion, the previous completion becomes the window anchor — the chore does not immediately become available again (unless there was no previous completion). This prevents gaming the system by repeatedly completing and undoing to reset the window.
Recurrence windows are tracked in a dedicated store separate from the prunable completion history. This means:
- The
history_dayssetting does not affect recurrence — a 6-month chore will still be correctly locked even if history is set to 90 days - The store keeps only the two most recent completions per chore per child — current and previous (for undo)
Each chore in sensor.taskmate_overview → chores exposes:
| Attribute | Description |
|---|---|
schedule_mode |
specific_days or recurring
|
recurrence |
e.g. weekly, every_2_weeks
|
recurrence_day |
e.g. tuesday (if pinned) |
recurrence_start |
ISO date anchor (Every 2 Days) |
first_occurrence_mode |
available_immediately or wait_for_first_occurrence
|
is_available |
{ child_id: bool } — pre-calculated availability per child |
last_completed_at |
{ child_id: ISO datetime } — most recent completion per child |
The is_available attribute is pre-calculated by the backend so cards don't need to implement window logic themselves.