Architecture & Coexistence
BlatUI Admin is architected around a strict Four-Tier Installer Pipeline and non-destructive host integration so it can be installed safely into both greenfield Laravel projects and mature Livewire/Flux codebases.
Four-Tier Lifecycle Pipeline
- Diagnostics (
BlatUI\Admin\Console\Installer\Diagnostics)EnvironmentDetectorperforms read-only checks on PHP, Laravel, Node.js, lockfiles (bun.lockb/bun.lock,pnpm-lock.yaml,yarn.lock,package-lock.json), Vite config, Tailwind CSS v4, and installed packages, producing an immutableDiagnosticReport. - Actions (
BlatUI\Admin\Console\Installer\Actions) Headless execution services (ProcessRunner,ViteWiringManager,StubManager,ArtisanRunner) perform deterministic operations and expose dry-run descriptions. - Wizard (
BlatUI\Admin\Console\Installer\Wizard)InstallWizardandInstallContextorchestratelaravel/promptsinteractions, dry-run previews, and step-by-step execution. - CLI Entrypoints (
BlatUI\Admin\Console\Commands)BlatuiAdminCommand(blatui:admin) andAdminInstallCommand(admin:install) parse CLI options intoInstallContextand delegate toInstallWizard.
Runtime Coexistence Matrix
ViteWiringManager inspects the host application's dependencies and wires CSS/JS additively without ever causing duplicate Alpine.js instances:
1. Zero Duplicate-Alpine (resources/js/app.js)
- Greenfield / Standalone: Installs
alpinejsvia your detected Node package manager and appends:jsimport "./blatui.js"; - Livewire v3 / v4 Detected: Never installs a duplicate
alpinejspackage. Instead, registersblatui-core.jsonto Livewire's bundledwindow.Alpine:jsimport { registerBlatUI } from './blatui-core.js' document.addEventListener('alpine:init', () => { registerBlatUI(window.Alpine) }) - Livewire + Flux UI Detected: Preserves Flux's theme store by passing
{ theme: false }:jsimport { registerBlatUI } from './blatui-core.js' document.addEventListener('alpine:init', () => { registerBlatUI(window.Alpine, { theme: false }) })
2. Additive W3C/Lightning CSS Wiring (resources/css/app.css)
Lightning CSS and Tailwind v4 require all @import statements to precede regular CSS rules. ViteWiringManager::wireCSS() inspects resources/css/app.css:
- If
@importrules already exist (such as@import "tailwindcss";),@import "./blatui.css";is inserted immediately after the last@importstatement. - If no
@importrules exist yet,@import "./blatui.css";is inserted after leading comments,@charset, or statement-only@layerdeclarations, before the first selector block.