baks-dev/users-table
BaksDev UsersTable is a user timekeeping and attendance module for PHP 8.4+ projects. Install via Composer, publish assets, and apply Doctrine migrations to get started. Test with PHPUnit using the users-table group. MIT licensed.
Architecture fit
The packaged evidence contradicts the framing in the secondary assessment documents. The README is a 20-line, Russian-language note describing a "модуль табельного учета пользователя" (user timesheet/attendance module) and gives install steps via php bin/console baks:assets:install, doctrine:migrations:diff, and doctrine:migrations:migrate. That is the Symfony Console and Doctrine ORM, not Artisan and Eloquent. There is no artisan invocation, no service provider, no facade, and no Eloquent model anywhere in the primary source. The Laravel-flavoured snippets in assessment-laravel_dev.md (UsersTable::recordAttendance(...), app/Models/UserAttendance.php, php artisan vendor:publish) are not corroborated by the repository and should be treated as speculative, not as an API contract.
Architecturally, this is a domain module inside the broader baks-dev package constellation (users, core, assets), designed to bolt onto an existing user entity inside a Symfony monolith using Doctrine. It fits that shape cleanly and poorly fits anything else.
Integration feasibility
baks-dev/users: feasible. Install, publish assets, generate and review the migration, wire the module to your user identifier type.baks-dev/users package and its identifier conventions. Verify the hard dependency graph before committing.doctrine/dbal, community migration bridges) but you would be running two ORMs and two migration histories against one schema. The facade examples cannot be assumed to exist; there is no published Laravel service provider to publish.Technical risk
| Risk | Severity | Notes / mitigation |
|---|---|---|
| Framework mismatch with the stated "Laravel package" framing | High | Verify on a throwaway Symfony install first. Do not plan Laravel work against unverified facade docs. |
| Bus factor / abandonment | High | 0 stars, 0 dependents, single release tag (v7.4.3), one maintainer. Fork and vendor on day one. |
| Undocumented schema and public API | High | No API docs, no changelog beyond a version-stub release note. Reverse-engineer entities and migration SQL before estimating. |
| Supply chain / provenance | Medium | MIT license is permissive, but run composer audit, pin an exact version and commit hash, and confirm the Packagist publisher identity. |
| Metadata integrity | Medium | The stated last-release date (2026-06-01) is not independently verifiable from the supplied evidence; confirm against Packagist before planning around it. |
| Personal data exposure | Medium | Timesheet data is employee personal data. Confirm retention, deletion, and export paths exist or plan to build them (GDPR / local labour-law obligations). |
| PHP 8.4 floor | Low–Medium | Forces your runtime forward; fine on new builds, disruptive on an existing 8.2/8.3 fleet. |
Key questions
baks-dev/users and baks-dev/core, and if so, what versions and identifier types (bigint vs UUID)?final? Can they be extended or overridden without forking?Stack fit
Target: PHP 8.4+, Symfony 6.4/7.x, Doctrine ORM, Twig asset pipeline. Laravel fit is contingent on adding doctrine/dbal plus a bridging layer, and the cost/benefit is poor for a 0-star, 0-dependant package. Recommendation: pursue only on a Symfony/Doctrine stack, and only as a time-boxed spike before any commitment.
Migration path
composer require baks-dev/users-table, then php bin/console baks:assets:install.doctrine:migrations:diff and read the generated SQL before executing it — this is the only reliable view of the schema you are about to inherit.users table: foreign key types, index names, column naming conventions.Compatibility
Confirm supported RDBMS (MySQL vs PostgreSQL), user-identifier type, and whether the asset installer assumes a specific Twig/webpack layout. Timezone handling for recorded timestamps must be verified explicitly — the secondary docs claim a UTC default with a config override, but that is unverified against source. Multi-tenancy is assumed absent until proven otherwise.
Sequencing
Do not run this concurrently with a framework or PHP upgrade. Order: (a) framework-fit spike, (b) schema review and collision test, (c) user-entity attachment, (d) data round-trip with timezone assertions, (e) hardened fork with your own tests, (f) production integration behind a feature flag. Any failure at (a) or (b) is a stop signal, not a workaround prompt.
Maintenance
You will own this code. With 0 stars, 0 dependents and a single release tag, there is no community to absorb upgrades and no realistic expectation of timely upstream fixes. Budget an immediate fork-and-vendor step, plus roughly 0.2–0.5 FTE for the first quarter to add tests, document the schema, and close the gaps the README does not cover. Every future PHP or Symfony major upgrade becomes your problem, not the maintainer's.
Support
No commercial support, no evidenced issue-tracker activity, no English documentation. Someone on the team must read Russian or you must budget translation of the README and inline docblocks. Escalation path is "read the source."
Scaling
Timesheet tables grow as headcount × working days, which is predictable but monotonic. Index on (user_id, date) from the start, pre-aggregate reporting queries rather than scanning raw records, and plan periodic archiving of closed periods (older than the statutory retention window) from day one rather than retrofitting it.
Failure modes
users table → deploy-time failure, potentially destructive if --force is used.baks-dev packages move and this module lags.migrate:fresh in an environment where the seeded/real data assumption is wrong.Ramp-up
One to two engineer-days to get a sandbox install and read the generated schema. One to two weeks to production-readiness on a Symfony/Doctrine stack, including the fork, tests, and timezone verification. Add several weeks and meaningful risk if a Laravel adapter is genuinely required. Recommend a strict time-box on the spike; if the schema review or user-entity attachment does not come clean within it, the correct decision is to build the timesheet domain in-house — the surface area here is small enough that owning it is cheaper than inheriting an unmaintained dependency.
How can I help you explore Laravel packages today?