Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/0m1n3m/contacts-db/llms.txt

Use this file to discover all available pages before exploring further.

The Kanban board gives your team a real-time visual overview of every task’s progress. It organizes tasks into five columns — one per status — and lets you move cards by dragging and dropping them. Dragging a card to a different column automatically triggers a status change, while dragging within the same column updates the display order. Access the board at GET /tasks/board; no extra parameters are required to load the default view.

Board columns

The board always renders five columns in the following fixed order, matching the TaskStatus enum values:
#ColumnStatus value
1Createdcreated
2Acceptedaccepted
3In Progressin_progress
4In Reviewin_review
5Donedone
Each column is loaded independently by TaskBoardController. Tasks within a column are sorted first by sort_order ascending, then by id ascending as a tiebreaker.

Drag and drop

Moving a card to a different column (status change)

When you drag a task card from one column to another, the board sends a PATCH request to update the task’s status and refresh the sort order of both affected columns simultaneously:
PATCH /tasks/{task}/change-status
Request body:
{
  "status": "in_progress",
  "from_ordered_task_ids": [3, 1, 5],
  "to_ordered_task_ids": [7, 2]
}
FieldTypeDescription
statusstringThe target status value: created, accepted, in_progress, in_review, or done
from_ordered_task_idsarray<int>IDs of tasks remaining in the source column, in the order they appear after the card was removed
to_ordered_task_idsarray<int>IDs of tasks in the destination column, in the order they appear after the card was inserted
The server calls ChangeTaskStatusAction to validate the transition against the actor’s role, update time-tracking fields, and dispatch status-change notifications. It then writes the new sort_order for every task in both arrays.
Sort order values are stored as multiples of 10 (10, 20, 30, …). This gap-based scheme allows new cards to be inserted between existing ones without rewriting every record in the column — a card dropped between positions 20 and 30 can be assigned sort order 25 without touching its neighbours.

Reordering within the same column

When you drag a card to a new position within its existing column (no status change), the board sends:
PATCH /tasks/{task}/move
Request body:
{
  "to_status": "in_progress",
  "from_ordered_task_ids": [3, 5, 1],
  "to_ordered_task_ids": [3, 5, 1]
}
FieldTypeRequiredDescription
to_statusstringYesThe target status value (must match the task’s current status for a pure reorder)
from_ordered_task_idsarray<int>NoIDs of tasks in the source column after the move; validated with sometimes so it may be omitted if the drag event fires before the source column is resolved
to_ordered_task_idsarray<int>YesIDs of tasks in the destination column in their new order
If the to_status value matches the task’s current status, only the sort order is updated and no status transition is recorded. If to_status differs from the current status (which can happen in edge cases), ChangeTaskStatusAction is invoked before the reorder.

Filtering by project

The current TaskBoardController loads tasks across all projects — there is no project_id query parameter supported on the board endpoint. To work with tasks scoped to a single project, use the task list (GET /tasks) or filter from the project detail page (GET /projects/{id}). The Task model does expose a scopeKanbanColumn scope that accepts a nullable project_id for use in custom queries:
// Fetch all in_progress tasks for project 12, sorted for Kanban display
Task::kanbanColumn(projectId: 12, status: TaskStatus::InProgress)->get();

Task card information

Each card on the board surfaces a concise summary of the task:

Title

The task’s title, truncated if it overflows the card width.

Priority badge

A colour-coded badge for critical, high, normal, or low priority.

Assignees

Avatar stack showing all assigned users. Cards include an assigned_to_me boolean flag so the current user’s assignments are highlighted.

Due date

Shown when due_at is set; displayed in a warning colour when overdue.
The board loads only the fields needed for card rendering (id, title, sort_order, status, project_id, created_by, priority), keeping the initial page payload small. Full task details are fetched on demand when a card is opened.

Kanban visibility rules

TaskBoardController loads all tasks for each status column regardless of the viewer’s role — it does not apply the scopeVisibleTo scope. Every authenticated user therefore sees every card in every column. The assigned_to_me boolean flag is computed per-card (based on the task_assignments pivot) so the UI can visually highlight a user’s own assignments, but cards belonging to others are still rendered. For strictly role-filtered task listings, use the task list (GET /tasks), which does apply scopeVisibleTo. For full details on role-based task visibility, see Managing Tasks.

Build docs developers (and LLMs) love