novosga/panel-bundle
PHP/Symfony bundle for Novo SGA that adds the panel module, wiring routes, menu entries, and UI components so queue-management applications can expose panel features consistently alongside the core bundles.
The first thing to internalise: novosga/panel-bundle is a Symfony bundle, not a Laravel package. There is no service provider to register, no vendor:publish, no Blade views, no config/panel.php. "Getting started" means standing up a separate NovoSGA panel process and integrating with it over an HTTP boundary. Plan for that before you plan a single line of Laravel code.
Minimal path, in order:
composer.json on the v2.3.0 tag before anything else. Note the php constraint and the symfony/* + novosga/core-bundle pins — this is the go/no-go check for your environment, and it tells you what else the panel expects to sit next to.composer.json.NovosgaClient class (base URI, timeout, retry, typed DTOs) behind an interface, faked in tests. Your first use case is: issue a ticket from Laravel, confirm it appears in the panel queue, then call it from the panel and confirm Laravel can read the state back.Where to look first when something is wrong: the panel's var/log/dev.log and the Symfony profiler. Never storage/logs/laravel.log — the panel does not write there.
Sidecar service, always. Run the panel as its own container/process with its own composer.json and its own lifecycle. Your Laravel app talks to it over HTTP; it does not share a process, an autoloader, or a database connection. This one decision eliminates the entire class of Symfony/Laravel dependency-conflict problems and lets each app upgrade independently.
Wrap every call in a client. A NovosgaClient bound to an interface, configured from config/services.php, with timeout + retry + a fake()-able test double. Controllers and jobs never touch Http:: against the panel directly. When the panel's minor version changes something, you fix one class.
Auth bridging — pick one, document it.
framework.session.cookie_domain in the panel to the parent domain, and make sure X-Forwarded-Proto/X-Forwarded-Host are trusted on both sides.usuario records and expects them. Sync attendants into NovoSGA from a Laravel listener on user create/update, or from a scheduled job — one direction only, Laravel as the source of truth for identity.Read-model sync for reporting. If you need queue state inside Laravel (dashboards, notifications, SLA timers), poll the panel on a schedule into local tables. Do not join across to the NovoSGA schema from Eloquent, and do not point a second Laravel DB connection at it. Keeping your migrations independent of the bundle's schema is what makes upgrades boring.
Theming and UI changes go through Twig overrides. Panel customisation is Symfony-native: override Twig templates and adjust bundle config under config/packages/. Keep every override in a small, documented, version-pinned overlay directory so a v2.3.x bump doesn't silently break the panel at 9am.
Compose your dev environment. A docker-compose.yml with the panel, its database, and a seeded attendant account belongs in your repo. Every Laravel dev should be able to run the integration locally without reading NovoSGA docs.
Lifecycle events are the supported extension seam. If you need to react to ticket/attendance events inside the panel's world, use Symfony event listeners registered in the panel root — not monkey-patching services.
2.3.0, not ^2.3. Given the silent release notes, an unattended composer update in the panel root is an unplanned production change.symfony/* components. Separate Composer roots make this impossible; a merged composer.json makes it inevitable.framework.session.cookie_domain, cookie SameSite (panel and Laravel must agree, and SameSite=None requires Secure), and the proxy's forwarded headers. Debug the session config before you debug the auth code — it's almost never the auth code.var/log/dev.log in the panel root, plus the Symfony profiler. A blank panel page is nearly always a Twig render exception recorded there.config/packages/, and Symfony event listeners. Anything beyond those is reaching into internals and will break on a minor bump — budget for it or avoid it.symfony/* and core-bundle pins → run the panel's own login/pull-ticket flow → bump the pin. Never on main on a Friday.How can I help you explore Laravel packages today?