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

Lali Laravel Package

arifbudimanar/lali

Lali (Laravel Activity Log Interface) gives your Laravel app a clean, searchable dashboard for activity logs. Browse, filter, and inspect model changes, user actions, and system events without building custom admin screens.

View on GitHub
Deep Wiki
Context7

Getting Started

Lali is not a package you composer require. It is a TALL-stack skeleton application (Tailwind + Alpine + Livewire + Laravel) — a starting point you copy once per project, then own outright. Treat it like laravel/laravel with opinions, not like a dependency.

First run (5 minutes):

# Option A — if it's still installable as a project skeleton
composer create-project arifbudimanar/lali my-app

# Option B — clone (safer, since the repo is archived)
git clone https://github.com/arifbudimanar/lali my-app
cd my-app
composer install
cp .env.example .env
php artisan key:generate
npm install

Then configure DB_* in .env, run php artisan migrate --seed (if seeders exist), php artisan storage:link, and npm run dev alongside php artisan serve.

Where to look first, in this order:

  1. composer.json / package.json — this tells you the Laravel, Livewire, Tailwind and Vite versions the skeleton was frozen at. This is the single most important file given the archive date.
  2. routes/web.php — how pages are wired to Livewire full-page components.
  3. resources/views/layouts/ — the app shell, where @livewireStyles/@livewireScripts and Vite directives live.
  4. app/Livewire/ (or app/Http/Livewire/) — the component conventions the author chose.
  5. tailwind.config.js and vite.config.js — content paths and asset pipeline.

First use case: you need an authenticated dashboard with a couple of CRUD screens and don't want to hand-wire Breeze/Jetstream + Tailwind + Livewire. Boot Lali, strip the demo pages, and you have a working login + layout in an afternoon rather than a day.

Implementation Patterns

Skeleton-as-template, not skeleton-as-dependency. The normal workflow is: create one project from it, then never re-pull from upstream. If you maintain several apps, fork Lali into your own private starter repo and evolve that — do not try to merge upstream changes later.

Full-page components for routes. The idiomatic TALL pattern the skeleton follows is:

// routes/web.php
Route::get('/dashboard', Dashboard::class)->middleware('auth');
// app/Livewire/Dashboard.php
class Dashboard extends Component
{
    public function render()
    {
        return view('livewire.dashboard')->layout('layouts.app');
    }
}

Keep page-level components thin; push reusable widgets into child components rendered from the page.

State in Livewire, polish in Alpine. Use Livewire properties + wire:model for anything that must survive a request; use Alpine x-data only for purely visual toggles (dropdowns, modals). Mixing the two is where TALL projects get messy — establish the rule on day one.

Form handling. Follow whatever the skeleton does (dedicated Form objects vs. inline rules()). Whichever you pick, keep validation rules next to the component that owns the form so $this->validate() and the Blade error bags stay in sync.

Auth and layout integration. The skeleton ships its own auth views. Do not layer Breeze or Jetstream on top — you'll get duplicate routes, duplicate layouts, and conflicting Tailwind configs. Pick one and delete the other.

Pruning as a first-class step. Immediately after scaffolding, delete demo components, seeders and views you don't need, then run php artisan route:list to confirm nothing dangles. A starter kit's biggest hidden cost is dead code you're now responsible for.

Asset pipeline. In dev, run npm run dev (Vite HMR). In any deployed environment, npm run build is mandatory — the @vite directive throws ViteManifestNotFoundException otherwise.

Gotchas and Tips

Archived status is the headline risk. No security patches, no Laravel major upgrades, no Livewire fixes. Before shipping, run:

composer outdated
npm audit

and budget an explicit upgrade pass for Laravel, Livewire and Tailwind (Tailwind 3→4 and Livewire 2→3 are both non-trivial). Pin composer.lock and commit it.

It is not a library. There is no service provider, no publishable config, no facade. Any "can I just install this into an existing app?" instinct is wrong — copy the files you want instead.

Version drift vs. current docs. Tutorials for the current Livewire/Tailwind will not match the skeleton's pinned versions. Always check composer.json before following a guide; the error messages (Undefined method livewire:..., @vite failures, wire: directive warnings) usually mean version mismatch, not a bug in your code.

Alpine loaded twice. Livewire bundles Alpine. If the skeleton's layout also pulls Alpine from a CDN or app.js, you get silent double-initialization — components behaving twice per click, or x-data values resetting. Grep for Alpine.start() and ensure exactly one call.

Tailwind purging dynamic classes. Classes assembled in PHP ("bg-{$color}-500") are invisible to Tailwind's scanner and vanish in production builds. Either use full class names in a match/array, or add them to safelist in tailwind.config.js. Symptom: perfect in npm run dev, unstyled in npm run build.

wire:key in loops. Any @foreach rendering Livewire-managed elements needs a stable wire:key. Omitting it produces the classic "input loses focus after typing" and stale-checkbox bugs that are painful to trace.

Debugging Livewire. Use ->dd() on a component method or $this->dispatch() logging before reaching for the browser devtools; the Livewire devtools extension helps but hides server-side validation state, which is usually where the bug is.

Environment setup traps. APP_KEY missing → 500 on every encrypted cookie. storage:link missing → broken uploaded images. SESSION_DRIVER=database with no sessions table → silent logout loops after migrate.

Extension points are just Laravel. Add your own service providers, packages and config as you would in any app — the skeleton has no plugin surface to respect. The only convention worth preserving is the component/view directory structure, because it's what future maintainers (and the skeleton's docs) assume.

If you only want the ideas, not the code. Read the layout, the Livewire component examples and tailwind.config.js, then scaffold with laravel new + Livewire's own installer. Given the archive date, borrowing patterns is often a better trade than adopting the whole frozen skeleton.

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.
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log