Checklist inside a task

A lightweight checklist inside one task — add a step and press Enter, tick them off, and the row shows 2/5.

What it is

Steps are stored as an ordered array on the task itself, not as child rows. They do not schedule, remind or assign. The list row shows a done/total counter that turns green when complete; the counter carries over to the next occurrence of a recurring task with every step reset.

Also called: subtasks · steps · task checklist · 3 things I must not forget

See it
Checklist inside a task
CustomerBuildingAmountStatus
Marlin HooverEquipment Storage$16,210Draft
Delia YoderEquipment Storage$11,270Open
Delia YoderHobby Shop$7,660Draft
Ronan PetschEquipment Storage$6,520Sent
Sutter KlineEquipment Storage$6,140Open
The Checklist card in the focus modal — 'Checklist — 2 of 5 done', ticked rows, and the 'Add a step and press Enter' field. TaskHub.tsx. Sample data — no customer information appears here.
How it works
  1. 1The client sends the whole checklist on every edit; the API keeps only well-formed rows, trims titles to 200 characters and caps at 30 steps.
  2. 2Edits save optimistically so the modal does not flicker per tick.
  3. 3When a recurring task is completed, its steps are copied to the next occurrence with done reset to false.
Why we built it

Migration 176 draws the line: subtasks are '[{id, title, done}] — a lightweight checklist INSIDE a task, not child rows. They don't schedule, remind, or assign; they're the "3 things I must not forget while doing this" list.' Making them real tasks would have doubled the list for no gain.

The problem
  • Multi-step tasks either became five tasks or lost their detail
Sound familiar?
What you get
Steps live with the task instead of cluttering the list
Recurring tasks bring a fresh copy of the checklist each time

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →