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.
Every admin page is rendered inside <x-admin-layout> (class App\View\Components\AdminLayout), which renders resources/themes/admin/layouts/app.blade.php:
<x-admin-sidebar /> — the sidebar, built from MenuManager::adminMenus().<x-application-header /> — top bar with user menu and notifications.Breadcrumbs::render() — from routes/breadcrumbs.php (and each module's routes/breadcrumbs.php). The browser title is built from the current breadcrumb.<x-application-alerts /> and <x-application-messages /> — flash messages (->withSuccess(), ->withErrors()).{{ $slot }} — your content.page_header (inside <head>, usually @vite styles), page_scripts (before </body>), and the footer_scripts section.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.
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 group | Visible when the user can… | Sub-entries (route) |
|---|---|---|
| Dashboard | manage dashboard | admin.dashboard |
| Pages | manage page or create page | Create (admin.pages.create), Manage (admin.pages) |
| Posts | manage post, create post, view category or view tag | All posts, New post, Categories, Tags |
| Appearance | manage menus, manage widgets, manage plugins or import website templates | Menus, Widgets, Plugins, Website templates, Template library, plus Theme options (a settings section) |
| Users | manage users or manage roles | Users, Deleted users, Roles |
| Advertisements | manage advertisements or create advertisements | Manage, Create (by type) |
| Settings | manage settings | One child per registered settings section (General, Mail, Cache, … and every plugin's own) |
| Support tickets | view all tickets or manage ticket categories | All, Open, Closed, Categories |
| Languages | manage languages | Translations UI (ltu.translation.index) |
| Patches | application operations | admin.system.patches (badge shows available patches) |
Plugins add their own groups (Booking, TruCommerce, Payments). See Admin menu and dashboard for the API.
All routes below are in routes/admin.php, inside auth, verified, 2fa, with the permission shown as a ->can() on each route.
| Screen | Route names | Controller | Permissions |
|---|---|---|---|
| Dashboard | admin.home, admin.dashboard | Admin\DashboardController | manage dashboard |
| Pages | admin.pages* | Admin\PageController | manage/create/edit/delete page |
| Posts | admin.posts* | Admin\PostsController | manage/create/edit/delete post |
| Categories / Tags | admin.categories*, admin.tags* | CategoryController, TagsController | view/create/edit/delete category|tag |
| Users | admin.users* | Admin\UserController | manage/create/edit users; viewing one user and deleting check view users / delete users, which are not seeded (see Known quirks) |
| Roles & permissions | admin.roles*, admin.permissions* | RolesController, PermissionsController | manage/create/edit/delete roles, manage permissions |
| Menus | admin.menus* | Admin\MenuController | manage/create/edit/delete menus |
| Widgets | admin.widgets.* | Admin\WidgetsController | Sidebar and widgets/sort: manage widgets; controller middleware: view widgets, edit widgets, delete widgets (see Known quirks) |
| Advertisements | admin.advertisements* | AdvertisementsController | manage/create/edit/delete advertisements |
| Settings | admin.settings, admin.settings.update | Admin\SettingsController | manage settings |
| Website templates | admin.website-templates* | WebsiteTemplateController, TemplatePackageController | import website templates |
| Template library | admin.template-library* | TemplateLibraryController | import website templates |
| Page builder API | admin.page-builder.* | PageTemplateController, ShortcodeController, PageBuilderAiController | edit page |
| Plugins | admin.plugins.* | Admin\PluginsController | manage/install/activate/delete plugins |
| System tools | admin.system.*, admin.sitemap.generate | SystemController, SitemapController, UpdateController | application operations, manage updates |
| Support | admin.support.* | TicketController, TicketCategoryController | view all tickets, manage ticket categories |
| Profile & 2FA | admin.profile, admin.password, admin.mfa | Admin\ProfileController | manage profile |
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 name | Where it renders | Registered rows (order) |
|---|---|---|
admin.dashboard (DashboardRegistry::DEFAULT_DASHBOARD) | Admin home | counters (10), module counter rows (14–20), main (30: graph + latest posts), users (50) |
user.dashboard (USER_DASHBOARD) | The visitor account area /user/dashboard | account-overview (10), then module rows (Booking, TruCommerce, TruPayments) |
trucommerce.dashboard, trupayments.dashboard | Each module's own dashboard page | Module 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.
2fa alias on the admin route group; enrolment lives under admin.mfa / admin.twofactor.update.DemoClearance blocks write routes for demo accounts — see Architecture.