beartropy/ui
Beartropy UI is a TALL stack component library for Laravel and Livewire with 40+ Tailwind-powered components, including modals, dropdowns, date pickers, a command palette, and dark mode support.
Architecture fit. beartropy/ui is purpose-built for the TALL stack (Tailwind + Alpine + Laravel + Livewire), which means it slots into the exact runtime shape of a modern Laravel app as a Blade component library — no JS build tooling, no SPA framework, no headless-CMS adapter layer. It ships 40+ Blade components (Button, Input, Modal, Dropdown, Table, CommandPalette, FileDropzone, DatePicker, ChatInput, etc.) plus a theme system (ToggleTheme, ThemeHead, @BeartropyAssets) that handles light/dark mode including server-side rendering via a bt_theme cookie and FOUC avoidance. That is a genuinely thoughtful design for Livewire's wire:navigate SPA behavior, and it's the kind of plumbing a team would otherwise build and maintain in-house. Fit is strongest for teams already committed to Livewire 3/4; it's a non-starter for Vue/React/Inertia apps or anything outside Laravel.
Integration feasibility. Low friction mechanically: composer require beartropy/ui, publish assets/config/translations via tagged commands, drop <x-bt-*> components into existing Blade views. No database migrations, no service container gymnastics, no queue/event coupling. The AI-assistant artifacts (Claude slash commands, .cursorrules, MCP tools via Laravel Boost, published skills) lower ramp-up for engineering teams using AI coding assistants, which is a real productivity tailwind but also signals the package is betting on that workflow being standard. Docs live primarily off-repo at beartropy.com/ui; the repo carries readme, docs directory, changelog, and releases — enough to evaluate but external-site dependency is a continuity risk.
Technical risk. High, and mostly about adoption and lifecycle, not code quality:
livewire/livewire: ^3.6|^4.0), and tests target Laravel 13 via Testbench 11. If your app pins Livewire 3.5 or Laravel 11/12, verify the constraint matrix before planning.Key questions for the maintainer / spike.
@BeartropyAssets and the theme cookie expected to interact with existing CSP, wire:navigate, and Turbo/Hotwire-style navigation in a host app?Stack fit. Target integration is a Laravel 11/12+ app on Livewire 3.6+ (or 4.0) with Tailwind 3+/4 and Alpine 3. Confirm your Tailwind pipeline can accept the package's preset/safelist additions; if you have a design-system layer already (e.g. a custom component kit), beartropy becomes a secondary library rather than the source of truth, and you must be strict about which layer owns each primitive.
Migration path. Treat this as an additive adoption, not a rip-and-replace:
vendor:publish with the beartropy-ui-lang tag for i18n), and wire @BeartropyAssets into the layout head.ToggleTheme + ThemeHead (or rely on @BeartropyAssets' inline theme script) on one authenticated area to validate FOUC behavior across hard refresh, wire:navigate, and back-button. This is the highest-risk surface and the one with the most patch churn historically.Button, Input, Badge, Table) that map cleanly to existing markup, then move to stateful ones (Modal, Dropdown, Select, DatePicker) where Alpine interaction and teleport behavior must be regression-tested (the changelog shows multiple Select/Dropdown positioning and outside-click fixes)..cursorrules and register MCP tools via php artisan beartropy:skills to accelerate onboarding. For teams that don't, skip it — it adds clutter, not capability.Compatibility. Resolve the version constraint matrix before any code changes. Pin an exact minor (e.g. ^1.0.20) rather than floating, and lock it in composer.lock per environment. Verify Livewire version and Laravel version alignment against composer.json (Livewire ^3.6|^4.0, Testbench ^10.4|^11.0). Audit any existing Tailwind safelists and custom presets for collisions with the package's own (dialog colors, searchbar preset key).
Sequencing. (a) Dependency-compatibility spike → (b) sandbox install + asset publish → (c) theme/FOUC validation → (d) primitive component migration → (e) stateful component migration with visual regression coverage → (f) optional AI-tooling enablement → (g) documentation of "local overrides" (any component published into resources/views/vendor/beartropy/...) so forks are intentional. Budget ~1–2 engineer-weeks for a mid-sized app, weighted heavily toward theme and Livewire-navigation testing.
Maintenance. This is the dominant concern. An effectively single-maintainer package with 3 stars and no dependents means your team is the real support contract. Two mitigations: (1) vendor-copy or tag-pin any component you customize rather than relying on upstream, and (2) treat each upstream release as a code review — the v1.0.x cadence is high enough that auto-updating is not advisable. Subscribe to releases; read the changelog before bumping. Budget 2–4 hours per minor version for triage; more if you've published component overrides.
Support. There is no community forum, no Stack Overflow tag with volume, and no dependency graph to infer best practices from. Realistic support model: internal owner (one engineer designated as "beartropy maintainer"), a private fork if the project stalls, and a documented upgrade runbook. Escalation to upstream is a GitHub issue — response SLAs are unknown.
Scaling. Performance should be fine for typical admin/product apps: components are Blade-rendered, Alpine is lightweight, and asset cache-busting uses filemtime() (v1.0.14 fix) rather than a per-request time(), which is the right call for CDN/proxy caching. Risks at scale are (a) Alpine bundle duplication if you already ship Alpine — dedupe, don't double-load; (b) Tailwind class bloat if you safelist aggressively — audit content and safelist after adoption; (c) teleport-heavy components (Dropdown, Select) can interact badly with complex modal nesting if @click.stop / @click.outside semantics drift, which the changelog shows has historically been a moving target.
Failure modes to plan for.
wire:navigate: fixed via data-navigate-once and stable filemtime() cache-busting, but any local override to the head partial can reintroduce it.Ramp-up. For an engineer familiar with Laravel + Livewire + Tailwind, ramp-up is 1–3 days to be productive with primitives and 1–2 weeks to be confident with theme, dropdown, and date-picker edge cases. The AI-assistant skill pack (bt-ui-* slash commands, .cursorrules, Boost MCP tools) meaningfully accelerates this if the team already uses those tools. The cost is not learning the components — it's learning the package's quirks, which are only documented through the changelog and code.
Recommendation for a TPM. Conditionally approve for non-critical internal tooling, admin surfaces, and prototypes where velocity matters and the blast radius of a regression is contained. Block for customer-facing or compliance-scoped surfaces until: (a) the maintainer publishes an explicit support/LTS policy, (b) a public CI matrix is visible, (c) at least one major version has shipped without FOUC-class regressions, and (d) your team has nominated an internal owner with a fork plan. Do not adopt in projects where UI regressions map directly to revenue or SLAs.
How can I help you explore Laravel packages today?