Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Light Bootstrap Laravel Package

laravel-frontend-presets/light-bootstrap

A Laravel frontend preset that replaces default auth scaffolding with the Light Bootstrap Dashboard theme, adding responsive Blade admin layouts plus login, register, and password reset views. Install via Composer and the preset command for a clean Bootstrap dashboard UI.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal steps (fresh app):

composer require laravel-frontend-presets/light-bootstrap-dashboard:^1.0.6
php artisan ui light-bootstrap --auth   # Laravel 8/9/10 via laravel/presets
# older installs: php artisan preset light-bootstrap
npm install && npm run dev
php artisan migrate
php artisan serve

v1.0.6 is a compatibility release, not a feature release — the changelog line is literally "Update to Laravel 10.x branch fix". In practice that means the composer.json constraint was widened/fixed so the package installs on Laravel 10; treat everything else (stubs, asset pipeline, Bootstrap version) as unchanged until you've diffed vendor/laravel-frontend-presets/light-bootstrap-dashboard/src/ against the previous tag. Pin ^1.0.6 explicitly if you're on Laravel 10 — older tags will either fail to resolve or silently install a stale scaffold.

Still verify which command mechanism your installed tag ships before running anything: the modern build registers ui light-bootstrap through laravel/presets, while old tags assume php artisan preset light-bootstrap (Laravel 5.5–6). The wrong one silently does nothing.

