eveseat/web
Laravel package that supplies the SeAT web interface for EVE Online: routes, views, assets, menus, and user-facing pages for managing corporations, alliances, and authenticated pilots. Integrates with SeAT core services and permissions.
eveseat/web is the UI layer of SeAT — not a standalone app. It ships controllers, routes, Blade layouts, Vue components, and the sidebar/menu wiring that the rest of SeAT renders into. You'll almost always consume it as part of a full SeAT install rather than in isolation.
Minimal steps:
composer require eveseat/web (or install SeAT, which pulls it in), then php artisan vendor:publish and php artisan migrate if the package registers its own assets/migrations.npm install && npm run prod from the SeAT root) so Vue components and CSS land in public/.php artisan route:list | grep -i seat.Where to look first:
EveSeat\Web\WebServiceProvider and any nested providers). It is the map: it registers routes, loads views, binds the sidebar/menu, registers ACL permissions, and publishes assets. Read boot() and register() before touching anything else.src/Http/Routes/ — every URL and its middleware stack (web, auth, acl:...).src/Resources/views/ — the master layout and page Blade files.src/Resources/assets/js/ (or js/) — Vue entry points and component registration.First use case: add a page to the sidebar. Register a route → point it at a controller → return a Blade view that @extends the package layout → add a menu entry via the package's sidebar/menu service in a service provider. That loop exercises every integration point you'll need later.
Thin controllers, domain logic in eveseat/services. The web package is presentation + HTTP. Business rules (ESI calls, character/Corporation data) belong in eveseat/services or your own plugin; controllers should resolve, authorize, and delegate.
Sidebar/menu registration. Rather than editing the package, register entries from your own service provider's boot() using the menu/sidebar facade or handler the package exposes. This keeps plugin navigation upgrades-safe.
Views extend the master layout. Page views use the package's layout (@extends('web::layouts.app')-style) and fill @section('content'). Publish views if you need to override, and load them with a higher-priority namespace so yours win.
ACL middleware + Blade gates. Routes use acl:<permission> in the middleware group; views use @can('<permission>'). Define new permissions in your provider so they appear in SeAT's role management UI — don't hardcode role checks.
Vue where it's interactive, Blade elsewhere. Mount components into Blade divs (<div id="app-x"></div>) and hit JSON routes with axios. Keep the axios base URL aligned with the route group's prefix so CSRF and auth middleware apply consistently.
Route grouping mirrors the package. Follow the same grouping conventions (web vs api, prefix, middleware arrays) so your plugin routes behave identically to core ones and show up correctly in route:list.
Feature-test against real routes. Because routing, middleware, and views are all wired through the provider, a plain Laravel feature test that $this->actingAs($user)->get(route(...)) catches most integration mistakes early.
php artisan route:clear && php artisan view:clear && php artisan config:clear. A missing sidebar entry is almost always a stale cache.npm run prod after any JS/CSS change; if the package publishes assets, re-publish. Stale assets are the second most common "why isn't my change showing" cause.auth must precede acl:*; reversing them produces confusing redirects instead of 403s.eveseat/web is tightly coupled to eveseat/services, the ACL package, and the Laravel major it was built for. A minor bump on one can break the others — pin and upgrade together.vendor/. Use the package's publish hooks for views/assets, service providers for registration, and events/view composers for injection. Direct edits vanish on composer update.register/boot), the sidebar/menu handler, view composers, and Laravel events fired by the package. These are the sanctioned seams; anything else is fragile.php artisan route:list (is the route there?), middleware stack (is it blocked?), view:clear (is the view stale?), then browser console (did the Vue component mount?). That order resolves most issues fast.How can I help you explore Laravel packages today?