Tasks
Overview
Tasks are the core of Ziptask. Work is organized into task lists (projects or checklists) that contain task items (individual to-dos). Lists can be personal (owned by one member) or shared (assigned to multiple members).
Templates are reusable blueprints for lists — you build one once and spawn new lists from it on demand. Recurring lists are an optional layer on top of templates: a template can be given a schedule so new lists are spawned automatically. A template does not have to recur; it can be spawned manually whenever needed.
Task Lists
Who can create a list
Any member can create a personal list. Admin and Root can create a list and assign it to any member in the account. Team Admin can create and assign lists but only to members within their own teams — they cannot assign to members outside their team scope.
Who can see a list
| Role | Visibility |
|---|---|
| User | All active lists in the account (teams off) or all lists associated with any of their teams, plus lists they created or are assigned to regardless of team (teams on). Lists the User created or is assigned to are editable; all others are view only. |
| Team Admin | Lists associated with any of their teams, plus lists they created or are assigned to (teams on). Default visibility is team-scoped — same as Admin but limited to their team(s). |
| Admin | All lists in the account (teams off) or lists associated with any of their teams, plus lists they created or are assigned to (teams on). |
| Root | All lists in the account at all times. |
View-only lists: A User who can see a list but is not the creator or an assignee can view its items and progress but cannot add items, pick up items, or upload attachments. These lists are labelled “View only” in the list view.
Teams disabled = whole account as one team. When teams_enabled is off, the account acts as a single implicit team — all members can see all lists. When teams_enabled is on, each member’s visibility is scoped to their team associations. A member on multiple teams sees lists from all of those teams combined.
Lists with no team: If a list was created without a team (either before teams were enabled or by a member not on any team), it has no team association and is only visible to the creator and Root. An Admin or Root can open the list’s edit modal and assign it to a team to restore broader visibility.
List actions by role
| Action | User | Team Admin | Admin / Root |
|---|---|---|---|
| Create a personal list | ✓ (free tier: max 5 active lists) | ✓ | ✓ |
| Create and assign a list to members | ✗ | ✓ (own team members only) | ✓ |
| Edit title / description / due date | Creator only | Creator only (team-scoped) | ✓ |
| Delete a list | Creator only | Creator only (team-scoped) | ✓ |
| Archive / unarchive a list | Creator only | Creator only (team-scoped) | ✓ |
| Add / remove member assignments | ✗ | ✓ (own team members only) | ✓ |
Archiving lists
Lists can be archived instead of deleted. Archived lists are hidden from the default view and do not count against the free tier active list cap. To see archived lists, tap Archived in the list page header — the view switches to show archived lists only. Archived lists remain fully navigable: tapping a card in the archived view opens the list detail where items and history can be reviewed.
Free tier active list cap: Free tier accounts can have up to 5 active (non-archived) lists at a time. Archiving a list frees up a slot. If a free tier account is at the cap, creating a new list or unarchiving a list is blocked until another list is archived.
Who can archive: The list creator, or Admin or Root can archive any list. Archiving preserves all list data, items, and history — nothing is deleted.
Project-linked lists: If a list is linked to a project, archiving it does not remove it from the project’s point or cost totals. All lists always count toward project rollups regardless of their archive status. A note to this effect is shown in the archive confirmation when the list belongs to a project.
Unarchiving: Both the Unarchive button on the archived list card and the Unarchive action in the list detail sidebar show a confirmation before restoring the list to active. On the detail page the sidebar action toggles between Archive and Unarchive based on the list’s current status.
Team field on task lists
Requires:
teams_enabledfeature flag
Every task list can optionally be associated with a team. When a list has a team, the team name appears as a badge on the list card and in the list detail sidebar.
When creating a list:
| Situation | Behavior |
|---|---|
| Creating member is on exactly one team | List is automatically associated with that team |
| Creating member is on multiple teams | A Team picker appears in the create form; member chooses which team (or “No team”) |
| Creating member is on no team | List has no team association |
When editing a list:
Admin and Root can change the team on any list they can manage. A regular User can change the team only on lists they own, and only to a team they currently belong to. Selecting “No team” is allowed and clears the team association.
When teams_enabled is off, the team picker, team badge on cards, and team section in the detail sidebar are all hidden. Existing team associations are preserved and restored if the flag is re-enabled.
Mine / All scope toggle
The task list page has a Mine | All toggle that filters which lists are shown.
| Scope | Shows |
|---|---|
| Mine | Lists the member created or is assigned to |
| All | All lists the member has visibility to (full account or team, per the rules above) |
Default scope by role:
- User → defaults to Mine
- Admin / Root → defaults to All
The scope resets to its default whenever the member navigates to the task list page. Switching scope reloads the list from page 1. Pull-to-refresh and infinite scroll both respect the current scope.
List status
A list’s overall status is derived from its items:
- Not Started — no items, or all items are TODO
- In Progress — at least one item is DOING or COMPLETED but not all completed
- Completed — all items are COMPLETED
Status color indicators
Each list card shows a colored left border stripe and a progress badge that reflect the list’s current status:
| Status | Left border stripe | Progress badge |
|---|---|---|
| Not Started | Gray (faded) | Gray |
| In Progress | Amber | Amber |
| Completed | Teal | Teal |
Task Items
Items live inside a list. Members who are the creator or an assignee of the list can add items and work on them. Members viewing a list in read-only mode (team visibility, not assigned) can see items but cannot interact with them.
Item actions by role
| Action | User (creator or assignee) | User (view-only) | Admin / Root |
|---|---|---|---|
| Add an item | ✓ | ✗ | ✓ |
| Edit an item (title, description, points, etc.) | ✓ | ✗ | ✓ |
| Delete an item (TODO only) | List creator only | ✗ | ✓ |
| Pick up / change status | ✓ | ✗ | ✓ |
| Submit for approval | ✓ | ✗ | ✓ |
| Approve / reject | ✗ | ✗ | ✓ |
| Reset COMPLETED → TODO | ✗ | ✗ | ✓ |
Delete restriction: Items can only be deleted when they are in the TODO state. Items that have been picked up (DOING, PENDING_APPROVAL, COMPLETED) cannot be deleted; an Admin or Root can reset them to TODO first if removal is needed.
Item status transitions
Without the approval flow (default):
| Transition | Who can trigger | What happens |
|---|---|---|
| TODO → DOING | Any member assigned to the list | Sets the item’s assignee to the current member; records start time |
| DOING → COMPLETED | The member who picked it up, or Admin or Root | Records who completed it and when; awards points if enabled |
| DOING → TODO | The member who picked it up, or Admin or Root | Clears the assignee and start time |
| COMPLETED → TODO | Admin / Root only | Clears all tracking fields; reverses points if enabled |
With approval required on an item (see Requires Approval below):
| Transition | Who can trigger | What happens |
|---|---|---|
| DOING → PENDING_APPROVAL | The member who picked it up | Submits the item for review; records submission time |
| PENDING_APPROVAL → COMPLETED | Admin / Root only | Approves the item; awards points to the assignee |
| PENDING_APPROVAL → DOING | Admin or Root (reject) or the assignee (withdraw) | Moves back to DOING so the worker can fix and resubmit |
| DOING → COMPLETED (bypass) | Admin / Root only | Admins can skip the approval gate and mark done directly |
Item status colors
Each item row displays a status badge and a colored left border stripe:
| Status | Badge color | Left border stripe |
|---|---|---|
| TODO | Gray | Gray (faded) |
| DOING | Amber | Amber |
| PENDING_APPROVAL | Sky blue | Sky blue |
| COMPLETED | Teal | Teal (row title is struck through and faded to indicate it is done) |
Key rule: A User cannot act on an item they did not pick up. Admin or Root can act on any item to close out or reassign work on behalf of team members.
Conflict handling: If two members try to act on the same item simultaneously, the second request is rejected with a conflict error. The client shows a notification and refreshes the list automatically.
Points on completion
When points_system is on, completing an item awards points to the member who completed it. Points are awarded to the assignee at the moment of completion (either direct completion or approval). Reversing a completion (COMPLETED → TODO) deducts those points automatically.
Requires Approval
Requires:
approval_enabledfeature flag
When enabled, Admin and Root can set two optional toggles per item (in the Edit Item form):
| Toggle | What it does |
|---|---|
| Requires Approval | Worker must submit the item for review; an Admin or Root must approve before it becomes COMPLETED and points are awarded. |
| Require Photo / Document | Worker must upload at least one attachment to the item before they can submit for approval. Only visible when Requires Approval is on and attachments_enabled is on. |
Both toggles default to off. They can be set when creating or editing an item, or on template items so the values carry over to every list spawned from that template.
Who receives notifications
- When a worker submits for approval, all Admin or Root in the account receive a notification.
- When an Admin approves an item, the assignee receives a notification.
- When an Admin rejects a submission, the assignee receives a notification.
- When a worker withdraws their own submission, no notification is sent.
Admin bypass
Admins can skip the approval gate: while an item is DOING (even if approval is required), an Admin or Root can tap Mark as done to go directly to COMPLETED. This is intentional — admins can always act on behalf of the team.
Item Attachments
Requires:
attachments_enabledfeature flag
Members can attach files directly to individual task items. This is separate from list-level attachments. Item attachments are useful for upload-before-submit workflows when both approval and attachment requirements are enabled.
| Action | User | Admin / Root |
|---|---|---|
| View item attachments | ✓ (on lists they can see) | ✓ |
| Upload item attachments | ✓ (on lists they can see) | ✓ |
| Delete item attachments | Uploader only | ✓ |
Tap the Attachments action on any item to view, upload, or remove files. The item row shows an attachment count badge when one or more files are present.
Templates and Recurring Lists
Requires:
templates_enabledflag for templates;recurring_listsflag for recurring. Both are enabled automatically from Starter plan and above. On Free, neither feature is available.
Templates
A task list can be saved as a template. Templates are reusable blueprints — they don’t appear in the regular task list and cannot be worked on directly. Only Admin and Root can create or manage templates.
When a template is spawned, a new regular task list is created from it with all items, assignments, and tags copied in. Items are reset to TODO. Spawning can be done manually or automatically via a recurrence schedule.
Recurring lists
A template can be given a recurrence schedule so that new list instances are created automatically on a repeating cadence. The template itself is called the master list; the created copies are called instances. All instances are immediately workable when they appear — there is no “Upcoming” state.
Frequencies
| Frequency | Cadence |
|---|---|
| Daily | Every day |
| Weekly | Every 7 days |
| Biweekly | Every 14 days |
| Monthly | Same day each month; if the due date falls on the last day of a month, subsequent instances land on the last day of each following month (e.g. Jan 31 → Feb 28/29 → Mar 31) |
How instances are created
Instances are created on demand — the system never pre-creates future instances. When a period becomes due, one Active instance is created for that period. All instances are immediately Active and workable.
The system checks every hour and creates any instances whose period is now due.
Early unlock: When all items on an Active instance are completed, the system automatically creates the next period’s instance — members don’t have to wait for the next check.
Scheduled events on the calendar: The calendar shows future recurrence dates as scheduled events (displayed with a dashed border). These are not real lists yet — they are computed from the master’s schedule. Any member with list-create permission can tap a scheduled event and choose Activate Now to create the next instance immediately — this includes Admin, Root, Team Admin, and regular Users for lists they own or are assigned to.
Setting a recurrence schedule
The Set Schedule button appears on the master list’s detail page. Admin and Root can set a schedule at any time — the list does not need to be a template first.
- Setting a schedule updates the recurrence rule. If the first instance is already due (the anchor date + frequency is on or before today), an Active instance is created immediately.
- No future instances are pre-created — the calendar shows scheduled placeholders instead.
- Because instances are created at the moment they become due, any items added to the master list after the schedule is set will automatically appear in all future instances. There is no need to re-sync or update existing instances manually.
Actions by role
| Action | User (own/assigned) | Admin / Root |
|---|---|---|
| Set a recurrence schedule | ✗ | ✓ |
| Change the recurrence schedule | ✗ | ✓ |
| Stop recurrence | ✗ | ✓ |
| View scheduled (upcoming) events on the calendar | ✓ | ✓ |
| Activate the next instance immediately | ✓ (own/assigned only) | ✓ |
| Delete a list (with scope choice for recurring) | Creator only | ✓ |
Stopping recurrence
The Stop Recurrence button on the master list’s detail page disarms the schedule. No rows are deleted — the master’s recurrence rule is cleared and no new instances will be created. Existing Active and completed instances are not affected; they remain as standalone lists and retain their history.
Changing the schedule
The Change Schedule button updates the recurrence frequency going forward. No existing instances are deleted or modified. Future scheduled events on the calendar update to reflect the new cadence automatically.
Navigating between master and instances
An instance’s detail page shows a “Part of recurring series” link that navigates back to the master list, making it easy to manage the schedule without hunting for the original template.
Deleting a recurring master list
When the master list is deleted, the system prompts for scope:
| Choice | What happens |
|---|---|
| Just this list | Deletes only the master. Existing instances become standalone lists and are not affected. No new instances will be created since the master is gone. |
| Entire series | Deletes the master and every instance at any status — including currently Active lists. This is irreversible. |
Deleting a recurring instance
When an individual instance is deleted, the system also prompts for scope:
| Choice | What happens |
|---|---|
| Just this instance | Removes only this instance. The master and the schedule are unaffected; the series continues normally. |
| Entire series | Deletes the master and every instance at any status — including currently Active lists. This is irreversible. |
List Attachments
Requires:
attachments_enabledfeature flag
When enabled, members can attach files (images and documents) to task lists. Supported types include JPEG, PNG, WebP, and common document formats. Images are resized on the server before storage. Each file has a size limit of 20 MB, with a maximum of 20 attachments per list.
| Action | User | Admin / Root |
|---|---|---|
| View attachments | ✓ (on lists they can see) | ✓ |
| Upload attachments | ✓ (on lists they can see) | ✓ |
| Delete attachments | Creator of the attachment only | ✓ |
Comments
Members can leave comments on task items to add context, ask questions, or record notes. Comments are visible to anyone who can see the list. There is no editing — to correct a comment, delete it and re-post.
| Action | User | Admin / Root |
|---|---|---|
| View comments | ✓ (on lists they can see) | ✓ |
| Add a comment | ✓ (on lists they can see) | ✓ |
| Delete own comment | ✓ | ✓ |
| Delete any comment | ✗ | ✓ |
Support notes
- If a Team Admin says they can’t assign a member to a list, check that the target member belongs to one of the Team Admin’s teams. Team Admins can only assign within their own team scope — they cannot assign account-wide.
- If a User can’t see a list, first check the Mine / All toggle — lists they can see but aren’t assigned to only appear in All. If the list is still missing and
teams_enabledis on, check the list’s team association (visible in the list detail sidebar). A list is visible to a member only if the list’s team matches one of the teams the member belongs to. Lists with no team association are only visible to the creator and Root. - If a member was recently added to a team but still can’t see that team’s lists, they may need to refresh the app. If the issue persists, verify their team membership is saved on the Teams page.
- If a User can’t complete an item they picked up, check they are on the list’s assignee list.
- If a User says they can edit items but cannot delete them, that is correct — only the list creator (or Admin or Root) can delete items. Assignees who are not the list creator have edit but not delete rights on items.
- If a User can’t edit or delete their own personal list, verify they are the list creator. Users can fully edit and delete task lists they created.
- If a User gets “This item requires approval” when trying to mark done, the item has approval required. The member must use Submit for Approval instead; only an admin can approve it.
- If a User can’t submit for approval because “attachment required”, they need to upload at least one file to the item first via the Attachments action.
- If an item is stuck in DOING and the member is unavailable, an Admin or Root can reset it to TODO.
- Templates and their spawned instances are separate — editing a template after spawning does not change already-spawned lists.
- The Requires Approval toggle only appears on the item form when
approval_enabledis on for the account. - If an instance is missing after a period should have started, instances are created automatically within the hour. If it still hasn’t appeared, an Admin or Root can manually trigger creation via the Activate Next Instance button on the master list’s detail page, or by tapping the scheduled event on the calendar and choosing Activate Now.
- Stopping recurrence does not delete any lists — it only clears the recurrence rule on the master. All existing instances stay as standalone Active lists. If an admin wants to remove them, they must delete each one manually.
- If a member reports that a list has disappeared, check whether it was archived. Archived lists are hidden from the default view and only visible when the Archived toggle is active.
- Archiving a project-linked list does not affect that project’s point or cost totals. The list’s data always counts toward the project rollup regardless of archive status.
- Changing a recurrence schedule does not affect existing instances. Only future periods are recalculated.
- The monthly frequency preserves end-of-month behavior: a list due Jan 31 will always land on the last day of each month, not a fixed day-31 (which would skip months that don’t have 31 days).