Admin Panel and Dashboard Internals

The administrative interface at /admin (configurable with APP_ADMIN_URL): how it is assembled, which permission guards each area, and where each screen's code lives.

In the user guide: Admin Panel Overview and Dashboard.

The shell

Every admin page is rendered inside <x-admin-layout> (class App\View\Components\AdminLayout), which renders resources/themes/admin/layouts/app.blade.php:

resources/views/admin/example.blade.php

<x-admin-layout>
    @push('page_header')
        @vite(['Modules/Example/resources/scss/admin/example.scss'])
    @endpush

    <div class="card">
        <div class="card-body">{{ __('example::example.hello') }}</div>
    </div>

    @push('page_scripts')
        @vite(['Modules/Example/resources/js/admin/example.js'])
    @endpush
</x-admin-layout>

Modules wrap this in their own layout component (for example Modules/Booking/resources/views/components/booking-admin-layout.blade.php) to push their Vite assets once.

Sidebar and the permission behind each entry

The core entries are registered by App\Helpers\Admin\AdminAsideMenu inside AdminTheme, once per admin request, only for the entries the current user may see. A user who lacks every permission of a group never gets the group.

Sidebar groupVisible when the user can…Sub-entries (route)
Dashboardmanage dashboardadmin.dashboard
Pagesmanage page or create pageCreate (admin.pages.create), Manage (admin.pages)
Postsmanage post, create post, view category or view tagAll posts, New post, Categories, Tags
Appearancemanage menus, manage widgets, manage plugins or import website templatesMenus, Widgets, Plugins, Website templates, Template library, plus Theme options (a settings section)
Usersmanage users or manage rolesUsers, Deleted users, Roles
Advertisementsmanage advertisements or create advertisementsManage, Create (by type)
Settingsmanage settingsOne child per registered settings section (General, Mail, Cache, … and every plugin's own)
Support ticketsview all tickets or manage ticket categoriesAll, Open, Closed, Categories
Languagesmanage languagesTranslations UI (ltu.translation.index)
Patchesapplication operationsadmin.system.patches (badge shows available patches)

Plugins add their own groups (Booking, TruCommerce, Payments). See Admin menu and dashboard for the API.

Core admin screens → code

All routes below are in routes/admin.php, inside auth, verified, 2fa, with the permission shown as a ->can() on each route.

ScreenRoute namesControllerPermissions
Dashboardadmin.home, admin.dashboardAdmin\DashboardControllermanage dashboard
Pagesadmin.pages*Admin\PageControllermanage/create/edit/delete page
Postsadmin.posts*Admin\PostsControllermanage/create/edit/delete post
Categories / Tagsadmin.categories*, admin.tags*CategoryController, TagsControllerview/create/edit/delete category|tag
Usersadmin.users*Admin\UserControllermanage/create/edit users; viewing one user and deleting check view users / delete users, which are not seeded (see Known quirks)
Roles & permissionsadmin.roles*, admin.permissions*RolesController, PermissionsControllermanage/create/edit/delete roles, manage permissions
Menusadmin.menus*Admin\MenuControllermanage/create/edit/delete menus
Widgetsadmin.widgets.*Admin\WidgetsControllerSidebar and widgets/sort: manage widgets; controller middleware: view widgets, edit widgets, delete widgets (see Known quirks)
Advertisementsadmin.advertisements*AdvertisementsControllermanage/create/edit/delete advertisements
Settingsadmin.settings, admin.settings.updateAdmin\SettingsControllermanage settings
Website templatesadmin.website-templates*WebsiteTemplateController, TemplatePackageControllerimport website templates
Template libraryadmin.template-library*TemplateLibraryControllerimport website templates
Page builder APIadmin.page-builder.*PageTemplateController, ShortcodeController, PageBuilderAiControlleredit page
Pluginsadmin.plugins.*Admin\PluginsControllermanage/install/activate/delete plugins
System toolsadmin.system.*, admin.sitemap.generateSystemController, SitemapController, UpdateControllerapplication operations, manage updates
Supportadmin.support.*TicketController, TicketCategoryControllerview all tickets, manage ticket categories
Profile & 2FAadmin.profile, admin.password, admin.mfaAdmin\ProfileControllermanage profile

The dashboard

The dashboard view is a single line — @dashboard('admin.dashboard') — and everything on it comes from the Dashboard registry. The directive renders rows, and each row renders its items according to their type (widget, include, component or html). Widgets may be rendered synchronously or asynchronously (Arrilot async widgets).

Dashboard nameWhere it rendersRegistered rows (order)
admin.dashboard (DashboardRegistry::DEFAULT_DASHBOARD)Admin homecounters (10), module counter rows (14–20), main (30: graph + latest posts), users (50)
user.dashboard (USER_DASHBOARD)The visitor account area /user/dashboardaccount-overview (10), then module rows (Booking, TruCommerce, TruPayments)
trucommerce.dashboard, trupayments.dashboardEach module's own dashboard pageModule defined

Any plugin can define its own named dashboard with Dashboard::for('myplugin.dashboard') and render it with @dashboard('myplugin.dashboard'). Rows and items accept an optional permission so a widget only appears for users who hold it.

Notifications, profile and security in the admin

Extending the admin panel

Add a sidebar item and dashboard widgetMenuManager, MenuItems, Dashboard registry.Add a settings screenSections, pages and fields.Add permissionsSeed and gate them.Add routes and viewsControllers, layouts and assets.