The --auth flag is still the whole point: it scaffolds login, register, forgot/reset password, home, plus layouts/master and layouts/partials/* using the Light Bootstrap Dashboard markup, and wires the auth middleware onto /home.

Where to look first:

  1. routes/web.php — confirm /home is behind auth and RouteServiceProvider::HOME points there. On Laravel 10, HOME lives in app/Providers/RouteServiceProvider.php exactly as before, but skeleton apps may have already customized it.
  2. resources/views/layouts/master.blade.php — the shell (@yield('content'), @stack('styles'), @stack('scripts'), sidebar/navbar includes, asset calls). This is where you learn whether v1.0.6 migrated to Vite or still calls mix() — the release note gives you no answer.
  3. resources/views/layouts/partials/sidebar.blade.php — this is your navigation; every real project customizes it first.
  4. resources/views/home.blade.php — the demo dashboard (stat cards + Chartist widgets). This is the file you delete/replace.
  5. resources/assets/js/light-bootstrap-dashboard.js and (if present) webpack.mix.js — how jQuery, Chartist, bootstrap-notify, and perfect-scrollbar get bundled. If vite.config.js is there instead, the package did more than a constraint bump.

First use case: log in, land on /home, then replace home.blade.php with one real KPI card row and one real chart fed from a controller. That exercises the layout, the asset pipeline, and the @push('scripts') hook all at once — the three things that break most often.

Implementation Patterns

Extend the master layout, don't copy it:

@extends('layouts.master')

@section('title', 'Orders')

@push('styles')
  <link rel="stylesheet" href="{{ asset('css/orders.css') }}">
@endpush

@section('content')
  <div class="row">
    <div class="col-md-4">
      <div class="card card-stats">
        <div class="card-body">
          <div class="row">
            <div class="col-5"><div class="icon-big text-center icon-warning"><i class="nc-icon nc-bag-16"></i></div></div>
            <div class="col-7">
              <div class="numbers"><p class="card-category">Orders</p><p class="card-title">{{ number_format($orderCount) }}</p></div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
@endsection

@push('scripts')
  <script>new Chartist.Line('#ordersChart', { labels: @json($labels), series: [@json($series)] });</script>
@endpush

Stick to the theme's vocabulary — .card, .card-stats, .card-category, .card-title, .numbers, .icon-big — instead of hand-rolled markup, otherwise spacing and typography drift immediately.

Sidebar as a config-driven partial. The shipped sidebar is hardcoded demo links. Convert it once:

@foreach (config('nav.items') as $item)
  <li class="{{ request()->routeIs($item['route'].'*') ? 'active' : '' }}">
    <a href="{{ route($item['route']) }}">
      <p><i class="{{ $item['icon'] }}"></i> {{ $item['label'] }}</p>
    </a>
  </li>
@endforeach

request()->routeIs() keeps active state correct across nested resource routes; a plain == on Route::currentRouteName() breaks on orders.show.

Flash notifications via the bundled plugin — wrap it once in a partial included from the master layout:

@if (session('status'))
  @push('scripts')
    <script>$.notify({ message: "{{ session('status') }}" }, { type: 'success', placement: { from: 'top', align: 'right' } });</script>
  @endpush
@endif

Two layouts, two purposes. Auth screens use the standalone centered layout the preset installs; authenticated pages use layouts.master (which expects .wrapper > .sidebar + .main-panel). If you build a second dashboard (admin vs. user, or a separate guard), duplicate the master into layouts/admin.blade.php with its own sidebar rather than adding conditionals inside one file.

Charts belong in @push('scripts'), not in @section('content'). Content renders before the vendor bundle in the master layout's footer, so inline chart init in the content block throws Chartist is not defined.

Customization layer. Add resources/assets/sass/_overrides.scss (or resources/css/_overrides.scss if v1.0.6 went Vite) and import it after the theme import; never edit the vendored theme SCSS, since re-running the preset overwrites it.

Routes/register toggle. For internal panels, Auth::routes(['register' => false]) — but you must then strip the "Create account" links from the shipped auth/login.blade.php, or you get a RouteNotFoundException on render.

Gotchas and Tips

  • v1.0.6 is a one-line release note; verify before trusting it. "Update to Laravel 10.x branch fix" may mean nothing more than a composer.json constraint change. Before assuming Laravel 10 support is complete, check: does php artisan ui light-bootstrap --auth register? Do the stubs still reference Mix (mix('js/app.js')) while your Laravel 10 app expects Vite? Do the auth controllers use $request->validate() style or the old Validator::make()? Diff the tag against v1.0.5 in vendor/ — five minutes buys certainty.
  • The preset overwrites, it does not merge. It replaces resources/views/{auth,layouts,home,welcome}, resources/assets/*, the Mix/Vite config, and package.json scripts. Commit before running, and only run it on a fresh app.
  • Laravel Mix, not Vite — probably still. The 2023 build predates Vite, and a "Laravel 10 branch fix" rarely rewrites the whole asset pipeline. On Laravel 9/10 you may still have to migrate by hand: move resources/assets/js → resources/js, resources/assets/sass → resources/css, declare both in vite.config.js, and replace every {{ mix(...) }}/asset() reference in layouts/master.blade.php with @vite([...]). Budget an hour; this remains the single biggest friction point.
  • The theme hard-requires a global jQuery $. In resources/js/app.js: window.$ = window.jQuery = require('jquery'); require('bootstrap'); require('chartist'); require('bootstrap-notify'); and import the theme JS last. Loading it as an ES module or with type="module" breaks $.notify, perfect-scrollbar init, and the sidebar toggle without any console error you'd recognize.
  • Sidebar/mobile behaviour is tied to the .wrapper DOM. If you simplify the layout and drop .wrapper, .sidebar, .main-panel, the collapse animation and scrollbar silently stop working — the JS queries those selectors directly.
  • Vendored asset paths are hardcoded ({{ asset('assets/css/...') }} or similar, depending on the tag). Once you move to hashed build output, grep the layout for asset( and fix every one; a stale path gives an unstyled page with a 404 in the network tab only.
  • Fonts/icons ship as static files (Nucleo, Font Awesome, Linearicons) under public/. If .gitignore excludes built public assets on your CI deploy, icons render as empty boxes. Either commit them or copy them in a build step.
  • npm run dev failures are almost always node-sass. Laravel 10 needs PHP 8.1+, and its typical toolchain (Node 18/20) has no prebuilt node-sass binary. Swap to sass (dart-sass) in package.json and update the sass() options in your Mix/Vite config; also ensure cross-env is present or NODE_ENV=development never gets set on Windows.
  • Package health is still a real risk. Tiny star count, zero dependents, two sparse releases across 2023→now, and no stated Laravel 11 support. Treat it as a one-shot scaffold, not a dependency — after running the preset you own the code. Pin ^1.0.6, and consider moving it to require-dev or removing it entirely after scaffolding and committing the generated files.
  • No tests ship with the preset, but it changes routing. Add one feature test asserting a guest hitting /home is redirected to /login and an authenticated user gets 200 — that catches the RouteServiceProvider::HOME misconfiguration that bites during Laravel 10 upgrades especially.
  • Prune the demo payload before production. The theme ships demo images, extra chart data, and unused plugin bundles; deleting them from public/ and trimming app.js imports is usually a multi-megabyte win.
  • Extension point: if you find yourself re-running the preset on every new project, fork it and edit the stubs/ directory (replace the home.blade.php stub with your own dashboard skeleton, strip demo links from the sidebar stub, and — if you've done the Vite migration — commit the Vite config into the fork). That's far cheaper than re-doing the same cleanup each time, and it insulates you from the next sparse release.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
robertmarney/lara-hierarchial-collections
simonschaufi/rule-doc-generator
emissaoja/emissaoja
blackbricksoftware/gravityforms-civicrm-form-processor
al-rahabi/fancy-crud
jinas/dhivatar-component
mltstephane/laravel-quality
bernskiold/laravel-talentlms
bernskioldmedia/laravel-form-architect
youbar/easy-crud
c-point-labs/laravel-hostyourai
dbravoan/dbcms-admin-theme-dbcms
dbravoan/dbcms-theme-db-cyber
dbravoan/dbcms-blocks-basic
dbravoan/dbcms-module-content-audit
dbravoan/dbcms-module-ai-assistant
paygate-to/paygate-php
padosoft/askmydocs-connector-base
defstudio/supercharged-carbon
bernskioldmedia/laravel-matomo