vikdiesel/admin-one-laravel-dashboard
Admin One Laravel Dashboard is a free, open-source admin panel starter kit for Laravel built on the Admin One template with Vue.js and Tailwind CSS. It ships with authentication, user management, and a responsive dashboard UI to speed up backend development.
This is a starter kit delivered as a Laravel preset, not a runtime library you use in classes. Treat it as a scaffold you install once, then own the files it publishes.
composer.json constraints are pinned to that line). Do not bolt it onto an existing app until you have read what it overwrites.php artisan admin-one:install). Commit immediately after so the published diff is reviewable.npm install && npm run dev (this era of the package leans on Laravel Mix/webpack, not Vite — check webpack.mix.js before assuming otherwise).resources/js/Pages/Dashboard.vue and the layout components under resources/js/components / Layouts. That is where the sidebar, navbar, and theme wiring live.Inertia::render('Dashboard', [...]), and wire one CRUD screen (list + form) end-to-end so you learn the props/page convention before scaling out.The install is essentially a one-shot; after that your leverage is in the generated Vue/Blade/Sass tree, and the package itself is mostly inert.
Page-based routing. All screens are Inertia pages. Add a route in routes/web.php, return Inertia::render('YourPage', $props), and drop resources/js/Pages/YourPage.vue. No separate API layer is needed for the admin — props are the contract.
Layout composition. Wrap pages in the generated Authenticated/Guest layouts. For persistent chrome (sidebar state, breadcrumbs), pass shared props via HandleInertiaRequests::share() rather than prop-drilling through every page.
Auth and profile. Jetstream (Inertia stack) provides the auth scaffolding; keep its routes and Fortify actions intact and layer your admin routes behind the same auth/verified middleware groups. Customize profile/team screens by overriding Jetstream's published components rather than editing vendor files.
CRUD screen recipe.
Inertia::render('Users/Index', ['users' => UserResource::collection(...)])b-table with paginated for client-side paging, or server-side paging via a ?page= prop if the dataset grows.Inertia.post/put, handle errors prop, and use useForm from @inertiajs/inertia-vue for dirty-state and progress.flash object in HandleInertiaRequests and render it in the layout as b-notification/toast.Theming. Colors and spacing are Sass variables under resources/sass. Change the brand color once in the variables file rather than sprinkling Buefy type="is-primary" overrides. Dark-mode toggling in this template is typically a body class — verify the exact class name in the layout before wiring a toggle.
Extension points.
config/admin-one.php for app name, logo, or route prefixes; anything else you need should be added to your own config file, not the package's.@vite vs Mix, Sanctum changes). Pin your Laravel minor and lock the lockfile.mix(), either keep using Mix (and remove Vite scaffolding) or port the entry points manually. Don't mix both — you will get stale-manifest errors that look like 404s but are asset resolution failures.node-sass/dart-sass combinations break on modern Node. Prefer a recent sass (Dart) and Node 16/18 LTS; check package.json engines before upgrading Node.git commit right after the first install so you can diff and recover anything the command stomps on.vendor/. If you need to change something the package owns, publish it (or fork the repo — 140 stars and a 2021 release means upstream fixes are unlikely) and manage it in your own tree.config/ or route definitions, run php artisan config:clear && php artisan route:clear. Inertia props that "disappear" after caching are usually shared props resolved from a cached config value.data-page attribute on the root div; when a prop arrives as undefined on the Vue side, the cause is almost always a serialization issue (Resource vs array, or Inertia::render receiving an Eloquent collection without a resource wrapper).axios or fetch calls outside Inertia (e.g., for autocomplete), the XSRF cookie must be present — the Jetstream middleware handles it, but plain routes/api.php calls will 419 without withCredentials.jetstream tag and --force.How can I help you explore Laravel packages today?