The Kanban Board extension provides visual task management with customizable boards, filters, and drag-and-drop functionality. It’s perfect for organizing tasks across different projects, priorities, or workflows.
Features
- Visual Task Management - Drag-and-drop interface for moving tasks between states
- Multiple Boards - Configure different boards for different contexts (work, personal, projects)
- Smart Filters - Show only tasks matching specific criteria
- Real-time Updates - Changes sync immediately with your notes
- Property Integration - Works seamlessly with notd’s property system
Board Configuration
The Kanban extension is configured through /extensions/kanban_board/config.json:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| {
"featherIcon": "trello",
"boards": [
{
"id": "all_tasks",
"label": "All Tasks",
"filters": []
},
{
"id": "work_tasks",
"label": "Work Tasks",
"filters": [
{"name": "type", "value": "work"}
]
}
]
}
|
Board Properties
- id - Unique identifier for the board
- label - Display name shown in the board selector
- filters - Array of property filters to apply
Filter Configuration
Filters restrict which tasks appear on each board:
1
2
3
4
| {
"name": "priority", // Property name to filter by
"value": "high" // Value that must match
}
|
Task Columns
The Kanban board displays tasks in columns based on their status:
- TODO - Tasks to be done
- DOING - Tasks in progress
- DONE - Completed tasks
- SOMEDAY - Future tasks
- WAITING - Tasks waiting on dependencies
- CANCELLED - Cancelled tasks
- NLR - No longer required
Using the Kanban Board
Creating Tasks
Tasks are created as notes with status keywords:
1
2
3
| TODO Implement user authentication {type::work} {priority::high}
DOING Write documentation {type::work}
DONE Fix login bug {type::work} {priority::urgent}
|
Task Properties for Filtering
Use properties to organize tasks across boards:
1
2
3
4
5
6
7
| TODO Review project proposal {
type::work
priority::high
category::review
assigned::john
estimate::2h
}
|
Moving Tasks
- Drag and drop tasks between columns to change their status
- Changes are automatically saved to your notes
- Task content and properties are preserved
Board Examples
Project-Based Boards
1
2
3
4
5
6
7
| {
"id": "project_alpha",
"label": "Project Alpha",
"filters": [
{"name": "project", "value": "alpha"}
]
}
|
Use with tasks like:
1
2
| TODO Design user interface {project::alpha} {sprint::1}
DOING Implement backend API {project::alpha} {assigned::dev-team}
|
Priority-Based Boards
1
2
3
4
5
6
7
| {
"id": "urgent_tasks",
"label": "Urgent Tasks",
"filters": [
{"name": "priority", "value": "urgent"}
]
}
|
Perfect for focusing on high-priority work:
1
2
| TODO Fix production bug {priority::urgent} {severity::critical}
TODO Client presentation {priority::urgent} {due::today}
|
Team-Based Boards
1
2
3
4
5
6
7
| {
"id": "john_tasks",
"label": "John's Tasks",
"filters": [
{"name": "assigned", "value": "john"}
]
}
|
Track individual workloads:
1
2
| TODO Code review {assigned::john} {type::development}
DOING Feature implementation {assigned::john} {estimate::5h}
|
Advanced Configuration
Multiple Filters
Combine multiple filters for precise task selection:
1
2
3
4
5
6
7
8
| {
"id": "urgent_work",
"label": "Urgent Work Tasks",
"filters": [
{"name": "type", "value": "work"},
{"name": "priority", "value": "urgent"}
]
}
|
Custom Icons
Change the extension icon by modifying the featherIcon value:
1
2
3
| {
"featherIcon": "check-square" // or "list", "grid", etc.
}
|
Integration Tips
With Journal Pages
Use daily pages to plan tasks:
1
2
3
4
5
6
7
8
9
10
| # 2024-07-18
## Today's Tasks
TODO Morning standup {type::work} {board::daily}
TODO Review pull requests {type::work} {priority::high}
DOING Documentation update {type::work}
## Personal
TODO Grocery shopping {type::personal}
SOMEDAY Learn new framework {type::personal}
|
With SQL Queries
Create dynamic task reports:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| SQL{
SELECT
SUBSTR(N.content, 1, 50) as task,
CASE
WHEN N.content LIKE 'TODO%' THEN 'TODO'
WHEN N.content LIKE 'DOING%' THEN 'DOING'
WHEN N.content LIKE 'DONE%' THEN 'DONE'
END as status,
Prop.value as priority
FROM Notes N
LEFT JOIN Properties Prop ON N.id = Prop.note_id AND Prop.name = 'priority'
WHERE N.content REGEXP '^(TODO|DOING|DONE)'
ORDER BY
CASE Prop.value
WHEN 'urgent' THEN 1
WHEN 'high' THEN 2
WHEN 'medium' THEN 3
ELSE 4
END
}
|
With Templates
Create task templates for recurring workflows:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # Sprint Planning Template
## Sprint Goals
TODO Define user stories {type::work} {sprint::current}
TODO Estimate story points {type::work} {sprint::current}
TODO Assign tasks to team {type::work} {sprint::current}
## Development Tasks
TODO Set up development environment {type::work} {category::setup}
TODO Create database migrations {type::work} {category::backend}
TODO Implement API endpoints {type::work} {category::backend}
## Testing & Review
TODO Write unit tests {type::work} {category::testing}
TODO Code review {type::work} {category::review}
TODO User acceptance testing {type::work} {category::testing}
|
This template can be used to quickly set up new sprint boards with consistent task structure.