Skip to content

About

Symfony bundle for personal and team time tracking with browser extension and Tauri desktop agent APIs.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

154 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TimeTrack Bundle

CI Packagist Version Packagist Downloads License PHP Symfony GitHub stars Coverage

⭐ 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.

FrankenPHP Friendly Worker Mode

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 (Bearer session 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 for nowo-tech/task-board-bundle)
  • Symfony events for timer start/stop and entry ACL
  • Ops: nowo:time-track:client-tokens:purge for 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 calendar entries (lock and overlap aware), POST entries, resolve-keys for the desktop's local mode, and GET me/meetings over 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
Timer page in the demo: navigation (Board / Timer / Reports), Timer started flash, page header with the running task and its start time, Running status badge and Stop button, table of trackable tasks with their board, Symfony web debug toolbar Reports page in the demo: page header with the report period, table of time entries (task, start time, duration in minutes, source badge), Symfony web debug toolbar
Default device verification page (client API 1.9): page header Connect a device with Approve and Deny buttons, request card with device name, client, permissions (scopes) and expiry, Symfony web debug toolbar

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

Additional documentation

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.

About

Symfony bundle for personal and team time tracking with browser extension and Tauri desktop agent APIs.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages