⭐ Found this useful? Give it a star on GitHub so more developers can find it.
Symfony bundle for personal and team time tracking: one active timer per user, task references via TaskBoardBundle, browser extension API, and Tauri desktop agent API.
This bundle is FrankenPHP worker mode friendly.
- Web UI at
/tools/time-track(timer + reports) - REST API for browser extension and Tauri desktop (
Bearerauth) - Single active timer per user (409 on conflict)
- Teams and managers v1 via
TeamContextProviderInterface - Task integration via
TaskProviderInterface(designed fornowo-tech/task-board-bundle) - Symfony events for timer start/stop and entry ACL
- Ops:
nowo:time-track:client-tokens:purgefor expired browser/desktop tokens
composer require nowo-tech/time-track-bundle# config/packages/nowo_time_track.yaml
nowo_time_track:
user_class: App\Entity\User
clients:
enabled: trueSee Installation.
Integrated demo with TaskBoardBundle (kanban + timer):
make -C demo up-symfony8
# Demo started at: http://localhost:8024/tools/time-track- Timer UI:
/tools/time-track - Task board:
/tools/task-board - Login:
demo@example.com/demo
With TaskBoard only, configure nowo_time_track.task_provider: nowo_task_board.task_provider — see TaskBoard integration.
- Demo with FrankenPHP (includes worker mode)
- GitHub Actions CI requirements
- Installation
- Configuration
- PSR evaluation (REQ-CS-007)
- Usage
- Browser extension
- Desktop agent (Tauri) —
desktop/tray app - TaskBoard integration
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release process
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
make test
make test-coverage
make release-check- PHP: 100% lines (justified exclusions: controllers, Doctrine repositories/listeners, integration interfaces)
- TS/JS: N/A (desktop agent lives in
desktop/, outside bundle PHP coverage) - Python: N/A
MIT — see LICENSE.
