jeffersongoncalves/filament-help-desk
Filament plugins that add User, Operator, and Admin panels for ticket management on top of jeffersongoncalves/laravel-help-desk. Includes publishing for config, views, and translations. Requires PHP 8.3, Laravel 11.28, and Filament 5.
Architecture fit. Still a presentation-layer package over jeffersongoncalves/laravel-help-desk, but 1.10.0 blurs that boundary slightly: the package now reads a company_name column or accessor from the host application's User model and copies the value onto each new ticket. That is a contract with the consuming app, not just with upstream — the plugin is now opinionated about your user schema. Architecturally it is still the right split (UI separable from domain), but "presentation only" is no longer strictly true, and the copy-at-creation semantics make company name a denormalized snapshot on the ticket rather than a join. That is defensible for auditability ("who did this ticket belong to when it was filed") but it means renames, mergers, and corrections do not propagate, which will surface as a reporting/data-quality conversation later. Fit remains narrow and honest: Filament shop with a ticket desk need. Non-Filament stacks: still reject at triage.
Integration feasibility. Mechanically unchanged for greenfield (Composer, register three panel plugins, publish and run upstream migrations, seed roles, configure mail/storage). Two new integration chores: (1) add a company_name column or accessor to your User model before enabling the feature, and (2) design a category hierarchy, because child categories now group under parents and a parent with active children is no longer selectable — enforced server-side, not just in the form. That second item is a genuine configuration decision, not a code change: someone must decide the taxonomy before tickets are filed against it. The three-panel topology concern stands unchanged; nothing in this release reduces the retrofit cost of mounting resources into an existing panel.
Technical risk. The dominant risk shifted slightly. It is still version lockstep, but 1.10.0 hard-requires upstream ^1.13, which demonstrates that plugin minors gate upstream minors, not just majors. Your composer.lock now needs to pin both packages as a pair, and the "choosing this package chooses your Filament major" observation extends downward: it also chooses your upstream help-desk minor. Secondary risks unchanged in kind: small adoption surface, single maintainer, no third-party production-use evidence. Two offsetting positives in this release: a standardized CI tests workflow (mild evidence the test harness is being taken seriously) and a steady Dependabot/CI maintenance cadence. Notably, feature work is landing on the 1.x branch — the Filament 3 branch — which is a positive signal for teams on Filament 3 (the branch is not dormant) but raises a question about which branch is canonical and whether 2.x/3.x feature parity is intended. New risk introduced: a missing company_name fails soft — tickets silently show the raw company_id rather than erroring, so the defect appears as an ugly UI rather than a broken deploy and can go unnoticed.
Key questions.
company_name read per ticket creation only? If so, what is the backfill story for tickets filed before the column existed — do they render company_id forever?company_name a column, an accessor, or either — and does the package tolerate its absence gracefully (falls back to id) or does the Admin/Operator filter degrade?^1.13 floor: what in 1.13 do we now depend on, and does it carry schema changes?Stack fit. The version matrix gate is unchanged — Filament 5 / Laravel ≥11.28 / PHP 8.3 → 3.x; Filament 4 / Laravel 11 / PHP 8.2 → 2.x; Filament 3 (incl. Laravel 10 or 12) → 1.x — but add a second gate: 1.10.0 requires upstream ^1.13, so pin both packages together and commit the lock. The fact that 1.x is actively receiving features is mildly reassuring for Filament 3 shops, but confirm feature parity expectations with the maintainer before assuming 2.x/3.x will get the company-name and category work on the same timeline.
Migration path. Greenfield: unchanged, plus two new setup steps — define company_name on User, and seed the category taxonomy (parents and children) before opening the desk. Retrofit: the work grows. Beyond ticket/requester/agent/status mapping and user reconciliation, you now need a company-name backfill (derive from your existing org/account data onto the new tickets, or accept that pre-upgrade tickets display ids), and a category normalization pass — existing free-text or flat categories must be mapped into a parent/child tree, and tickets sitting on categories that become parents need a decision. Budget for these as data tasks with a reconciliation report, not as configuration.
Compatibility. Audit the surrounding plugin set as before (Shield/Spatie permissions, tenancy plugins, media library, other panel-registering plugins). Two additions: verify your User model can expose company_name without colliding with an existing accessor or appended attribute, and check whether any existing tenancy implementation conflicts with the package's new company concept — running two notions of "company" (yours for isolation, theirs for display) is a naming and query-scoping trap. Confirm the Filament 5 plugin API surface for the 3.x branch as before.
Sequencing.
laravel-help-desk ^1.13 changelog and migrations; enumerate models, schema, enums, events, extension points.company_name source (column vs. accessor) and confirm graceful fallback for records without it.Maintenance. Two coupled dependency tracks, now demonstrably coupled at the minor level: plugin 1.10.0 → upstream ^1.13. Expect to upgrade both together, and expect the plugin's upstream floor to move ahead of your comfort. Mitigations unchanged and now more important: pin exact versions for both packages, run a CI matrix on the chosen triple, and pre-negotiate fork-and-maintain (MIT, small surface — the real safety net). The release cadence here looks healthy for a single-maintainer project: standardized CI, Dependabot merging, docs landing alongside features.
Support. Unchanged: single maintainer, no commercial backing, best-effort issues, no escalation path. One improvement worth noting — the multi-company README section is the kind of documentation that reduces support load, and the release notes are unusually clear about the breaking-ish prerequisites (upstream version, company_name requirement). Still budget a named internal owner for both packages before adoption.
Scaling. Panels scale like any Laravel admin app; the domain concerns stand (ticket/comment table growth, attachments, search beyond naive LIKE, N+1 in Filament tables, notification fan-out, supervised queue worker as a hard prerequisite). New scaling note: the company filter and column in Admin/Operator will drive a query against company_name, and if that is an accessor rather than a column it cannot be indexed or efficiently filtered at volume — a display-only accessor is fine at hundreds of tickets and a performance problem at hundreds of thousands. Confirm which it is before committing.
Failure modes. Existing list stands (Filament major upgrade breakage, upstream schema changes, migration collisions, guard/route collisions and redirect loops, missing role seeding producing blanket 403s, queue worker down silently dropping notifications and stalling SLA timers, disk misconfiguration, timezone/locale drift in SLA reporting). Add: missing or misnamed company_name producing silent raw-id display rather than an error; accessor-based company filtering degrading Admin table performance at volume; category reparenting leaving tickets stranded on now-unselectable parents (verify edit path preserves them); company-name snapshots going stale after org renames, corrupting reports; and upstream minor floor drifting ahead of the deployed lock during a partial upgrade. Each needs a smoke test — particularly a "ticket with no company" case and a "ticket on a parent category" case.
Ramp-up. Still low-days for a Filament-fluent developer on the code side. The unbudgeted time remains configuration and identity — role mapping, panel topology, notifications/storage — and this release adds two more configuration decisions that are easy to defer and expensive to retrofit: the category taxonomy and the company-name source. For the TPM: approve a time-boxed spike with explicit exit criteria (end-to-end lifecycle across all three personas including a company-named and a company-less ticket, auth validated, notifications delivered, category tree selectable and server-validated), require the upstream ^1.13 floor to be pinned in the lock, and hold adoption contingent on a documented fork contingency and a named internal owner. Treat 0 dependents as "unproven," not "risky."
How can I help you explore Laravel packages today?