Skip to content

Releases: tempus2016/taskmate

v2.1.0

24 Mar 19:06
af63e8f

Choose a tag to compare

TaskMate v2.1.0

What's New

Penalty System

The flip side of rewards — deduct points for unwanted behaviour without having to guess an amount each time.

Create named penalties (e.g. "Not going to bed", "Too much screen time", "Talking back") with a fixed point deduction, then apply them to a child with a single tap. The deduction is logged in the activity feed so you always have a record.

New taskmate-penalties-card

  • Child selector tabs at the top (hidden when there's only one child)
  • Each penalty shows its icon, name, and point cost in a red badge
  • Tap Apply → points deducted instantly, tile flashes red, toast confirms the action
  • Toggle edit mode (pencil icon) to add, rename, or delete penalties

4 new services for automation / scripting

Service Description
taskmate.add_penalty Create a new penalty definition
taskmate.update_penalty Update an existing penalty's name, points, or icon
taskmate.remove_penalty Delete a penalty definition
taskmate.apply_penalty Apply a penalty to a child (deducts points immediately)

Example:

service: taskmate.apply_penalty
data:
  penalty_id: abc12345
  child_id: a8c8376a

Bug Fixes

  • Crash deleting a chore — The config flow called a non-existent method (async_delete_chore) instead of the correct async_remove_chore. Deleting a chore from Settings now works correctly.

  • Crash when settings contain invalid values — If a setting like weekend_multiplier or perfect_week_bonus was somehow saved as a non-numeric string, float()/int() would throw and take the entire sensor offline. These conversions now fall back to their defaults gracefully.

  • Crash in chore availability checkis_chore_available_for_child caught ValueError when parsing a stored date string, but not TypeError. If the stored value was None or a non-string, slicing it raised an unhandled TypeError. Fixed to catch both.

  • Reward rejection bypassed storage APIasync_reject_reward was directly writing to storage._data["reward_claims"] instead of going through the storage layer. Added remove_reward_claim() to TaskMateStorage and updated the coordinator to use it.

  • Double dict lookup for child names — A fragile a and b or c pattern was used to look up the same child dict key twice in the sensor. Replaced with a clean single lookup.


Upgrade Notes

No migration needed. Penalties are stored in a new penalties key in the TaskMate data store — existing data is untouched.

After upgrading, hard-refresh your browser (Cmd+Shift+R / Ctrl+Shift+R) to load the new card JavaScript.

v2.0.0

24 Mar 14:26
7c1d998

Choose a tag to compare

TaskMate v2.0.0 — Chore Scheduling & Simplified Rewards

This is a major release. It introduces a full chore recurrence system, removes the smart reward pricing engine in favour of simple fixed costs, and includes several bug fixes and stability improvements.


⚠️ Breaking Changes

Smart Reward Pricing Removed

Dynamic reward pricing has been removed entirely. All reward costs are now fixed values set by the parent.

What this means for existing installations:

  • Any reward that used dynamic pricing will retain whatever cost was last calculated — this becomes the new fixed cost. Review your rewards after upgrading and adjust costs if needed.
  • The Days to Goal, Override Point Value, and Completion % Per Month fields no longer exist.
  • Reward costs are now simply: set a number, that's the cost.

completion_percentage_per_month Removed from Chores

This field has been removed from the chore model. It is no longer stored, exposed in the sensor, or accepted in the config flow. Existing chore data is migrated automatically on first startup — the field is silently stripped.


🆕 Chore Scheduling — Two Modes

Chores now have a Scheduling Mode which determines how they appear and when they can be completed.

Mode A — Specific Days

The existing behaviour. Choose which days of the week the chore appears on the child card. Leave empty to show every day.

Schedule Mode: Specific days of the week
Due Days: Monday, Wednesday, Friday

Mode B — Recurring

The chore has a rolling recurrence window. Once completed, it is not available again until the window expires.

Recurrence 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
type: custom:taskmate-child-card
entity: sensor.taskmate_overview
child_id: a8c8376a
recurrence_done_mode: dim

Configurable in the card visual editor.


🆕 Last Completed Store

A new lightweight store tracks the two most recent completion timestamps per chore per child, separately from the prunable completion history. This is what drives recurrence window checking and is never pruned regardless of the history_days setting.

Undo behaviour: Undoing a completion restores the previous completion as the window anchor — a child can't claiam a weekly chore by repeatedly completing and undoing.


🐛 Bug Fixes

Child Card — notAvailableRecurrence Error

The variable used to apply the recurrence dim/hide state was defined in the filter scope but referenced in the render method — causing a ReferenceError that prevented the child card from rendering. Fixed.

Reward Pricing — Static Cost Now Consistent

async_claim_reward and async_approve_reward were still calling the removed dynamic pricing method. Both now use reward.cost directly.


📋 Files Changed

Backend: models.py · storage.py · coordinator.py · sensor.py · button.py · config_flow.py · const.py · strings.json · translations/en.json

Frontend: www/taskmate-child-card.js · www/taskmate-rewards-card.js · www/taskmate-overview-card.js · www/taskmate-parent-dashboard-card.js


⬆️ Upgrading

  1. Deploy all files to /config/custom_components/taskmate/
  2. Restart Home Assistant
  3. Review your rewards — check that costs are correct after the dynamic pricing removal
  4. Existing chores default to Specific Days scheduling — no action needed unless you want to convert any to Recurring

v2.0.0-beta-01

24 Mar 13:17
c13d0a9

Choose a tag to compare

v2.0.0-beta-01 Pre-release
Pre-release

Beta testing a new scoring system.

v1.1.6

23 Mar 18:53
60c0279

Choose a tag to compare

TaskMate v1.1.6

🐛 Bug Fixes

Points Card — Quick Action Buttons

The points card now shows configurable quick-tap buttons for adding and removing points directly from the child row — no dialog required for common amounts.

  • Default buttons are +1, +5, +10 and −1, −5, −10
  • Each button fires immediately with its own loading state
  • A button at the end of each row opens the existing dialog for a custom amount with an optional reason — can be hidden via the editor toggle
  • All amounts are fully configurable in the card editor

New YAML options:

type: custom:taskmate-points-card
entity: sensor.taskmate_overview
quick_add_amounts: [1, 5, 10]
quick_remove_amounts: [1, 5, 10]
show_dialog: true  # show ⋯ button for custom amount with reason

Overview Card — Chores Due Today Only

The Overview card and Parent Dashboard Overview tab were showing incorrect progress counts — e.g. 1/2 when only one chore was due today.

Root cause: The total chore count included all assigned chores regardless of due_days. A chore scheduled only for weekdays still appeared in the denominator on weekends.

Both cards now only count chores that are due today. Chores with no due_days set are always included. Approved completions are also scoped to today's due chores only.


Lovelace Resources — Permanent Fix for Missing Cards

TaskMate cards were being lost from Lovelace resources after a HA restart in certain conditions.

Root cause: ResourceStorageCollection is lazy — it doesn't read from disk until forced. TaskMate was calling async_items() before the storage had loaded, getting an empty list, creating all 13 entries fresh, and then having them wiped when Lovelace subsequently loaded its own storage file and overwrote the collection.

Fix: TaskMate now forces the storage to load before touching any resources, using the same approach as the WebRTC and Browser Mod integrations:

if hasattr(resources, "loaded") and not resources.loaded:
    await resources.async_load()
    resources.loaded = True
elif hasattr(resources, "async_get_info"):
    await resources.async_get_info()

Console Version Badges — Now Show Actual Installed Version

All 13 cards were logging hardcoded or stale version strings to the browser console (v0.0.1, v0.0.7, Loaded, etc.).

Each card now reads its own version from the ?v= parameter on its own <script> tag at runtime, so the console badge always reflects the actually installed version:

TASKMATE CHILD CARD  v1.1.6

Each card also now uses its own header colour in the console badge rather than all cards sharing the same colour.


📋 Files Changed

frontend.py · www/taskmate-child-card.js · www/taskmate-rewards-card.js · www/taskmate-approvals-card.js · www/taskmate-points-card.js · www/taskmate-reorder-card.js · www/taskmate-overview-card.js · www/taskmate-activity-card.js · www/taskmate-streak-card.js · www/taskmate-weekly-card.js · www/taskmate-graph-card.js · www/taskmate-reward-progress-card.js · www/taskmate-leaderboard-card.js · www/taskmate-parent-dashboard-card.js


⬆️ Upgrading

Update via HACS or copy the files above to /config/custom_components/taskmate/. Restart Home Assistant after updating — Lovelace resources will update automatically.

v1.1.5

23 Mar 16:28
13ade15

Choose a tag to compare

TaskMate v1.1.5 — Overview Progress Fix

Bug Fix

🐛 Overview Card Showing Incorrect Chore Progress

The Overview card and the Parent Dashboard card's Overview tab were showing incorrect chore progress counts — for example 1/2 when only one chore was actually due today.

Root cause: The chore total was calculated from all chores assigned to the child, with no consideration for due_days. A chore scheduled only for weekdays was still counted in the denominator on weekends, inflating the total.

Fixed in both:

  • taskmate-overview-card.js — the child progress bar now only counts chores due today
  • taskmate-parent-dashboard-card.js — the Overview tab applies the same fix

How it works now:

  • Chores with due_days set are excluded from the total if today is not a scheduled day
  • Chores with no due_days set are always included (they are due every day)
  • Approved completions are also scoped to today's due chores only
  • Today's day of week is read from sensor.taskmate_overviewtoday_day_of_week (HA timezone) with a browser fallback

📋 Files Changed

www/taskmate-overview-card.js · www/taskmate-parent-dashboard-card.js

v1.1.4

23 Mar 15:36
167080f

Choose a tag to compare

TaskMate v1.1.3 — Polish Code & Create Notifications

What's New


🔔 HA Notifications on Chore Approval

Parents now receive a notification whenever a child completes a chore that requires approval.

Persistent notifications are created automatically in Home Assistant — visible in the notification bell in the HA sidebar.

Push notifications can also be sent to any HA notify service by configuring the new setting in Settings → Integrations → TaskMate → Configure → Settings → Notification Service.

Enter your notify service in the format notify.mobile_app_your_phone. Leave empty to use persistent notifications only.

Example notification:

TaskMate ✅ Malia completed 'Homework' (+5 Stars) and is waiting for your approval.


🎁 Rewards Card — Child Picker

The rewards card now works without a child_id configured. A Viewing as dropdown appears below the header, letting any parent or child select who they're viewing the card as — activating the claim button for that child.

Previously with no child_id set, the card showed rewards in display-only mode with no way to claim. The picker solves this without needing to create a separate card per child.

The selection is temporary (in-memory only) and resets on page refresh — it does not modify the card config.


🐛 Bug Fixes

Activity Card — Pending Chore Icon Colour

Pending chore completions (awaiting parent approval) were showing with a grey icon — the same as an approved chore. They now correctly show with an orange icon matching the pending status colour used elsewhere in the card.

Status badge text is also now capitalised — "Pending", "Approved", "Rejected" — instead of lowercase.

Weekly / Graph Card Editor Audit

Confirmed both card editors already use native <select> elements throughout. No ha-combo-box instances found — no changes required.


⚙️ New Setting

Setting Default Description
Notification Service (empty) HA notify service for approval alerts e.g. notify.mobile_app_your_phone

📋 Files Changed

coordinator.py · config_flow.py · strings.json · translations/en.json · www/taskmate-rewards-card.js · www/taskmate-activity-card.js

v1.1.3

23 Mar 11:14
544487a

Choose a tag to compare

TaskMate v1.1.3 — Colour Picker Bug Fix

Bug Fix

🐛 Cards Failing to Load — Cannot read properties of undefined (reading 'header_color')

Three cards were throwing a TypeError on load, preventing them from rendering entirely:

  • taskmate-reward-progress-card.js
  • taskmate-leaderboard-card.js
  • taskmate-parent-dashboard-card.js

Root cause: These three card editors define their static get styles() block after their render() method — the opposite order to all other cards. When the colour picker HTML was automatically inserted, the script couldn't find the correct closing pattern and fell back to one that landed inside the css\`template block. The picker HTML ended up being treated as CSS, which causedthis.config` to be referenced from a static context where no card instance exists yet.

Fix: The picker HTML has been removed from the CSS block and re-inserted in the correct location inside each editor's render() method. The @input and @click handlers have also been corrected to use this._update() — the method name these three editors use — rather than this._updateConfig().


📋 Files Changed

www/taskmate-reward-progress-card.js · www/taskmate-leaderboard-card.js · www/taskmate-parent-dashboard-card.js

v1.1.2

23 Mar 10:56
9889fde

Choose a tag to compare

TaskMate v1.1.2 — Resource Deletion Bug Fix

Bug Fix

🐛 Lovelace Resources Being Wiped on Restart

Manually added Lovelace resources were being deleted every time Home Assistant restarted.

Root cause: The resource manager included a "stale cleanup" block that deleted any /taskmate/* resource not found in the expected cards list. If the stored URL format didn't exactly match what the code expected — due to version string differences or URL encoding — all TaskMate resources were flagged as stale and wiped.

Fix: The delete logic has been removed entirely. The resource manager now only ever does two things:

  • Add cards that are missing from Lovelace resources
  • Update the ?v= version string on cards that are already registered

It will never delete any resource. If a card is renamed or removed in a future release, the old entry will simply remain harmlessly in the resources list until manually removed.

Additional debug logging has been added so you can see exactly what the resource manager is doing in the HA logs (Settings → System → Logs, filter by taskmate).


📋 Files Changed

frontend.py

v1.1.1

23 Mar 10:40
5160aab

Choose a tag to compare

TaskMate v1.1.1

What's New

This release adds custom streak milestone configuration, automatic resource version management, vibrant per-card header colours, child card and reorder card improvements, and several bug fixes across all 13 cards.


🔥 Custom Streak Milestone Configuration

Streak milestones are now fully configurable. Define your own milestones with any day count and bonus amount in Settings → Integrations → TaskMate → Configure → Settings.

Enter milestones as days:points pairs separated by commas:

3:5, 7:10, 14:20, 30:50, 60:100, 100:200

Default milestones:

Streak Bonus
3 days +5 points
7 days +10 points
14 days +20 points
30 days +50 points
60 days +100 points
100 days +200 points

The Streak Milestone Bonuses toggle remains as a master on/off switch. Leave the field empty to disable all milestones without turning off the toggle. Invalid formats show a validation error on save and fall back to the default list.


🔄 Automatic Resource Version Management

TaskMate now automatically keeps its Lovelace resource URLs up to date on every HA restart — no more manually editing ?v=x.x.x in Settings → Dashboards → Resources after an upgrade.

On every restart TaskMate will:

  • Update existing resource URLs to the current version so browsers fetch fresh JS
  • Add any new cards introduced in the update
  • Remove any cards that have been renamed or removed
  • Never touch any other integration's resources — strictly scoped to /taskmate/* URLs only

🎨 Per-Card Header Colour Picker

Every TaskMate card now has a configurable header background colour, editable directly in the Lovelace card editor. Each card ships with its own vibrant default colour suited to its purpose.

In the card editor a new Header Colour field appears at the bottom with a native colour picker, the current hex value shown alongside it, and a Reset button to restore the card's default.

Default colours:

Card Colour
Child Purple #9b59b6
Rewards Orange #e67e22
Approvals Green #27ae60
Points Blue #2980b9
Reorder Teal #16a085
Overview Violet #8e44ad
Activity Steel Blue #2471a3
Streak Red #e74c3c
Weekly Green #27ae60
Graph Burnt Orange #d35400
Reward Progress Deep Purple #7d3c98
Leaderboard Gold #b7950b
Parent Dashboard Crimson #c0392b

✨ New Features

Chore Description Display (Child Card)

Chore descriptions can now be shown on the child card below the chore name.

  • Off by default — enable via Show chore description in the card editor
  • Displayed as a small secondary line in a lighter colour, truncated with ellipsis if too long
  • Set descriptions in Settings → Integrations → TaskMate → Configure → Manage Chores

Jackpot Contribution Breakdown (Rewards Card)

The jackpot reward breakdown now shows each child's actual points contributed rather than just a percentage.

  • Format: Malia: 15 ⭐ (5%)
  • Makes it immediately clear how much each child has put toward the jackpot goal

🐛 Bug Fixes

  • Translation labels — new settings fields were showing raw key names instead of proper labels. Fixed in en.json
  • Chore description missing from sensordescription field was present on rewards in the sensor but accidentally omitted from the chores list, so it never reached the card. Fixed in sensor.py
  • Child card mobile layout — chore rows were wrapping on narrow phone screens, pushing the checkbox onto a new line below the chore name. Fully fixed with flex-wrap: nowrap across a clean 5-breakpoint responsive system
  • Child card desktop size — the @media (min-width: 1024px) breakpoint was inflating chore cards to very large sizes. Scaled back to proportional sizes that match the rest of the card suite
  • Jackpot star icon alignment — star icon in the jackpot contribution row was sitting slightly low. Fixed with vertical alignment adjustment
  • Rewards claim button — claim button and reward icon were overlapping. Button now replaces the icon when a claim is available; icon shows when no claim button is applicable

🎨 Card Restyling

  • Child card header — points display updated to a compact horizontal pill matching all other cards. Removed the large stacked number + "POINTS" label
  • Reorder card header — restyled to the standard dark navy gradient used by all other cards, with sort icon, title, and child name pill on the left and Save Order button as a frosted pill on the right
  • Approvals card header — updated to standard padding: 14px 18px with icon, title, and pulsing red pending count badge. Card body wrapped with consistent padding
  • All card headers — standardised to padding: 14px 18px across all 13 cards

⚙️ New Settings

Setting Default Description
Streak Milestone Configuration 3:5, 7:10, 14:20, 30:50, 60:100, 100:200 Custom milestones as days:points pairs

⚠️ Migration Notes

  • Existing installs automatically use the default milestone list — no action needed
  • Previously achieved milestones are stored by day count — if you change the milestone days, children may re-earn milestones they previously hit under the old config
  • Resource URLs will automatically update from ?v=1.1.0 to ?v=1.1.1 on first HA restart
  • Card header colours default to the new vibrant defaults automatically — customise per card via the card editor

📋 Files Changed

coordinator.py · config_flow.py · sensor.py · frontend.py · __init__.py · strings.json · translations/en.json · all 13 www/taskmate-*.js card files

v1.1.1-beta-05

23 Mar 10:20
c2c3854

Choose a tag to compare

v1.1.1-beta-05 Pre-release
Pre-release

TaskMate v1.1.1-beta-05

What's New

🎨 Header Colour Picker (All 13 Cards)

Every TaskMate card now has a configurable header background colour, editable directly in the Lovelace card editor. Each card ships with its own vibrant default colour suited to its purpose.

In the card editor, a new Header Colour field appears at the bottom with:

  • A native colour picker
  • The current hex value shown alongside it
  • A Reset button to restore the card's default colour

The colour is stored as header_color in the card's YAML config and applied immediately — no HA restart required.

Default colours:

Card Colour
Child Purple #9b59b6
Rewards Orange #e67e22
Approvals Green #27ae60
Points Blue #2980b9
Reorder Teal #16a085
Overview Violet #8e44ad
Activity Steel Blue #2471a3
Streak Red #e74c3c
Weekly Green #27ae60
Graph Burnt Orange #d35400
Reward Progress Deep Purple #7d3c98
Leaderboard Gold #b7950b
Parent Dashboard Crimson #c0392b

🎨 Approvals Card Header Restyled

The Approvals card header has been updated to match the standard style used across all other TaskMate cards.

  • Standard padding: 14px 18px header
  • Icon, title, and pending count badge in the header
  • Pending count shown as a red pulsing badge on the right
  • Card body content wrapped with consistent 16px padding

⚠️ Migration Notes

  • Existing cards will use their new default colour automatically — no action needed
  • To customise, open the card editor and use the Header Colour picker
  • The header_color value is stored per-card in your Lovelace dashboard YAML

📋 Files Changed

All 13 www/taskmate-*.js card files