⭐ Found this useful? Give it a star on GitHub so more developers can find it.
Symfony bundle for task boards, teams, and managers (kanban, list, Gantt). Optional integration with TimeTrackBundle for timers and time aggregation.
This bundle is FrankenPHP worker mode friendly (worker mode with kernel not reset between requests — see FRANKENPHP-WORKER-AUDIT.md).
- Boards, columns, tasks, teams, and team members (manager/member roles)
- Task import from ClickUp, Jira, and Trello (CSV/JSON) via manage UI or
nowo:task-board:import - Web UI at
/tools/task-board(kanban, list, Gantt, task detail) - Vite + Stimulus assets for board interactions
- Multi-tenant hosts (1.10, opt-in): boards per tenant under the host's own URLs (
tenancy.tenant_paths), links from tasks to host objects (issues, orders…) with a resolver, an assignee provider, events after every task write, and template blocks / partials with a recursive subtask tree — see Usage - Columns and task panel (1.11): column icons, rename / colour / delete, reusable column sets (save a board's columns, apply them to a new or existing board), and a task panel fragment for side drawers (
data-task-panel-urlon cards, list rows and Gantt bars); no inline styles in the templates — see Usage - Comments and @mentions (1.16): comments interleaved with the task activity, @mentions of the people who can read the task (host resolver), events to notify them — see Usage
- Dependencies, time and Gantt scales (1.15): add / remove dependencies with cycle checks, time tracking with the estimate deviation, list time columns, Gantt in hours / days / weeks / months with a configurable week start — see Usage
- Provider sync with ClickUp (1.23, opt-in; full import 1.25): follow a ClickUp list, folder or space; since 1.25 people are mapped through a per-tenant directory (verified e-mails, a mapping never grants access), with creator and creation date, assignees, watchers, checklists, comment authors, status types and tracked time handed to the host — see sync.md. The bundle only reads ClickUp (
GET) and never stores a token. ClickUp returns other people's tracked time only to workspace owners and admins: with a member token only the token user's own time is imported. - Optional TimeTrack integration — task provider, team context, and automatic
total_time_secondsaggregation when TimeTrack is installed
composer require nowo-tech/task-board-bundleFor time tracking, also install TimeTrack and wire the providers:
composer require nowo-tech/time-track-bundle# config/packages/nowo_time_track.yaml
nowo_time_track:
task_provider: nowo_task_board.task_provider
team_context_provider: nowo_task_board.team_context_providerSee Installation.
make -C TimeTrackBundle/demo up-symfony8
# http://localhost:8024/tools/task-board
# http://localhost:8024/tools/time-trackLogin: demo@example.com / demo
- Installation
- Configuration
- Usage
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
- PSR evaluation (REQ-CS-007)
- GitHub Actions CI requirements
- Demo notes
- FrankenPHP worker audit
- Import export guides (ClickUp, Jira, Trello)
make test
make test-coverage
make test-ts
make release-check| Language | Suite | Coverage | Gate |
|---|---|---|---|
| PHP | PHPUnit 10: unit + functional (HTTP pages and writes, Doctrine repositories on SQLite; MySQL in CI), make test-coverage |
100% lines (4831/4831) | make test-coverage-100 / scripts/check-coverage.php (100%, CI coverage job) |
| TS/JS | Vitest + v8, make test-ts (prints the global % with .scripts/ts-coverage-percent.sh) |
100% (min of statements / branches / functions / lines; 148/148 lines) | vitest.config.ts thresholds (100%) |
| Python | — | N/A | — |
Figures from CI (ci.yml, coverage job, PHP 8.2 + Symfony 7.4) on 2026-11-01. Only src/Resources (Twig,
translations, config, built assets) is outside the PHP measure; see CONTRIBUTING.
MIT — see LICENSE.
