⭐ 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 + 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).
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
# 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/*.webpWith TaskBoard only, configure nowo_time_track.task_provider: nowo_task_board.task_provider — see TaskBoard integration.
- Installation
- Configuration
- Usage
- Templates (UiKit page contract)
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
- 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
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
MIT — see LICENSE.



