nowo-tech / time-track-bundle
Symfony bundle for personal and team time tracking with browser extension and Tauri desktop agent APIs
Package info
github.com/nowo-tech/TimeTrackBundle
Type:symfony-bundle
pkg:composer/nowo-tech/time-track-bundle
Requires
- php: >=8.2 <8.6
- doctrine/doctrine-bundle: ^2.10 || ^3.0
- doctrine/orm: ^3.7
- nowo-tech/form-kit-bundle: ^2.14
- nowo-tech/ui-kit-bundle: ^2.29
- psr/clock: ^1.0
- psr/log: ^1.1 || ^2.0 || ^3.0
- symfony/clock: ^7.4 || ^8.0
- symfony/config: ^7.4 || ^8.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/form: ^7.4 || ^8.0
- symfony/framework-bundle: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/routing: ^7.4 || ^8.0
- symfony/security-bundle: ^7.4 || ^8.0
- symfony/translation: ^7.4 || ^8.0
- symfony/twig-bundle: ^7.4 || ^8.0
- symfony/validator: ^7.4 || ^8.0
- symfony/yaml: ^7.4 || ^8.0
- twig/extra-bundle: ^3.12
- twig/string-extra: ^3.12
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- igor-php/igor-php: ^0.10.0
- nowo-tech/phpstan-frankenphp: ^1.0
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^10.0
- rector/rector: ^2.0
- symfony/browser-kit: ^7.4 || ^8.0
- symfony/css-selector: ^7.4 || ^8.0
- symfony/http-client: ^7.4 || ^8.0
- vincentlanglet/twig-cs-fixer: ^4.0
Suggests
- nowo-tech/task-board-bundle: Integrated task list, ACL, and team/manager context for time tracking.
- symfony/http-client: Calendar suggestions in server mode (Google / Microsoft 365 adapters, since 1.14).
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v1.16.2
- v1.16.1
- v1.16.0
- v1.15.0
- v1.14.0
- v1.13.0
- v1.12.0
- v1.11.0
- v1.10.3
- v1.10.2
- v1.10.1
- v1.10.0
- v1.9.2
- v1.9.1
- v1.9.0
- v1.8.0
- v1.7.0
- v1.6.0
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.7
- v1.3.6
- v1.3.5
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.0
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-fix/1.16.2-ledger-chain
- dev-fix/1.16.1-move-locks
- dev-feat/1.16.0-move-imported-owners
- dev-feat/1.15.0-former-people
- dev-feat/1.13.0-b4-client-api-ui
- dev-feat/1.13.0-b1-model-lock
- dev-feat/1.13.0-b2-balance-ledger
- dev-feat/1.13.0-b3-timesheets
- dev-feat/1.12.0-days-off
- dev-fix/1.12.0-audit-fj-followups
- dev-feat/1.11.0-imported-entries
- dev-chore/symfony-security-2026-11-04
- dev-fix/1.10.3-note-tweaks
- dev-fix/1.10.2-notes
- dev-feat/1.10.1-keep-note-user-can-disable
- dev-fix/flaky-offset-test
- dev-feat/1.10.0-client-api-v0.3
- dev-fix/1.9.2
- dev-fix/req-twig-005
This package is auto-updated.
Last update: 2026-11-07 10:16:09 UTC
README
⭐ 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.
Features
- Web UI at
/tools/time-track(timer + paginated reports) - Stateless client API for the browser extension and the desktop app (
Bearersession tokens linked to host credentials, scopes, per-request credential and task checks, device flow, rate limits, audit events) — reference - 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 - Working time and timesheets (1.13, opt-in): hours balance and overtime from a host working calendar and worked time (register or task time, labelled), an append-only balance ledger, weekly timesheets with submit / approve / reject and an audited reopen, a hard period lock on every write path, SHA-256 chained audit trails, tenant scopes, the workday / balance / timesheet client API and configurable Twig components (WORKING-TIME.md).
- Calendar suggestions, manual entries and meetings (1.14, opt-in): read-only Google / Microsoft 365 adapters of the
primary calendar (host-held tokens, minimal fields), task-key matching and literal user rules, dailies grouped per
week, suggestions accepted into
calendarentries (lock and overlap aware),POST entries,resolve-keysfor the desktop's local mode, andGET me/meetingsover a host meeting read model with strict privacy filters (CLIENT-API, MEETINGS.md).
Installation
composer require nowo-tech/time-track-bundle
# config/packages/nowo_time_track.yaml nowo_time_track: user_class: App\Entity\User clients: enabled: true
See Installation.
Demo
Integrated demo with TaskBoardBundle (kanban + timer):
make -C demo up-symfony8 # Timer UI: http://localhost:8024/tools/time-track # Demo started at: http://localhost:8024
- Timer UI:
/tools/time-track - Task board:
/tools/task-board - Login:
demo@example.com/demo
|
|
|
End-to-end tests (Playwright, REQ-DEMO-013) and the screenshots:
make -C demo/symfony8 test-e2e # timer page, start / stop, reports make -C demo/symfony8 demo-screenshots # refreshes docs/images/demo/*.webp
With TaskBoard only, configure nowo_time_track.task_provider: nowo_task_board.task_provider — see TaskBoard integration.
Documentation
- Installation
- Configuration
- Usage
- Templates (UiKit page contract)
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
Additional documentation
- Demo with FrankenPHP (includes worker mode)
- GitHub Actions CI requirements
- PSR evaluation (REQ-CS-007)
- Client API reference
- Working time, balance and timesheets
- Meetings API (host guide)
- Browser extension
- Desktop agent (Tauri) —
desktop/tray app - TaskBoard integration
- Roadmap
Tests and coverage
make test
make test-coverage
make release-check
- PHP: 100% lines — controllers, Doctrine repositories and listeners included (functional tests on in-memory SQLite,
tests/Functional/); only pure interfaces are excluded (phpunit.xml.dist) - TS/JS: N/A (desktop agent lives in
desktop/, outside bundle PHP coverage) - Python: N/A
License
MIT — see LICENSE.



